コード例 #1
0
ファイル: SocketServer.cs プロジェクト: lzl1918/Snake
 private void Client_MessageReceived(SocketClient socket, SocketMessageEventArgs args)
 {
     if (MessageReceived != null)
     {
         MessageReceived(socket, args);
     }
 }
コード例 #2
0
        private void ReceiveCallback(IAsyncResult ar)
        {
            lock (locker)
            {
                ReceiveInformation recvinf = (ReceiveInformation)ar.AsyncState;
                int  len        = 0;
                bool needMore   = false;
                int  lastoffset = 0;
                try
                {
                    len = socket.EndReceive(ar);

                    if (len <= 0)
                    {
                        DisconnectedReceived(false);
                    }
                    else
                    {
                        var messages = new SocketMessageEventArgs(recvinf.buffer, recvinf.lastoffset + len);
                        messages.Messages = SocketMessage.Resolve(recvinf.buffer, recvinf.lastindex, recvinf.lastoffset + len - 1, out needMore, out lastoffset);

                        if (messages.Messages.Count > 0)
                        {
                            if (MessageReceived != null)
                            {
                                MessageReceived(this, messages);
                            }
                        }

                        if (needMore == false)
                        {
                            recvinf.lastoffset = 0;
                            recvinf.lastindex  = 0;
                            recvinf.socket.BeginReceive(recvinf.buffer, 0, recvinf.buffer.Length, SocketFlags.None, ReceiveCallback, recvinf);
                        }
                        else
                        {
                            recvinf.lastoffset = recvinf.lastindex + len;
                            recvinf.lastindex  = lastoffset;
                            recvinf.socket.BeginReceive(recvinf.buffer, recvinf.lastoffset, recvinf.buffer.Length - recvinf.lastoffset, SocketFlags.None, ReceiveCallback, recvinf);
                        }
                    }
                }
                catch (SocketException sex)
                {
                    switch ((SocketExceptionErrorCode)sex.ErrorCode)
                    {
                    case SocketExceptionErrorCode.ConnectionForciblyClosed:
                        DisconnectedReceived(true);
                        break;
                    }
                }
            }
        }