Ejemplo n.º 1
0
        /// <summary>
        /// 向自己发送信息
        /// </summary>
        /// <param name="wsocketMsg"></param>
        public void SendMessageToMe(WebSocketMessage wsocketMsg)
        {
            string resultData = "";

            if (this.WsResponseTextEventHandler != null)
            {
                WebsocketEventArgs args = new WebsocketEventArgs();
                args.WebSocketMessage = wsocketMsg;
                this.WsResponseTextEventHandler(this, args);
                resultData = args.ResultDataMsg;
            }

            if (!string.IsNullOrWhiteSpace(resultData))
            {
                foreach (DictionaryEntry dey in socketListHs)
                {
                    IWebSocketConnection subConn = (IWebSocketConnection)dey.Value;
                    if (subConn.ConnectionInfo.Id.ToString("N") == wsocketMsg.CGuidID)
                    {
                        subConn.Send(resultData);
                        break;
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public void WebSocketInit()
        {
            string          websocketPath = Utils.GetConfig("websocketPath");
            WebSocketServer wsServer      = new WebSocketServer(websocketPath);

            wsServer.Start(socket =>
            {
                //以下的设置,每当一个新连接进来,都会生效。
                socket.OnOpen = () => {
                    //自定义处理

                    if (this.WsOpenEventHandler != null)
                    {
                        WebsocketEventArgs args = new WebsocketEventArgs();
                        this.WsOpenEventHandler(this, args);
                    }
                };

                socket.OnClose = () => {
                    //从连接集合中移除
                    for (int i = socketListHs.Count - 1; i >= 0; i--)
                    {
                        if (socketListHs[i] == null)
                        {
                            socketListHs.Remove(i);
                        }
                    }
                    PlayerCount = socketListHs.Count;
                    //自定义处理
                    if (this.WsCloseEventHandler != null)
                    {
                        WebsocketEventArgs args = new WebsocketEventArgs();
                        this.WsCloseEventHandler(this, args);
                    }
                };

                socket.OnMessage = (message) =>
                {
                    ClientData cData            = Utils.JsonToObject <ClientData>(message);
                    WebSocketMessage wsocketMsg = new WebSocketMessage(socket.ConnectionInfo.ClientIpAddress, socket.ConnectionInfo.ClientPort.ToString(), socket.ConnectionInfo.Id.ToString("N"), cData);

                    if (Convert.ToBoolean(cData.IsConnSign))
                    {
                        //收到用户上线信息,更新socket列表
                        if (!socketListHs.ContainsKey(cData.IdentityMd5))
                        {
                            socketListHs.Add(cData.IdentityMd5, socket);
                        }
                        else
                        {
                            socketListHs[cData.IdentityMd5] = socket;
                        }
                        PlayerCount = socketListHs.Count;
                    }

                    if (this.WsListenEventHandler != null)
                    {
                        WebsocketEventArgs args = new WebsocketEventArgs();
                        args.WebSocketMessage   = wsocketMsg;
                        this.WsListenEventHandler(this, args);
                    }
                };
            });
        }