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; } }
/// <summary> /// 断开连接 /// </summary> /// <param name="client"></param> public void Disconnect(MyServer.ClientPeer client) { for (int i = 0; i < matchCacheList.Count; i++) { LeaveRoom(client, i); } }
public void Receive(MyServer.ClientPeer client, int subCode, object value) { switch (subCode) { case ChatCode.CREQ: Chat(client, value.ToString()); break; default: break; } }
/// <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); } }
/// <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()); } } } }
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; } }
/// <summary> /// 一条消息处理完成后的回调 /// </summary> /// <param name="client"></param> /// <param name="msg"></param> private void ReceiveProcessCompleted(ClientPeer client, NetMsg msg) { // 交给应用层处理这个消息 application.Receive(client, msg); }
/// <summary> /// 入队列 /// </summary> /// <param name="client"></param> public void Enqueue(ClientPeer client) { clientPeerQueue.Enqueue(client); }
public void Disconnect(MyServer.ClientPeer client) { LeaveRoom(client); }
public void Disconnect(MyServer.ClientPeer client) { }