public static void OnConnected(IAsyncResult ar) { var socket = tcpSocket.EndAccept(ar); //新建一个角色 PlayerInfo playerInfo = new PlayerInfo(); playerInfo.Socket = socket; playerInfo.PlayerId = curPlayerId++; playerInfo.IsOperationReceived = true; //第一帧是服务器直接发过去的空帧 playerList.Add(playerInfo); Console.WriteLine("收到客户端连接,玩家id = " + playerInfo.PlayerId); socket.BeginReceive(playerInfo.ReadBuffer, 0, playerInfo.ReadBuffer.Length, SocketFlags.None, OnReceive, playerInfo); //发送玩家信息 netSendBuff.Reset(); NetSCSelfInfoMsg msg = new NetSCSelfInfoMsg(); msg.PlayerId = playerInfo.PlayerId; msg.Write(netSendBuff); socket.Send(netSendBuff.DataBuffer); //玩家列表消息 NetSCPlayerListMsg msg2 = new NetSCPlayerListMsg(); for (int i = 0; i < playerList.Count; i++) { msg2.PlayerList.PlayerList.Add(playerList[i].PlayerId); } netSendBuff.Reset(); msg2.Write(netSendBuff); //给所有玩家发送玩家列表 for (int i = 0; i < playerList.Count; i++) { try { playerList[i].Socket.Send(netSendBuff.DataBuffer); } catch (Exception e) { playerList[i].IsDisconnected = true; } } tcpSocket.BeginAccept(OnConnected, null); }
public void OnReceivePlayerList(NetSCPlayerListMsg msg) { for (int i = 0; i < msg.PlayerList.PlayerList.Count; i++) { var id = msg.PlayerList.PlayerList[i]; bool find = false; foreach (var player in PlayerManager.Instance.Players) { if (id == player.PlayerId) { find = true; } } if (!find) { PlayerManager.Instance.CreatePlayer(id); } } }