コード例 #1
0
        /// <summary>
        /// 進行HandShake
        /// </summary>
        /// <param name="socket"></param>
        private void ShakeHands(Socket socket)
        {
            // 存放Request資料的Buffer
            byte[] buffer = new byte[2048];//origin 1024 but too short
            // 接收的Request長度
            var length = socket.Receive(buffer);
            // 將buffer中的資料解碼成字串
            var data = Encoding.UTF8.GetString(buffer, 0, length);

            Console.WriteLine(data);

            // 將資料字串中的空白位元移除
            var dataArray = data.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            // 從Client傳來的Request Header訊息中取
            var key       = dataArray.Where(s => s.Contains("Sec-WebSocket-Key: ")).Single().Replace("Sec-WebSocket-Key: ", String.Empty).Trim();
            var acceptKey = CreateAcceptKey(key);
            // WebSocket Protocol定義的ShakeHand訊息
            var handShakeMsg =
                "HTTP/1.1 101 Switching Protocols\r\n" +
                "Upgrade: websocket\r\n" +
                "Connection: Upgrade\r\n" +
                "Sec-WebSocket-Accept: " + acceptKey + "\r\n\r\n";

            socket.Send(Encoding.UTF8.GetBytes(handShakeMsg));

            Console.WriteLine(handShakeMsg);
            // 產生WebSocketConnection實體並加入佇列中管理
            var clientConn = new WebSocketConnection(socket);

            _connections.Add(clientConn);
            // 註冊Disconnected事件
            clientConn.OnDisconnected += new ClientDisconnectedEventHandler(DisconnectedWork);

            // 確認Connection是否繼續存在,並持續監聽
            if (OnConnected != null)
            {
                OnConnected(clientConn, EventArgs.Empty);
            }
            _serverSocket.BeginAccept(new AsyncCallback(onConnect), null);
        }
コード例 #2
0
        /// <summary>
        /// 進行HandShake
        /// </summary>
        /// <param name="socket"></param>
        private void ShakeHands(Socket socket)
        {
            // 存放Request資料的Buffer
            byte[] buffer = new byte[2048];//origin 1024 but too short
            // 接收的Request長度
            var length = socket.Receive(buffer);
            // 將buffer中的資料解碼成字串
            var data = Encoding.UTF8.GetString(buffer, 0, length);
            Console.WriteLine(data);

            // 將資料字串中的空白位元移除
            var dataArray = data.Split(Environment.NewLine.ToCharArray(), StringSplitOptions.RemoveEmptyEntries);
            // 從Client傳來的Request Header訊息中取
            var key = dataArray.Where(s => s.Contains("Sec-WebSocket-Key: ")).Single().Replace("Sec-WebSocket-Key: ", String.Empty).Trim();
            var acceptKey = CreateAcceptKey(key);
            // WebSocket Protocol定義的ShakeHand訊息
            var handShakeMsg =
                "HTTP/1.1 101 Switching Protocols\r\n" +
                "Upgrade: websocket\r\n" +
                "Connection: Upgrade\r\n" +
                "Sec-WebSocket-Accept: " + acceptKey + "\r\n\r\n";

            socket.Send(Encoding.UTF8.GetBytes(handShakeMsg));

            Console.WriteLine(handShakeMsg);
            // 產生WebSocketConnection實體並加入佇列中管理
            var clientConn = new WebSocketConnection(socket);
            _connections.Add(clientConn);
            // 註冊Disconnected事件
            clientConn.OnDisconnected += new ClientDisconnectedEventHandler(DisconnectedWork);

            // 確認Connection是否繼續存在,並持續監聽
            if (OnConnected != null)
                OnConnected(clientConn, EventArgs.Empty);
            _serverSocket.BeginAccept(new AsyncCallback(onConnect), null);
        }
コード例 #3
0
 /// <summary>
 /// DisConnected事件
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="ev"></param>
 private void DisconnectedWork(WebSocketConnection sender, EventArgs ev)
 {
     _connections.Remove(sender);
     sender.Close();
 }
コード例 #4
0
 public void SendToClient(String data, WebSocketConnection self)
 {
     _connections.Where(c => c == self).ToList().ForEach(c => c.Send(data));
 }
コード例 #5
0
 public void SendToAllExceptSelf(String data, WebSocketConnection self)
 {
     _connections.Where(c => c != self).ToList().ForEach(c => c.Send(data));
 }
コード例 #6
0
 private void _webSocketLoginListener_OnConnected(WebSocketConnection sender, EventArgs ev)
 {
     sender.OnDataReceived += Sender_OnDataReceived;
 }
コード例 #7
0
 private void Sender_OnDataReceived(WebSocketConnection sender, DataReceivedEventArgs ev)
 {
     _webSocketLoginListener.SendToClient(CurrentAccount + "-" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), sender);
 }
コード例 #8
0
 private void Sender_OnDataReceived(WebSocketConnection sender, DataReceivedEventArgs ev)
 {
     _webSocketLoginListener.SendToClient(CurrentAccount + "-" + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), sender);
 }
コード例 #9
0
 private void _webSocketLoginListener_OnConnected(WebSocketConnection sender, EventArgs ev)
 {
     sender.OnDataReceived += Sender_OnDataReceived;
 }
コード例 #10
0
 public void SendToClient(String data, WebSocketConnection self)
 {
     _connections.Where(c => c == self).ToList().ForEach(c => c.Send(data));
 }
コード例 #11
0
 public void SendToAllExceptSelf(String data, WebSocketConnection self)
 {
     _connections.Where(c => c != self).ToList().ForEach(c => c.Send(data));
 }
コード例 #12
0
 /// <summary>
 /// DisConnected事件
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="ev"></param>
 private void DisconnectedWork(WebSocketConnection sender, EventArgs ev)
 {
     _connections.Remove(sender);
     sender.Close();
 }