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); } }
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; } }