public override void Process(IXFireClient context) { var loginChallenge = new LoginChallenge(); loginChallenge.Process(context); context.SendMessage(loginChallenge); }
public override async Task Process(IXFireClient context) { var loginChallenge = new LoginChallenge(); await loginChallenge.Process(context); await context.SendMessage(loginChallenge); }
public override Task Process(IXFireClient context) { GroupIds = new List <int>(); GroupNames = new List <string>(); return(Task.CompletedTask); }
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); }
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); }
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); }
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); } }
public virtual Task Process(IXFireClient client) { // base implementation is to do nothing client.Logger.LogWarning($" *** Unimplemented processing for message type {MessageTypeId}"); return(Task.CompletedTask); }
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."); } }
// 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; } }
private void OnDisconnection(IXFireClient disconnectedClient) { // we have to remove the session first // because of the friends of this user processing RemoveSession(disconnectedClient); UpdateFriendsWithDisconnetedStatus(disconnectedClient); }
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); }
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); }); }
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); }); }
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); }
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); } }
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); } }
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); } }
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); }
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)); } }); }
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); }
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)); } } }
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); } } }
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)); }); }
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); } }
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"); }
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); }); }
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); }
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); }
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); } }