Пример #1
0
        public void Receive(MyServer.ClientPeer client, int subCode, object value)
        {
            switch (subCode)
            {
            case FightCode.Leave_CREQ:
                LeaveRoom(client);
                break;

            case FightCode.LookCard_CREQ:
                LookCard(client);
                break;

            case FightCode.Follow_CREQ:
                Follow(client);
                break;

            case FightCode.AddStakes_CREQ:
                AddStakes(client, (int)value);
                break;

            case FightCode.GiveUpCard_CREQ:
                GiveUpCard(client);
                break;

            case FightCode.CompareCard_CREQ:
                CompareCard(client, (int)value);
                break;

            default:
                break;
            }
        }
Пример #2
0
 /// <summary>
 /// 断开连接
 /// </summary>
 /// <param name="client"></param>
 public void Disconnect(MyServer.ClientPeer client)
 {
     for (int i = 0; i < matchCacheList.Count; i++)
     {
         LeaveRoom(client, i);
     }
 }
Пример #3
0
        public void Receive(MyServer.ClientPeer client, int subCode, object value)
        {
            switch (subCode)
            {
            case ChatCode.CREQ:
                Chat(client, value.ToString());
                break;

            default:
                break;
            }
        }
Пример #4
0
        /// <summary>
        /// 客户端断开连接
        /// </summary>
        /// <param name="client"></param>
        /// <param name="reason"></param>
        private void Disconnect(ClientPeer client, string reason)
        {
            try
            {
                if (client == null)
                {
                    throw new Exception("客服端为空,无法连接");
                }
                application.Disconnect(client);
                Console.WriteLine(client.clientSockert.RemoteEndPoint + "断开连接原因:" + reason);
                client.Disconnect();

                clientPeerPool.Enqueue(client);
                semaphore.Release();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }
        }
Пример #5
0
        /// <summary>
        /// 处理数据的接收
        /// </summary>
        private void ProcessReceive(SocketAsyncEventArgs e)
        {
            // e.UserToken 用于获取或设置与此异步套接字操作关联的用户或应用程序对象,即 ClientPeer
            ClientPeer client = e.UserToken as ClientPeer;

            // 判断数据是否接收成功
            if (client.ReceiveArgs.SocketError == SocketError.Success && client.ReceiveArgs.BytesTransferred > 0)
            {
                // 将接收的数据拷贝到 packet 里面
                int    length = client.ReceiveArgs.BytesTransferred; // 接收到的数据的长度
                byte[] packet = new byte[length];
                Buffer.BlockCopy(client.ReceiveArgs.Buffer, 0, packet, 0, length);

                // 让 ClientPeer 自身处理接收到的数据
                client.ProcessReceive(packet);

                // 伪递归
                StartRecive(client);
            }
            else   // 数据接收不成功,断开连接
                   // 没有传输的字节数,就代表断开了连接,有两种可能
            {
                if (client.ReceiveArgs.BytesTransferred == 0)
                {
                    // 客户端主动断开连接
                    if (client.ReceiveArgs.SocketError == SocketError.Success)
                    {
                        Disconnect(client, "客户端主动断开连接");
                    }
                    // 因为网络异常,被动断开连接
                    else
                    {
                        Disconnect(client, client.ReceiveArgs.SocketError.ToString());
                    }
                }
            }
        }
Пример #6
0
        public void Receive(MyServer.ClientPeer client, int subCode, object value)
        {
            switch (subCode)
            {
            case MatchCode.Enter_CREQ:     // 客户端注册请求
                EnterRoom(client, (int)value);
                break;

            case MatchCode.Leave_CREQ:
                LeaveRoom(client, (int)value);
                break;

            case MatchCode.Ready_CREQ:
                Ready(client, (int)value);
                break;

            case MatchCode.UnReady_CREQ:
                UnReady(client, (int)value);
                break;

            default:
                break;
            }
        }
Пример #7
0
 /// <summary>
 /// 一条消息处理完成后的回调
 /// </summary>
 /// <param name="client"></param>
 /// <param name="msg"></param>
 private void ReceiveProcessCompleted(ClientPeer client, NetMsg msg)
 {
     // 交给应用层处理这个消息
     application.Receive(client, msg);
 }
Пример #8
0
 /// <summary>
 /// 入队列
 /// </summary>
 /// <param name="client"></param>
 public void Enqueue(ClientPeer client)
 {
     clientPeerQueue.Enqueue(client);
 }
Пример #9
0
 public void Disconnect(MyServer.ClientPeer client)
 {
     LeaveRoom(client);
 }
Пример #10
0
 public void Disconnect(MyServer.ClientPeer client)
 {
 }