1 Star 0 Fork 0

毕升Office/go-socket.io

加入 Gitee
与超过 1400万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
connection_handlers.go 2.42 KB
一键复制 编辑 原始数据 按行查看 历史
dan 提交于 2021-11-19 14:50 +08:00 . golang
package socketio
import (
"log"
"gitee.com/ibisheng/go-socket.io/parser"
)
var readHandlerMapping = map[parser.Type]readHandler{
parser.Ack: ackPacketHandler,
parser.Connect: connectPacketHandler,
parser.Disconnect: disconnectPacketHandler,
}
func ackPacketHandler(c *conn, header parser.Header) error {
conn, ok := c.namespaces.Get(header.Namespace)
if !ok {
_ = c.decoder.DiscardLast()
return nil
}
conn.dispatch(header)
return nil
}
func eventPacketHandler(c *conn, event string, header parser.Header) error {
conn, ok := c.namespaces.Get(header.Namespace)
if !ok {
_ = c.decoder.DiscardLast()
return nil
}
handler, ok := c.handlers.Get(header.Namespace)
if !ok {
_ = c.decoder.DiscardLast()
return nil
}
args, err := c.decoder.DecodeArgs(handler.getEventTypes(event))
if err != nil {
c.onError(header.Namespace, err)
return errDecodeArgs
}
ret, err := handler.dispatchEvent(conn, event, args...)
if err != nil {
c.onError(header.Namespace, err)
return errHandleDispatch
}
if len(ret) > 0 {
header.Type = parser.Ack
c.write(header, ret...)
}
return nil
}
func connectPacketHandler(c *conn, header parser.Header) error {
if err := c.decoder.DiscardLast(); err != nil {
c.onError(header.Namespace, err)
return nil
}
handler, ok := c.handlers.Get(header.Namespace)
if !ok {
c.onError(header.Namespace, errFailedConnectNamespace)
return errFailedConnectNamespace
}
conn, ok := c.namespaces.Get(header.Namespace)
if !ok {
conn = newNamespaceConn(c, header.Namespace, handler.broadcast)
c.namespaces.Set(header.Namespace, conn)
conn.Join(c.ID())
}
_, err := handler.dispatch(conn, header)
if err != nil {
log.Println("dispatch connect packet", err)
c.onError(header.Namespace, err)
return errHandleDispatch
}
c.write(header)
return nil
}
func disconnectPacketHandler(c *conn, header parser.Header) error {
args, err := c.decoder.DecodeArgs(defaultHeaderType)
if err != nil {
c.onError(header.Namespace, err)
return errDecodeArgs
}
conn, ok := c.namespaces.Get(header.Namespace)
if !ok {
_ = c.decoder.DiscardLast()
return nil
}
conn.LeaveAll()
c.namespaces.Delete(header.Namespace)
handler, ok := c.handlers.Get(header.Namespace)
if !ok {
return nil
}
_, err = handler.dispatch(conn, header, args...)
if err != nil {
log.Println("dispatch disconnect packet", err)
c.onError(header.Namespace, err)
return errHandleDispatch
}
return nil
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/ibisheng/go-socket.io.git
git@gitee.com:ibisheng/go-socket.io.git
ibisheng
go-socket.io
go-socket.io
f22f23ac6ef8

搜索帮助