Example #1
0
 public void Handle(WorldClient client, LogOutPacket packet)
 {
     _gameSession.StartLogOff();
 }
Example #2
0
        public void ListenForUserAndBegin(IPEndPoint localEndPoint, Socket clientSocket)
        {
            //we have a connection
            System.Console.WriteLine("Connection established!");

            while (Running)
            {
                // Data buffer
                byte[] bytes = new Byte[4096];
                string data  = null;
                // Get the data from the server
                while (true)
                {
                    int numberOfBytes = clientSocket.Receive(bytes);
                    data += Encoding.ASCII.GetString(bytes, 0, numberOfBytes);
                    if (data.IndexOf("<EOF>", StringComparison.Ordinal) > -1)
                    {
                        break;
                    }
                }
                //deserialize
                string serialisedJson = data.Substring(0, data.Length - 5);
                Console.WriteLine($"Received serialised packet: {serialisedJson}");
                Packet packet = Serializer.Deserialize <Packet>(serialisedJson);
                Console.WriteLine($"Received packet {packet.PacketType}!");
                User currUser;

                //we seem to need this do while (false) 'loop' as the program seems to think breaks in the switch statement
                //mean break out of the whole loop.
                do
                {
                    //switch based on packet IDs and act accordingly
                    switch (packet.PacketType)
                    {
                    case 1:
                        //UserInfo
                        //casting from base class to superclass doesn't work so we just deserialize again
                        UserInfoPacket userInfoPacket = Serializer.Deserialize <UserInfoPacket>(serialisedJson);                               //(UserInfoPacket) packet;
                        User           user           = userInfoPacket.User;

                        //check if credentials valid
                        if (this.Users.TryLogin(user) && !this.LogInManager.LoggedInUsers.Contains(user.Username))
                        {
                            //log them in
                            this.LogInManager.LoggedInUsers.Add(user.Username);
                            this.UserToSockets.Add(user.Username, clientSocket);
                            //send back packet to say it's successful
                            //this is fine as we know clientsocket is the right socket
                            this.SendPacket(new SuccessPacket().Construct("Successful login", 1), clientSocket);
                            Console.WriteLine($"User {user.Username} logged in!");
                        }
                        else
                        {
                            //tell user off.
                            Console.WriteLine("Invalid login attempted.");
                            this.SendPacket(new InvalidPacket().Construct("Invalid login!"), clientSocket);
                        }

                        break;

                    case 4:
                        //BookPlaneSeat
                        BookPlaneSeatPacket bpsPacket = Serializer.Deserialize <BookPlaneSeatPacket>(serialisedJson);                               //(BookPlaneSeatPacket) packet;
                        currUser = bpsPacket.User;

                        //check to see if user is logged in
                        if (this.LogInManager.UserLoggedIn(bpsPacket.User))
                        {
                            //check to see if reasonable request
                            if (this.Planes.GetPlanesLength() >= bpsPacket.PlaneID)
                            {
                                Plane desiredPlane = this.Planes.GetByID(bpsPacket.PlaneID);

                                //check to see if seat available
                                if (desiredPlane.SeatAvailable(bpsPacket.SeatID))
                                {
                                    desiredPlane.AddUserToSeat(currUser, bpsPacket.SeatID);
                                    this.SendPacket(new SuccessPacket().Construct("Successfully booked seat", 2), this.UserToSockets[currUser.Username]);
                                }
                                else
                                {
                                    this.SendPacket(new InvalidPacket().Construct("Seat already booked"), this.UserToSockets[currUser.Username]);
                                }
                            }
                            else
                            {
                                this.SendPacket(new InvalidPacket().Construct("Invalid seat ID"), this.UserToSockets[currUser.Username]);
                            }
                        }
                        else
                        {
                            this.SendPacket(new InvalidPacket().Construct("Cannot request a plane seat as you are not logged in!"), clientSocket);
                        }

                        break;

                    case 5:
                        Console.WriteLine("About to send planes.");
                        //RequestAvailablePlanes
                        RequestAvailablePlanesPacket rapPacket = Serializer.Deserialize <RequestAvailablePlanesPacket>(serialisedJson);                               //(RequestAvailablePlanesPacket) packet;
                        currUser = rapPacket.User;

                        if (this.LogInManager.UserLoggedIn(rapPacket.User))
                        {
                            PlaneInfo[] infos = this.Planes.GetPlaneInfos();

                            Console.WriteLine($"Sending {infos.Length} planes!");

                            this.SendPacket(new SendAvailablePlanesPacket().Construct(infos), this.UserToSockets[currUser.Username]);
                        }
                        else
                        {
                            this.SendPacket(new InvalidPacket().Construct("Cannot request planes as you are not logged in!"), clientSocket);
                        }
                        break;

                    case 6:
                        //Log out
                        LogOutPacket logOutPacket = Serializer.Deserialize <LogOutPacket>(serialisedJson);

                        if (this.LogInManager.LoggedInUsers.Contains(logOutPacket.User.Username))
                        {
                            Console.WriteLine($"Logging out user {logOutPacket.User}!");
                            //remove from logged in users.
                            this.LogInManager.LoggedInUsers.Remove(logOutPacket.User.Username);
                        }

                        break;
                    }
                } while (false);
            }
        }
Example #3
0
 public LogOutEventArgs(PacketHeader header, LogOutPacket body)
     : base(header.UserId, header.SequenceNumber)
 {
 }
Example #4
0
 public LogOutEventArgs(PacketHeader header, LogOutPacket body)
     : base(header.UserId, header.SequenceNumber)
 {
 }