Exemplo n.º 1
0
        public override void Process(IXFireClient context)
        {
            var loginChallenge = new LoginChallenge();

            loginChallenge.Process(context);
            context.SendMessage(loginChallenge);
        }
Exemplo n.º 2
0
        public override async Task Process(IXFireClient context)
        {
            var loginChallenge = new LoginChallenge();
            await loginChallenge.Process(context);

            await context.SendMessage(loginChallenge);
        }
Exemplo n.º 3
0
        public override Task Process(IXFireClient context)
        {
            GroupIds   = new List <int>();
            GroupNames = new List <string>();

            return(Task.CompletedTask);
        }
Exemplo n.º 4
0
        public override async Task Process(IXFireClient context)
        {
            var friend = await context.Server.Database.QueryUser(FriendUsername);

            await context.Server.Database.InsertMutualFriend(context.User, friend);

            await context.SendAndProcessMessage(new FriendsList(context.User));

            await context.SendAndProcessMessage(new FriendsSessionAssign(context.User));

            // It's possible to accept a friend request where the inviter is not online
            var friendSession = context.Server.GetSession(friend);

            if (friendSession != null)
            {
                await friendSession.SendAndProcessMessage(new FriendsList(friend));

                await friendSession.SendAndProcessMessage(new FriendsSessionAssign(friend));
            }

            var pendingRequests = await context.Server.Database.QueryPendingFriendRequests(context.User);

            var pq = pendingRequests.Where(a => a.Id == friend.Id).ToArray();
            await context.Server.Database.DeletePendingFriendRequest(context.User, pq);
        }
Exemplo n.º 5
0
        public override void Process(IXFireClient context)
        {
            var user = context.Server.Database.QueryUser(Username);

            if (user != null)
            {
                if (user.Password != Password)
                {
                    context.SendAndProcessMessage(new LoginFailure());
                    return;
                }
            }
            else
            {
                user = context.Server.Database.InsertUser(Username, Password, context.Salt);
            }

            // Remove any older sessions from this user (duplicate logins)
            context.RemoveDuplicatedSessions(user);

            context.User = user;

            var success = new LoginSuccess();

            context.SendAndProcessMessage(success);
        }
Exemplo n.º 6
0
        public override async Task Process(IXFireClient context)
        {
            var user = await context.Server.Database.QueryUser(Username);

            if (user != null)
            {
                if (!BCrypt.Net.BCrypt.Verify(Password, user.Password))
                {
                    await context.SendAndProcessMessage(new LoginFailure());

                    return;
                }
            }
            else
            {
                var hashPassword = BCrypt.Net.BCrypt.HashPassword(Password);
                user = await context.Server.Database.InsertUser(Username, hashPassword, context.Salt);
            }

            // Remove any older sessions from this user (duplicate logins)
            context.RemoveDuplicatedSessions(user);

            context.User = user;

            var success = new LoginSuccess();
            await context.SendAndProcessMessage(success);
        }
Exemplo n.º 7
0
        public override void Process(IXFireClient context)
        {
            var friend = context.Server.Database.QueryUser(FriendUsername);

            context.Server.Database.InsertMutualFriend(context.User, friend);

            context.SendAndProcessMessage(new FriendsList(context.User));
            context.SendAndProcessMessage(new FriendsSessionAssign(context.User));

            // It's possible to accept a friend request where the inviter is not online
            var friendSession = context.Server.GetSession(friend);

            if (friendSession != null)
            {
                friendSession.SendAndProcessMessage(new FriendsList(friend));
                friendSession.SendAndProcessMessage(new FriendsSessionAssign(friend));
            }

            var pendingRequests = context.Server.Database.QueryPendingFriendRequests(context.User);
            var pq = pendingRequests.FirstOrDefault(a => a.FriendUserId == context.User.UserId);

            if (pq != null)
            {
                context.Server.Database.DeletePendingFriendRequest(pq.PendingFriendRequestId);
            }
        }
Exemplo n.º 8
0
        public virtual Task Process(IXFireClient client)
        {
            // base implementation is to do nothing
            client.Logger.LogWarning($" *** Unimplemented processing for message type {MessageTypeId}");

            return(Task.CompletedTask);
        }
Exemplo n.º 9
0
 public void AddSession(IXFireClient session)
 {
     if (!_sessions.TryAdd(session.SessionId, session))
     {
         session.Logger.LogWarning($"Tried to add a user with session id {session.SessionId} that already existed.");
     }
 }
Exemplo n.º 10
0
        // TODO: Create test for this message so we can refactor and build this message the same way as the others to avoid the switch statement
        // TODO: How to tell the client we didn't receive the ACK?
        // TODO: P2P stuff???
        public override void Process(IXFireClient context)
        {
            var otherSession = context.Server.GetSession(SessionId);

            if (otherSession == null)
            {
                return;
            }

            var messageType = (ChatMessageType)(byte)MessagePayload["msgtype"];

            switch (messageType)
            {
            case ChatMessageType.Content:
                var responseAck = BuildAckResponse(otherSession.SessionId);
                context.SendMessage(responseAck);

                var chatMsg = BuildChatMessageResponse(context.SessionId);
                otherSession.SendMessage(chatMsg);
                break;

            case ChatMessageType.TypingNotification:
                var typingMsg = BuildChatMessageResponse(context.SessionId);
                otherSession.SendMessage(typingMsg);
                break;

            default:
                context.Logger.LogDebug($"NOT BUILT: Got {messageType} for session: {context.SessionId}");
                break;
            }
        }
Exemplo n.º 11
0
        private void OnDisconnection(IXFireClient disconnectedClient)
        {
            // we have to remove the session first
            // because of the friends of this user processing
            RemoveSession(disconnectedClient);

            UpdateFriendsWithDisconnetedStatus(disconnectedClient);
        }
Exemplo n.º 12
0
        public override async Task Process(IXFireClient context)
        {
            var requesterUser = await context.Server.Database.QueryUser(RequesterUsername);

            var pendingRequests = await context.Server.Database.QueryPendingFriendRequestsSelf(requesterUser);

            var requestsIds = pendingRequests.Where(a => a.Id == requesterUser.Id).ToArray();

            await context.Server.Database.DeletePendingFriendRequest(context.User, requestsIds);
        }
Exemplo n.º 13
0
        public override void Process(IXFireClient context)
        {
            var statusChange = new FriendStatusChange(context.SessionId, Message);
            var friends      = context.Server.Database.QueryFriends(context.User);

            friends.ForEach(friend =>
            {
                var friendSession = context.Server.GetSession(friend);
                friendSession?.SendAndProcessMessage(statusChange);
            });
        }
Exemplo n.º 14
0
        public override void Process(IXFireClient context)
        {
            var friends = context.Server.Database.QueryFriends(_ownerUser);

            friends.ForEach(f =>
            {
                UserIds.Add(f.UserId);
                Usernames.Add(f.Username);
                Nicks.Add(f.Nickname);
            });
        }
Exemplo n.º 15
0
        public override void Process(IXFireClient context)
        {
            var requesterUser   = context.Server.Database.QueryUser(RequesterUsername);
            var pendingRequests = context.Server.Database.QueryPendingFriendRequestsSelf(requesterUser);

            var requestsIds = pendingRequests.Where(a => a.UserId == requesterUser.UserId && a.FriendUserId == context.User.UserId)
                              .Select(a => a.PendingFriendRequestId)
                              .ToArray();

            context.Server.Database.DeletePendingFriendRequest(requestsIds);
        }
Exemplo n.º 16
0
        public override async Task Process(IXFireClient client)
        {
            var friends = await client.Server.Database.QueryFriends(_ownerUser);

            foreach (var friend in friends)
            {
                var friendSession = client.Server.GetSession(friend);

                UserIds.Add(friend.Id);
                SessionIds.Add(friendSession?.SessionId ?? FriendIsOffLineSessionId);
            }
        }
Exemplo n.º 17
0
        public override void Process(IXFireClient client)
        {
            var friends = client.Server.Database.QueryFriends(_ownerUser);

            foreach (var friend in friends)
            {
                var friendSession = client.Server.GetSession(friend);

                UserIds.Add(friend.UserId);
                SessionIds.Add(friendSession != null ? friendSession.SessionId : FriendIsOffLineSessionId);
            }
        }
Exemplo n.º 18
0
        public override async Task Process(IXFireClient client)
        {
            var friends = (await client.Server.Database.QueryFriends(_ownerUser))
                          .Select(x => new { User = x, Session = client.Server.GetSession(x) })
                          .Where(x => x.Session != null);

            foreach (var friend in friends)
            {
                UserIds.Add(friend.User.Id);
                SessionIds.Add(friend.Session.SessionId);
            }
        }
Exemplo n.º 19
0
        public override void Process(IXFireClient context)
        {
            var usernames = context.Server.Database.QueryUsers(_queryByUsername).Select(a => a.Username).ToList();

            Usernames.AddRange(usernames);

            // Don't really care about these but they're necessary to work properly
            var unknowns = usernames.Select(a => "Unknown").ToList();

            FirstNames.AddRange(unknowns);
            LastNames.AddRange(unknowns);
            Emails.AddRange(unknowns);
        }
Exemplo n.º 20
0
        private void UpdateFriendsWithDisconnetedStatus(IXFireClient disconnectedClient)
        {
            var friends = Database.QueryFriends(disconnectedClient.User);

            friends.ForEach(friend =>
            {
                var friendClient = GetSession(friend);
                if (friendClient != null)
                {
                    friendClient.SendAndProcessMessage(new FriendsSessionAssign(friend));
                }
            });
        }
Exemplo n.º 21
0
        public override void Process(IXFireClient context)
        {
            var recipient = context.Server.Database.QueryUser(Username);
            var invite    = new FriendInvite(context.User.Username, context.User.Nickname, Message);

            invite.Process(context);

            context.Server.Database.InsertFriendRequest(context.User, Username, Message);

            var recipientSession = context.Server.GetSession(recipient);

            recipientSession?.SendMessage(invite);
        }
Exemplo n.º 22
0
        private async Task UpdateFriendsWithDisconnetedStatus(IXFireClient disconnectedClient)
        {
            var friends = await Database.QueryFriends(disconnectedClient.User);

            foreach (var friend in friends)
            {
                var friendClient = GetSession(friend);
                if (friendClient != null)
                {
                    await friendClient.SendAndProcessMessage(new FriendsSessionAssign(friend));
                }
            }
        }
Exemplo n.º 23
0
        public override async Task Process(IXFireClient context)
        {
            var statusChange = new FriendStatusChange(context.SessionId, Message);
            var friends      = await context.Server.Database.QueryFriends(context.User);

            foreach (var friend in friends)
            {
                var friendSession = context.Server.GetSession(friend);
                if (friendSession != null)
                {
                    await friendSession.SendAndProcessMessage(statusChange);
                }
            }
        }
Exemplo n.º 24
0
        public override void Process(IXFireClient context)
        {
            var clientPrefs = new Unknown10();

            context.SendAndProcessMessage(clientPrefs);

            var groups = new Groups();

            context.SendAndProcessMessage(groups);

            var groupsFriends = new GroupsFriends();

            context.SendAndProcessMessage(groupsFriends);

            var serverList = new ServerList();

            context.SendAndProcessMessage(serverList);

            var chatRooms = new ChatRooms();

            context.SendAndProcessMessage(chatRooms);

            var friendsList = new FriendsList(context.User);

            context.SendAndProcessMessage(friendsList);

            var friendsStatus = new FriendsSessionAssign(context.User);

            context.SendAndProcessMessage(friendsStatus);

            // Tell friends this user came online
            //if (context.User.Username == "test") Debugger.Break();
            var friends = context.Server.Database.QueryFriends(context.User);

            friends.ForEach(friend =>
            {
                var otherSession = context.Server.GetSession(friend);
                otherSession?.SendAndProcessMessage(new FriendsSessionAssign(friend));
            });

            var pendingFriendRequests = context.Server.Database.QueryPendingFriendRequests(context.User);

            pendingFriendRequests.ForEach(request =>
            {
                var requester = context.Server.Database.QueryUser(request.UserId);
                context.SendAndProcessMessage(new FriendInvite(requester.Username, requester.Nickname, request.Message));
            });
        }
Exemplo n.º 25
0
        public override async Task Process(IXFireClient context)
        {
            var recipient = await context.Server.Database.QueryUser(Username);

            var invite = new FriendInvite(context.User.Username, context.User.Nickname, Message);
            await invite.Process(context);

            await context.Server.Database.InsertFriendRequest(context.User, recipient, Message);

            var recipientSession = context.Server.GetSession(recipient);

            if (recipientSession != null)
            {
                await recipientSession.SendMessage(invite);
            }
        }
Exemplo n.º 26
0
        public override void Process(IXFireClient context)
        {
            UserId    = context.User.UserId;
            SessionId = context.SessionId;
            Status    = 0;
            Nickname  = string.IsNullOrEmpty(context.User.Nickname) ? context.User.Username : context.User.Nickname;
            MinRect   = 1;
            MaxRect   = 164867;
            var ipAddress = StripPortFromIPAddress(context.RemoteEndPoint.ToString());

            PublicIp = BitConverter.ToInt32(IPAddress.Parse(ipAddress).GetAddressBytes(), 0);
            Salt     = context.Salt;
            Reason   = "Mq_P8Ad3aMEUvFinw0ceu6FITnZTWXxg46XU8xHW";

            context.Logger.LogDebug($"User {context.User.Username}[{context.User.UserId}] logged in successfully with session id {context.SessionId}");
            context.Logger.LogInformation($"User {context.User.Username} logged in");
        }
Exemplo n.º 27
0
        public override void Process(IXFireClient context)
        {
            if (Nickname.Length > MAX_LENGTH)
            {
                Nickname = Nickname.Substring(0, MAX_LENGTH);
            }

            context.Server.Database.UpdateNickname(context.User, Nickname);

            var updatedFriendsList = new FriendsList(context.User);

            context.Server.Database.QueryFriends(context.User)
            .ForEach(friend =>
            {
                var friendSession = context.Server.GetSession(friend);
                friendSession?.SendAndProcessMessage(updatedFriendsList);
            });
        }
Exemplo n.º 28
0
        public override Task Process(IXFireClient context)
        {
            preferences = new Dictionary <byte, string>
            {
                {
                    1, "0"
                },
                {
                    4, "0"
                },
                {
                    5, "0"
                },
                {
                    6, "1"
                },
                {
                    7, "0"
                },
                {
                    8, "0"
                },
                {
                    11, "0"
                },
                {
                    17, "0"
                },
                {
                    18, "0"
                },
                {
                    19, "0"
                },
                {
                    20, "0"
                },
                {
                    21, "0"
                }
            };

            return(Task.CompletedTask);
        }
Exemplo n.º 29
0
        private ChatMessage BuildClientInfo(IXFireClient client)
        {
            var info = new ChatMessage
            {
                SessionId      = client.SessionId,
                MessagePayload = new Dictionary <string, dynamic>
                {
                    { "msgtyp", (byte)ChatMessageType.ClientInformation }
                }
            };

            info.MessagePayload.Add("ip", client.RemoteEndPoint.ToString()?.Split(":").First());
            info.MessagePayload.Add("port", 50_000);
            info.MessagePayload.Add("localip", "192.168.1.38");
            info.MessagePayload.Add("localport", 50_000);
            info.MessagePayload.Add("status", 0);
            info.MessagePayload.Add("salt", client.Salt);
            return(info);
        }
Exemplo n.º 30
0
        public override async Task Process(IXFireClient context)
        {
            var clientPrefs = new Unknown10();
            await context.SendAndProcessMessage(clientPrefs);

            var groups = new Groups();
            await context.SendAndProcessMessage(groups);

            var groupsFriends = new GroupsFriends();
            await context.SendAndProcessMessage(groupsFriends);

            var serverList = new ServerList();
            await context.SendAndProcessMessage(serverList);

            var chatRooms = new ChatRooms();
            await context.SendAndProcessMessage(chatRooms);

            var friendsList = new FriendsList(context.User);
            await context.SendAndProcessMessage(friendsList);

            var friendsStatus = new FriendsSessionAssign(context.User);
            await context.SendAndProcessMessage(friendsStatus);

            // Tell friends this user came online
            //if (context.User.Username == "test") Debugger.Break();
            var friends = await context.Server.Database.QueryFriends(context.User);

            foreach (var friend in friends)
            {
                var otherSession = context.Server.GetSession(friend);
                if (otherSession != null)
                {
                    await otherSession.SendAndProcessMessage(new FriendsSessionAssign(friend));
                }
            }

            var pendingFriendRequests = await context.Server.Database.QueryPendingFriendRequests(context.User);

            foreach (var request in pendingFriendRequests.Select(request => new FriendInvite(request.Username, request.Nickname, request.Message)))
            {
                await context.SendAndProcessMessage(request);
            }
        }