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()); }
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); }
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; } }
internal static ApiResponse GetUserInfoResponse(UserInfoPacket data) { data.RequestUri = new Uri(UserInfoApiUrl); data.Method = "GET"; return ApiRequestSender.SendPacket(data); }
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); } }