Esempio n. 1
0
        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
        }
Esempio n. 2
0
        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);
                }
            }
        }
Esempio n. 3
0
        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);
                    }
                }
            }
        }
Esempio n. 4
0
        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);
                    }
                }
            }
        }
Esempio n. 5
0
        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);
                        }
                    }
                }
            }
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
        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);
                    }
                }
            }
        }
Esempio n. 8
0
        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();
        }
Esempio n. 9
0
 public void Connect(IPEndPoint _endPoint)
 {
     endPoint = _endPoint;
     ServerSend.UDPTest(id);
 }