public override void Process(XFireClient 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 override void Process(XFireClient context) { var loginChallenge = new LoginChallenge(); loginChallenge.Process(context); context.SendMessage(loginChallenge); }
// 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(XFireClient 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: Debug.WriteLine($"NOT BUILT: Got {messageType} for session: {context.SessionId}"); break; } }
private void OnDisconnection(XFireClient disconnectedClient) { // we have to remove the session first // because of the friends of this user processing RemoveSession(disconnectedClient); UpdateFriendsWithDisconnetedStatus(disconnectedClient); }
public override void Process(XFireClient 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 void Process(XFireClient 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(XFireClient context) { var friends = context.Server.Database.QueryFriends(_ownerUser); friends.ForEach(f => { UserIds.Add(f.UserId); Usernames.Add(f.Username); Nicks.Add(f.Nickname); }); }
private async Task Accept() { while (_running) { var tcpClient = await _listener.AcceptTcpClientAsync().ConfigureAwait(false); var newXFireClient = new XFireClient(tcpClient, _clientManager, _logger, OnReceive, OnDisconnection); OnConnection?.Invoke(newXFireClient); } }
public override void Process(XFireClient 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 void Process(XFireClient 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(XFireClient 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(XFireClient 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); }
public override void Process(XFireClient 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 void Process(XFireClient 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"; Debug.WriteLine("User {0}[{1}] logged in successfully with session id {2}", context.User.Username, context.User.UserId, context.SessionId); Console.WriteLine("User {0} logged in", context.User.Username); }
public override void Process(XFireClient 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 void Process(XFireClient 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" } }; }
public override void Process(XFireClient 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 void Process(XFireClient context) { context.SendAndProcessMessage(new Did()); }
private void HandleNewConnection(XFireClient sessionContext) { AddSession(sessionContext); }
public override void Process(XFireClient context) { GroupIds = new List <int>(); GroupNames = new List <string>(); }
public virtual void Process(XFireClient client) { // base implementation is to do nothing ConsoleLogger.Log($" *** Unimplemented processing for message type {MessageTypeId}", ConsoleColor.Magenta); }
private void AddSession(XFireClient session) { _clientManager.AddSession(session); }
private void HandleRequest(XFireClient context, IMessage message) { context.Server = this; message.Process(context); }
public override void Process(XFireClient context) { Salt = context.Salt; }
public override void Process(XFireClient context) { var result = new UserLookupResult(Username); context.SendAndProcessMessage(result); }
public void RemoveSession(XFireClient session) { _clientManager.RemoveSession(session); }