Example #1
0
 protected void CloseClientSocket(SocketAsyncEventArgs e)
 {
     Close(() =>
     {
         if (e.SocketError == SocketError.ConnectionReset)
         {
             if (this is GameClient)
             {
                 ServerShutDown?.Invoke(this, e);
                 Console.WriteLine("服务器主动断开");
             }
             else
             {
                 Console.WriteLine("客户端异常断开");
             }
         }
         if (e.SocketError == SocketError.ConnectionAborted)
         {
             Console.WriteLine("网络断开");
             ClientInternetError?.Invoke(this, e);
         }
         if (e.SocketError == SocketError.Success)
         {
             Console.WriteLine("客户端正常断开");
         }
         DisconnectCompleted?.Invoke(this, e);
     });
 }
Example #2
0
 //这是一个给收发异常准备的断开引发事件方法
 private void Disconnected(bool raiseEvent)
 {
     if (raiseEvent)
     {
         DisconnectCompleted?.Invoke(this, new SocketEventArgs(this, SocketAsyncOperation.Disconnect));
     }
 }
Example #3
0
        //客户端断开连接
        private void client_DisconnectCompleted(object sender, SocketEventArgs e)
        {
            //移除客户端
            lock (clients)
                clients.Remove((TCPListenerClient)e.Socket);

            e.Socket.DisconnectCompleted -= client_DisconnectCompleted;
            e.Socket.ReceiveCompleted    -= client_ReceiveCompleted;
            e.Socket.SendCompleted       -= client_SendCompleted;
            DisconnectCompleted?.Invoke(this, e);
        }
Example #4
0
 //客户端断开连接
 private void client_DisconnectCompleted(object sender, SocketAsyncEventArgs e)
 {
     Game.Network.UserToken userToken = e.UserToken as UserToken;
     //移除事件
     userToken.DisconnectCompleted -= client_DisconnectCompleted;
     userToken.ReceiveCompleted    -= client_ReceiveCompleted;
     userToken.SendCompleted       -= client_SendCompleted;
     DisconnectCompleted?.Invoke(this, e);
     //移除客户端
     m_UserTokenPool.Push(userToken);
     //增加一个信号量
     m_maxNumberAcceptedClients.Release();
 }
Example #5
0
        private void EndDisconnect(IAsyncResult result)
        {
            try
            {
                Socket.EndDisconnect(result);
            }
            catch
            {
            }
            //是否同步
            bool sync = (bool)result.AsyncState;

            if (!sync)
            {
                DisconnectCompleted?.Invoke(this, new SocketEventArgs(this, SocketAsyncOperation.Disconnect));
            }
        }