private static void AddNewGamer(SalutationPacket salutation) { Gamer gamer = new Gamer(salutation.Name, salutation.SourceIP); Gamers.TryAdd(salutation.Name, gamer); gamer.ShipID = GameModel.NewShip(gamer.ConnectionID); log.Info(gamer.ConnectionID + " has joined the game from " + salutation.SourceIP); }
private async Task <NetworkPacket> HandleRequest(StreamSocket socket, NetworkPacket packet) { AcknowledgePacket acknowledgement = new AcknowledgePacket(); if (packet != null) { if (packet.Type == PacketType.Salutation) { SalutationPacket salutation = packet as SalutationPacket; await HandlePlayerConnection(socket, salutation); } } return(acknowledgement); }
private static void ProcessSalutation(NetworkPacket packet) { if (NetworkInterface.IsHost) { SalutationPacket salutation = packet as SalutationPacket; AcknowledgePacket ack = new AcknowledgePacket(salutation.Name, salutation.Timestamp); ack.Response = DetermineAppropriateResponse(salutation); if (ack.Response == AcknowledgePacket.Acknowledgement.OK) { AddNewGamer(salutation); } NetworkInterface.SendPacket(packet.SourceIP, ack); } }
private static void ProcessAcknowledge(NetworkPacket packet) { // TODO: work on the joining stuff AcknowledgePacket ack = packet as AcknowledgePacket; if (ack.Response == AcknowledgePacket.Acknowledgement.OK) { ConnectionID = ack.Name; } else if (ack.Response == AcknowledgePacket.Acknowledgement.DuplicateName) { string newID = ack.Name + GameModel.Random.Next(0, 10); SalutationPacket newSalutation = new SalutationPacket(newID); SendToHost(newSalutation); } }
private async Task HandlePlayerConnection(StreamSocket socket, SalutationPacket salutation) { string PlayerID = salutation.Name; if (_playerList.ContainsKey(PlayerID)) { PlayerData playerData = _playerList[PlayerID]; int shipID = _gameInstance.GameModel.NewShip(PlayerID); playerData.ShipID = shipID; StreamSocket clientSocket = await _networkConnection.ConnectToTCP(socket.Information.RemoteAddress.DisplayName, NetworkPorts.GameClientPort); playerData.ClientSocket = clientSocket; playerData.Connected = true; } }
public static void Join(string name) { SalutationPacket requestToJoin = new SalutationPacket(name); SendToHost(requestToJoin); }
private static AcknowledgePacket.Acknowledgement DetermineAppropriateResponse(SalutationPacket salutation) { AcknowledgePacket.Acknowledgement response = AcknowledgePacket.Acknowledgement.OK; if (Gamers.ContainsKey(salutation.SourceIP.ToString())) { response = AcknowledgePacket.Acknowledgement.MultipleConnectionFromOneEndPoint; } else if (Gamers.Count >= MaximumPlayers) { response = AcknowledgePacket.Acknowledgement.GameFull; } else { foreach (Gamer gamer in Gamers.Values) { if (gamer.ConnectionID == salutation.Name) { response = AcknowledgePacket.Acknowledgement.DuplicateName; } } } return(response); }