コード例 #1
0
        private void Join(byte[] data, EndPoint sender)
        {
            if (OneShotJoin == true)
            {
                byte[] StartedAlready = new byte[1];
                StartedAlready[0] = 161;
                transport.Send(StartedAlready, sender);
            }
            else if (idCounter < 8)
            {
                idCounter++;
                if (!ClientsTable.ContainsKey(sender))
                {
                    ClientsTable.Add(sender, idCounter);
                    ClientPosition.Add(idCounter, playersInfo);
                    ClientAlive.Add(idCounter, 1);
                }
                byte[] ResponsePacketPosition = new byte[17];
                ResponsePacketPosition[0] = 2;

                byte[] id;
                byte[] joinPositionX;
                byte[] joinPositionY;
                byte[] joinPositionZ;

                id = BitConverter.GetBytes(idCounter);
                if (idCounter % 2 == 0)
                {
                    joinPositionX         = BitConverter.GetBytes(1f);
                    joinPositionY         = BitConverter.GetBytes(3.77f);
                    joinPositionZ         = BitConverter.GetBytes(-2f - spawnPositionCounter);
                    spawnPositionCounter += 2f;
                }
                else
                {
                    joinPositionX = BitConverter.GetBytes(-1.5f);
                    joinPositionY = BitConverter.GetBytes(3.77f);
                    joinPositionZ = BitConverter.GetBytes(-2f - spawnPositionCounter);
                }
                Buffer.BlockCopy(id, 0, ResponsePacketPosition, 1, 4);
                Buffer.BlockCopy(joinPositionX, 0, ResponsePacketPosition, 5, 4);
                Buffer.BlockCopy(joinPositionY, 0, ResponsePacketPosition, 9, 4);
                Buffer.BlockCopy(joinPositionZ, 0, ResponsePacketPosition, 13, 4);
                transport.Send(ResponsePacketPosition, sender);
            }
            else
            {
                byte[] tooManyPlayers = new byte[1];
                tooManyPlayers[0] = 162;
                transport.Send(tooManyPlayers, sender);
            }
        }
コード例 #2
0
 public void KeepAlive()
 {
     keepAliveTimer += 0.005f;
     if (keepAliveTimer >= 3)
     {
         foreach (var item in ClientAlive)
         {
             if (item.Value == 0)
             {
                 foreach (var item2 in ClientsTable)
                 {
                     if (item.Key != item2.Value)
                     {
                         byte[] DestroyThisPlayer = new byte[5];
                         DestroyThisPlayer[0] = 88;
                         byte[] id = BitConverter.GetBytes(item.Key);
                         Buffer.BlockCopy(id, 0, DestroyThisPlayer, 1, 4);
                         transport.Send(DestroyThisPlayer, item2.Key);
                     }
                     else
                     {
                         PlayerToDestroyEndPoint = item2.Key;
                     }
                 }
                 PlayerToDestroyID = item.Key;
                 DictionaryRemover = true;
             }
         }
         if (DictionaryRemover)
         {
             ClientAlive.Remove(PlayerToDestroyID);
             ClientsTable.Remove(PlayerToDestroyEndPoint);
             ClientPosition.Remove(PlayerToDestroyID);
             //idCounter--;
             if (OneShotReady)
             {
                 ReadyCounter--;
             }
             DictionaryRemover = false;
         }
         foreach (var item in ClientsTable)
         {
             ClientAlive[item.Value] = 0;
             byte[] keepAlive = new byte[1];
             keepAlive[0] = 18;
             transport.Send(keepAlive, item.Key);
         }
         keepAliveTimer = 0;
     }
 }