代码拉取完成,页面将自动刷新
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
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。