Beispiel #1
0
        /// <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);
        }
Beispiel #2
0
        private void SendUdpEnd()
        {
            isUdp = false;
            var toSend = DataPack.GetPackedData((byte)ServerCode.UdpEnd, Encoding.UTF8.GetBytes(clientId));

            SendData(toSend);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
 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);
     }
 }
Beispiel #5
0
        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));
        }
Beispiel #6
0
        /// <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);
        }
Beispiel #7
0
 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("未连接或建立服务器");
     }
 }
Beispiel #8
0
        public void SendChatData(string msg)
        {
            var chatData = Encoding.UTF8.GetBytes(msg);

            SendData(DataPack.GetPackedData((byte)ServerCode.Chat, chatData));
        }
Beispiel #9
0
 public void SendPSPData(byte[] data)
 {
     SendData(DataPack.GetPackedData((byte)ServerCode.PSPData, data));
 }
Beispiel #10
0
 private void SendChatData(byte[] chatData)
 {
     SendDataToAll(DataPack.GetPackedData((byte)ClientCode.Chat, chatData));
 }
Beispiel #11
0
 private void ProcessPSPData(ClientInfo client, byte[] data)
 {
     SendDataExceptSender(DataPack.GetPackedData((byte)ClientCode.PSPData, data), client.ClientID);
 }