コード例 #1
0
        public static void Handle(Packet packet)
        {
            var userInfoPacket = new UserInfoPacket(packet);

            Log.Debug("UserInfo request. (Username: {0}, Ticket: {1})", userInfoPacket.Username, userInfoPacket.Ticket);

            if (userInfoPacket.Ticket != packet.Sender.User.Ticket ||
                userInfoPacket.Username != packet.Sender.User.Username)
            {
                Log.Error(
                    "Rejecting packet from {0}:{1} (user: {2} vs {3}, ticket {4} vs {5}) for invalid user-ticket combination.",
                    packet.Sender.EndPoint.Address.ToString(),
                    packet.Sender.EndPoint.Port,
                    userInfoPacket.Username,
                    packet.Sender.User.Username,
                    userInfoPacket.Ticket,
                    packet.Sender.User.Ticket);

#if DEBUG
                packet.Sender.SendError("Invalid ticket-user combination.");
#endif
                packet.Sender.KillConnection();
            }

            // Send gamesettings
            packet.Sender.Send(new GameSettingsAnswer().CreatePacket());

            packet.Sender.Send(new UserInfoAnswerPacket
            {
                Username    = packet.Sender.User.Username,
                Permissions = (int)packet.Sender.User.Permission,
                Characters  = packet.Sender.User.Characters.ToArray()
            }.CreatePacket());
        }
コード例 #2
0
        public void UserInfoPacketTest()
        {
            var packet = new UserInfoPacket(Utilities.ConstructTestPacket("UserInfo.bin", Shared.Network.Packets.CmdUserInfo));

            StringAssert.AreEqualIgnoringCase("admin", packet.Username);
            Assert.AreEqual(2225370335, packet.Ticket);
        }
コード例 #3
0
ファイル: NebulaServer.cs プロジェクト: wwwK/Nebula
 private void OnReceiveUserInfos(UserInfoPacket infosPacket, NebulaUser user)
 {
     if (user.Username == infosPacket.UserInfo.Username && user.AvatarUrl == infosPacket.UserInfo.AvatarUrl)
     {
         HandleBadPacket(user);
     }
     else
     {
         user.Username  = infosPacket.UserInfo.Username;
         user.AvatarUrl = infosPacket.UserInfo.AvatarUrl;
     }
 }
コード例 #4
0
		internal static ApiResponse GetUserInfoResponse(UserInfoPacket data)
		{
			data.RequestUri = new Uri(UserInfoApiUrl);
			data.Method = "GET";			
			return ApiRequestSender.SendPacket(data);
		}
コード例 #5
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);
            }
        }