/// <summary> /// 发送玩家列表 /// </summary> /// <param name="clientToSend"></param> private void SendPlayerList(ClientInfo clientToSend) { var players = new string[currentConnectedNumber - 1]; clientLocker.EnterReadLock(); var count = 0; foreach (var kvp in clientList) { if (!clientToSend.PlayerName.Equals(kvp.Value.PlayerName)) { players[count] = kvp.Value.PlayerName; count++; } } clientLocker.ExitReadLock(); var dbfixed = new byte[currentConnectedNumber]; dbfixed[0] = (byte)(currentConnectedNumber - 1); var startpos = 1; var allName = string.Empty; foreach (var player in players) { dbfixed[startpos] = (byte)Encoding.UTF8.GetBytes(player).Length; startpos++; allName += player; } var dbplayername = Encoding.UTF8.GetBytes(allName); var toSend = new byte[dbfixed.Length + dbplayername.Length]; Array.Copy(dbfixed, toSend, dbfixed.Length); Array.Copy(dbplayername, 0, toSend, dbfixed.Length, dbplayername.Length); SendDataToClient(DataPack.GetPackedData((byte)ClientCode.PlayerList, toSend), clientToSend); }
private void SendUdpEnd() { isUdp = false; var toSend = DataPack.GetPackedData((byte)ServerCode.UdpEnd, Encoding.UTF8.GetBytes(clientId)); SendData(toSend); }
private void SendFull(ClientInfo client) { var id = client.ClientID; var iddb = Encoding.UTF8.GetBytes(id); SendDataToClient(DataPack.GetPackedData((byte)ClientCode.Full, iddb), client); DropClient(client); }
private void KeepAlive() { if (isUdp) { var iddb = Encoding.UTF8.GetBytes(clientId); var toSend = DataPack.GetPackedData((byte)ServerCode.KeepAlive, iddb); udpSocket.BeginSendTo(toSend, 0, toSend.Length, 0, serverEndPoint, null, null); Thread.Sleep(keepAliveTimeout); } }
private void SendNotifyData(bool isAdd, string playerName) { var dbname = Encoding.UTF8.GetBytes(playerName); var toSend = new byte[dbname.Length + 1]; var code = isAdd ? ClientCode.AddPlayer : ClientCode.RemovePlayer; toSend[0] = (byte)dbname.Length; Array.Copy(dbname, 0, toSend, 1, dbname.Length); SendDataToAll(DataPack.GetPackedData((byte)code, toSend)); }
/// <summary> /// 发送客户端ID号 /// </summary> /// <param name="clientToSend"></param> private void SendClientId(ClientInfo clientToSend) { //发送客户端ID var id = clientToSend.ClientID; var iddb = new byte[37]; Array.Copy(Encoding.UTF8.GetBytes(id), iddb, 36); iddb[36] = (byte)requestTimeout; SendDataToClient(DataPack.GetPackedData((byte)ClientCode.ClientID, iddb), clientToSend); }
private void ConnectComplete(IAsyncResult result) { try { var connState = (ConnectState)result.AsyncState; var resultSocket = connState.socket; resultSocket.EndConnect(result); if (resultSocket.Connected) { frame.SetMessage("连接服务器成功"); frame.StartPing(connState.ipAddress); frame.ToggleConnectButton(); var state = new StateObject(); Tcp_WaitForData(state); //发送连接请求数据 var dbname = Encoding.UTF8.GetBytes(connState.playerName); var tosend = new byte[dbname.Length + 1]; tosend[0] = (byte)dbname.Length; Array.Copy(dbname, 0, tosend, 1, dbname.Length); SendData(DataPack.GetPackedData((byte)ServerCode.AddPlayer, tosend)); } } catch (SocketException ex) { if (ex.ErrorCode == 10061) { frame.ShowMessageBox("连接失败", "服务器拒绝连接,可能由于目标服务器存在防火墙或未做端口映射"); } if (ex.ErrorCode == 10060) { frame.ShowMessageBox("连接失败", "无法建立指定IP地址的连接,请确保端口号和IP地址填写正确"); } if (client != null) { client.Close(); client = null; } frame.SetMessage("未连接或建立服务器"); } }
public void SendChatData(string msg) { var chatData = Encoding.UTF8.GetBytes(msg); SendData(DataPack.GetPackedData((byte)ServerCode.Chat, chatData)); }
public void SendPSPData(byte[] data) { SendData(DataPack.GetPackedData((byte)ServerCode.PSPData, data)); }
private void SendChatData(byte[] chatData) { SendDataToAll(DataPack.GetPackedData((byte)ClientCode.Chat, chatData)); }
private void ProcessPSPData(ClientInfo client, byte[] data) { SendDataExceptSender(DataPack.GetPackedData((byte)ClientCode.PSPData, data), client.ClientID); }