public static void WelcomeReceived(int _fromClient, Packet _packet) { int _clientIdCheck = _packet.ReadInt(); string _username = _packet.ReadString(); int _password = _packet.ReadInt(); int _loginMode = _packet.ReadInt(); Console.WriteLine($"{Server.clients[_fromClient].tcp.socket.Client.RemoteEndPoint} connected successfully and is now logging in as player {_fromClient} with username {_username} and password {_password}."); if (_fromClient != _clientIdCheck) { Console.WriteLine($"Player \"{_username}\" (ID: {_fromClient}) has assumed the wrong client ID ({_clientIdCheck})!"); return; } //TODO check username and password -- create and send packet - if login is unsuccessful dc after if (_loginMode == 1) { if (Server.playerDatabase.Login(new Player(_username, _password, _fromClient), _fromClient)) { Console.WriteLine($"Player {_username} logged in."); ServerSend.Login(_fromClient, "Success"); //TODO send addition data of player (rank, MMR etc.) } else { Console.WriteLine("Incorrect username or password."); ServerSend.Login(_fromClient, "Incorrect username or password."); } } if (_loginMode == 2) { if (Server.playerDatabase.Register(new Player(_username, _password, _fromClient), _fromClient)) { Console.WriteLine($"Player {_username} signed up and logged in."); ServerSend.Login(_fromClient, "Success"); } else { Console.WriteLine("Signup unsuccessful. Username already taken."); ServerSend.Login(_fromClient, "Signup unsuccessful. Username already taken."); } } //TODO bind player to clientID //TODO: wait for player to start matchmaking then send player into game }
public static void OnReadyButtonClicked1v1(int _fromClient, Packet _packet) { string hostname = _packet.ReadString(); if (Server.playerDatabase.GetPlayerByName(hostname).isLoggedIn) { ServerSend.OnReadyButtonClicked1v1(Server.playerDatabase.GetPlayerByName(hostname).id); } else { Match1v1 m = Server.match1v1Database.GetMatchByPlayer(Server.playerDatabase.GetPlayerById(_fromClient)); if (m != null) { ServerSend.OnPlayerNotReady(m.player1.id); ServerSend.OnPlayerNotReady(m.player2.id); } } }
public static void OnShooting(int _fromClient, Packet _packet) { string hitUsername = String.Empty; float health = 0; Vector3 point = _packet.ReadVector3(); Vector3 normal = _packet.ReadVector3(); string username = _packet.ReadString(); bool isTargetHit = _packet.ReadBool(); if (isTargetHit) { hitUsername = _packet.ReadString(); health = _packet.ReadFloat(); } Match1v1 m = Server.match1v1Database.GetMatchByPlayer(Server.playerDatabase.GetPlayerById(_fromClient)); if (m != null) { ServerSend.OnShooting(m.player1.id, point, normal, username, isTargetHit, hitUsername, health); ServerSend.OnShooting(m.player2.id, point, normal, username, isTargetHit, hitUsername, health); } Match m2 = Server.matchDatabase.GetMatchByPlayer(Server.playerDatabase.GetPlayerById(_fromClient)); if (m2 != null) { foreach (Lobby l in m2.team1) { foreach (Player p in l.GetPlayers()) { ServerSend.OnShooting(p.id, point, normal, username, isTargetHit, hitUsername, health); } } foreach (Lobby l in m2.team2) { foreach (Player p in l.GetPlayers()) { ServerSend.OnShooting(p.id, point, normal, username, isTargetHit, hitUsername, health); } } } }
public static void OnPlayerMovementResponse(int _fromClient, Packet _packet) { string username = _packet.ReadString(); Vector3 position = _packet.ReadVector3(); Quaternion rotation = _packet.ReadQuaternion(); float xRot = _packet.ReadFloat(); int state = _packet.ReadInt(); bool isSprinting = _packet.ReadBool(); int ammoCount = _packet.ReadInt(); int pressEText = _packet.ReadInt(); bool startTimer = _packet.ReadBool(); int invokeFunctionId = _packet.ReadInt(); float timeRemaining = _packet.ReadFloat(); Match1v1 m = Server.match1v1Database.GetMatchByPlayer(Server.playerDatabase.GetPlayerById(_fromClient)); if (m != null) { ServerSend.OnPlayerMovementResponse(m.player1.id, username, position, rotation, xRot, state, isSprinting, ammoCount, pressEText, startTimer, invokeFunctionId, timeRemaining); ServerSend.OnPlayerMovementResponse(m.player2.id, username, position, rotation, xRot, state, isSprinting, ammoCount, pressEText, startTimer, invokeFunctionId, timeRemaining); } Match m2 = Server.matchDatabase.GetMatchByPlayer(Server.playerDatabase.GetPlayerById(_fromClient)); if (m2 != null) { foreach (Lobby l in m2.team1) { foreach (Player p in l.GetPlayers()) { ServerSend.OnPlayerMovementResponse(p.id, username, position, rotation, xRot, state, isSprinting, ammoCount, pressEText, startTimer, invokeFunctionId, timeRemaining); } } foreach (Lobby l in m2.team2) { foreach (Player p in l.GetPlayers()) { ServerSend.OnPlayerMovementResponse(p.id, username, position, rotation, xRot, state, isSprinting, ammoCount, pressEText, startTimer, invokeFunctionId, timeRemaining); } } } }
public static void OnPlayerNotReady(int _fromClient, Packet _packet) { Match1v1 m = Server.match1v1Database.GetMatchByPlayer(Server.playerDatabase.GetPlayerById(_fromClient)); Match m2 = Server.matchDatabase.GetMatchByPlayer(Server.playerDatabase.GetPlayerById(_fromClient)); if (m != null) { if (m.player1.isLoggedIn) { ServerSend.OnPlayerNotReady(m.player1.id); } if (m.player2.isLoggedIn) { ServerSend.OnPlayerNotReady(m.player2.id); } } else if (m2 != null) { foreach (Lobby l in m2.team1) { foreach (Player p in l.GetPlayers()) { if (p.isLoggedIn) { ServerSend.OnPlayerNotReady(p.id); } } } foreach (Lobby l in m2.team2) { foreach (Player p in l.GetPlayers()) { if (p.isLoggedIn) { ServerSend.OnPlayerNotReady(p.id); } } } } }
public static void InviteToLobby(int _fromClient, Packet _packet) { Player inviter = Server.playerDatabase.GetPlayerById(_fromClient); Player invitee = Server.playerDatabase.GetPlayerByName(_packet.ReadString()); if (invitee == null) { Console.WriteLine("No such player to invite"); //TODO send notification that no such player exist return; } if (!invitee.isLoggedIn) { Console.WriteLine("Player not online or not given id"); //TODO send notification that player not online or not given id return; } Console.WriteLine("Invitation sent"); ServerSend.InviteToLobby(invitee.id, inviter.username); }
public static void OnDying(int _fromClient, Packet _packet) { string username = _packet.ReadString(); bool hasVaccine = _packet.ReadBool(); Vector3 position = Vector3.Zero; if (hasVaccine) { position = _packet.ReadVector3(); } Match1v1 m = Server.match1v1Database.GetMatchByUsername(username); Match m2 = Server.matchDatabase.GetMatchByPlayer(Server.playerDatabase.GetPlayerById(_fromClient)); if (m != null) { ServerSend.OnDying(m.player1.id, username, hasVaccine, position); ServerSend.OnDying(m.player2.id, username, hasVaccine, position); } else if (m2 != null) { foreach (Lobby l in m2.team1) { foreach (Player p in l.GetPlayers()) { ServerSend.OnDying(p.id, username, hasVaccine, position); } } foreach (Lobby l in m2.team2) { foreach (Player p in l.GetPlayers()) { ServerSend.OnDying(p.id, username, hasVaccine, position); } } } }
private void Disconnect() { Console.WriteLine($"{tcp.socket.Client.RemoteEndPoint} has disconnected."); Player player = Server.playerDatabase.GetPlayerById(id); player.isLoggedIn = false; Lobby l = Server.matchmaking.FindLobbyWithPlayer(player); if (l != null) { lock (Server.matchmaking) { Server.matchmaking.lobbies.Remove(l); } foreach (Player p in l.GetPlayers()) { if (player != p) { ServerSend.DisconnectInMatchmaking(p.id); } } } lock (Server.matchmaking1v1) { Server.matchmaking1v1.RemovePlayer(player); } Server.lobbyDatabase.RemoveLobby(l); Match m = Server.matchDatabase.GetMatchByPlayer(player); Match1v1 m1 = Server.match1v1Database.GetMatchByPlayer(player); if (m != null) { player.elo -= 20; foreach (Player p in m.GetTeam(0)) { ServerSend.OnPlayerDisconnect(p.id, p.elo, player.username); } } if (m1 != null) { player.elo -= 20; ServerSend.OnPlayerDisconnect(m1.player1.id, m1.player1.elo, player.username); ServerSend.OnPlayerDisconnect(m1.player2.id, m1.player2.elo, player.username); } Lobby lobby = Server.lobbyDatabase.FindLobbyWithPlayer(player); if (lobby != null) { if (lobby.leader.username == player.username) { foreach (Player p in lobby.GetPlayers()) { if (p.username != player.username) { ServerSend.LeaveLobby(p.id, "The leader has left the lobby"); } } Server.lobbyDatabase.RemoveLobby(lobby); } else { Server.lobbyDatabase.FindLobbyWithPlayer(player).RemovePlayer(player); lobby.RemovePlayer(player); foreach (Player p in lobby.GetPlayers()) { ServerSend.LeaveLobby(p.id, lobby.GetLobbyData()); } } } tcp.Disconnect(); udp.Disconnect(); }
public void Connect(IPEndPoint _endPoint) { endPoint = _endPoint; ServerSend.UDPTest(id); }