public void UpdateColor(int color, ChatUser sender) { //Check change condition if (true) { this.Color = color; store.Save(this); ChangeBubbleChatColor packet = new ChangeBubbleChatColor() { ConversationID = this.ID.ToString(), Color = color }; foreach (Guid memberID in Members) { if (!ChatUserManager.IsOnline(memberID)) { continue; } ChatUser user = ChatUserManager.LoadUser(memberID); user.Send(packet); } } else { ChangeBubbleChatColor packet = new ChangeBubbleChatColor() { ConversationID = this.ID.ToString(), Color = this.Color }; sender.Send(packet); } }
public void Execute(ISender commandSender, string commandLabel, string[] args) { if (args.Length < 2) { return; } Guid id = ProfileCache.Instance.ParseEmailToGuid(args[1].ToLower()); if (id.Equals(Guid.Empty)) { PacChatServer.GetServer().Logger.Error("Email is not exists."); return; } ChatUser user = ChatUserManager.LoadUser(id); user.Banned = true; user.Save(); if (user.IsOnline()) { user.Kick(); } }
public void Handle(ISession session) { ChatSession chatSession = session as ChatSession; ChatUser user; if (ChatUserManager.OnlineUsers.TryGetValue(Guid.Parse(TargetID), out user)) { ForwardedFriendRequest packet = new ForwardedFriendRequest(); packet.SenderID = chatSession.Owner.ID.ToString(); packet.Name = chatSession.Owner.FirstName + " " + chatSession.Owner.LastName; PacChatServer.GetServer().Logger.Debug("Friend request " + packet.Name); user.Send(packet); } string name = chatSession.Owner.FirstName + " " + chatSession.Owner.LastName; //string encNoti = "mkfriend:" + chatSession.Owner.ID + ":" + // chatSession.Owner.FirstName + " " + chatSession.Owner.LastName; string encNoti = NotificationEncoder.Assemble( NotificationPrefixes.AddFriend, chatSession.Owner.ID.ToString(), name, name, "sent you a friend request.", false); user = ChatUserManager.LoadUser(Guid.Parse(TargetID)); user.Notifications.Add(encNoti); user.Save(); }
public static void AddTakenSeat(int showId, int seatId, string userId) { var username = string.Empty; if (ChatUserManager.RegisteredUsers.ContainsKey(showId) && ChatUserManager.RegisteredUsers[showId].ContainsKey(userId)) { username = ChatUserManager.RegisteredUsers[showId][userId]; } else if (ChatUserManager.NonRegisteredUsers.ContainsKey(showId) && ChatUserManager.NonRegisteredUsers[showId].ContainsKey(userId)) { username = ChatUserManager.FormGuestName(ChatUserManager.NonRegisteredUsers[showId][userId]); } if (takenSeats.ContainsKey(showId) && takenSeats[showId].ContainsKey(username) && takenSeats[showId][username] != null && takenSeats[showId][username].Contains(seatId)) { return; } if (!takenSeats.ContainsKey(showId)) { List<int> seatIds = new List<int>(){seatId}; var userSeats = new Dictionary<string,List<int>> {{ username, seatIds } }; takenSeats.TryAdd(showId, userSeats); } else if (takenSeats.ContainsKey(showId) && !takenSeats[showId].ContainsKey(username)) { List<int> seatIds = new List<int>() { seatId }; takenSeats[showId].Add(username,seatIds); } else if (takenSeats.ContainsKey(showId) && takenSeats[showId].ContainsKey(username)) { var seatIds = takenSeats[showId][username]; seatIds?.Add(seatId); } }
public void Handle(ISession session) { if (TargetID.Equals(Guid.Empty)) { return; } ChatUser targetUser = ChatUserManager.LoadUser(TargetID); if (targetUser == null) { return; } ChatSession chatSession = session as ChatSession; ConversationStore store = new ConversationStore(); Guid resultID = Guid.NewGuid(); bool flag = true; var CommonConversation = targetUser.ConversationID.Intersect(chatSession.Owner.ConversationID); foreach (Guid conversationID in CommonConversation) { AbstractConversation conversation = store.Load(conversationID); if (conversation is SingleConversation) { resultID = conversation.ID; flag = false; break; } } if (flag) { chatSession.Owner.ConversationID.Add(resultID); targetUser.ConversationID.Add(resultID); store.Save(new SingleConversation() { ID = resultID, Members = new HashSet <Guid>() { chatSession.Owner.ID, targetUser.ID }, ConversationName = "~" }); chatSession.Owner.Save(); targetUser.Save(); } SingleConversationFrUserIDResponse response = new SingleConversationFrUserIDResponse(); response.UserID = TargetID; response.ResponseID = resultID; chatSession.Send(response); }
public string RegisterGuest(int showId) { var id = Context.ConnectionId; var guestName = ChatUserManager.RegisterGuest(showId, id); connectionEventMessageNotify(true, showId, guestName, id); sendTakenSeatsToRegistered(showId, id); return(guestName); }
public static void ReleaseTakenSeat(int showId, int seatId, string userId) { var username = ChatUserManager.GetName(showId, userId); if (takenSeats.ContainsKey(showId) && takenSeats[showId].ContainsKey(username) && takenSeats[showId][username].Contains(seatId)) { takenSeats[showId][username].Remove(seatId); } }
public bool RegisterUser(int showId, string userName) { var id = Context.ConnectionId; bool succuessRegister = ChatUserManager.RegisterUser(showId, id, userName); if (succuessRegister) { connectionEventMessageNotify(true, showId, userName, id); } sendTakenSeatsToRegistered(showId, id); return(succuessRegister); }
public static List<int> ReleaseTakenSeats(int showId, string userId) { List<int> takenSeatsList = null; var username = ChatUserManager.GetName(showId, userId); if (takenSeats.ContainsKey(showId) && takenSeats[showId].ContainsKey(username)) { takenSeatsList = new List<int>(takenSeats[showId][username]); takenSeats[showId][username].Clear(); } return takenSeatsList; }
public void Handle(ISession session) { ChatSession chatSession = session as ChatSession; GetNotificationsResponse packet = new GetNotificationsResponse(); ChatUser user = ChatUserManager.LoadUser(chatSession.Owner.ID); foreach (var noti in user.Notifications) { packet.Notifications.Add(noti); } chatSession.Send(packet); }
public void Online() { UserOnline packet = new UserOnline(); packet.TargetID = this.ID; foreach (var pair in Relationship.Where(q => Relation.Get(q.Value).RelationType == Relation.Type.Friend)) { if (ChatUserManager.IsOnline(pair.Key)) { ChatUserManager.LoadUser(pair.Key).Send(packet); } } }
public override Task OnDisconnectedAsync(Exception exception) { var id = Context.ConnectionId; KeyValuePair <int, string> info = new KeyValuePair <int, string>(); if (ChatUserManager.UserInfo.ContainsKey(id)) { info = ChatUserManager.UserInfo[id]; connectionEventMessageNotify(false, info.Key, info.Value, id); releaseTakenSeats(id, info.Key); ChatUserManager.RemoveUser(info.Key, id); } return(base.OnDisconnectedAsync(exception)); }
public void Handle(ISession session) { ChatSession chatSession = session as ChatSession; if (!chatSession.Owner.ConversationID.Contains(ConversationID)) { return; } AbstractConversation conversation = ConversationManager.GetConversation(ConversationID); if (conversation == null || conversation is GroupConversation) { return; } if (chatSession.Owner.LastBuzz.ContainsKey(ConversationID)) { chatSession.Owner.LastBuzz.TryGetValue(ConversationID, out var lastBuzz); if (DateTime.Now.Ticks - lastBuzz < 10000000 * 10) { return; } } chatSession.Owner.LastBuzz.TryRemove(ConversationID, out var lastz); chatSession.Owner.LastBuzz.TryAdd(ConversationID, DateTime.Now.Ticks); BuzzResponse message = new BuzzResponse() { SenderID = chatSession.Owner.ID.ToString(), ConversationID = this.ConversationID.ToString() }; foreach (Guid guid in conversation.Members) { if (ChatUserManager.IsOnline(guid) && guid != chatSession.Owner.ID) { chatSession.Owner.Relationship.TryGetValue(guid, out var relationID); Relation relation = Relation.Get(relationID); if (relation == null || relation.RelationType != Relation.Type.Friend) { continue; } ChatUserManager.LoadUser(guid).Send(message); } } }
public void Offline() { this.LastLogoff = DateTime.UtcNow; UserOffline packet = new UserOffline(); packet.TargetID = this.ID; foreach (var pair in Relationship.Where(q => Relation.Get(q.Value).RelationType == Relation.Type.Friend)) { if (ChatUserManager.IsOnline(pair.Key)) { ChatUserManager.LoadUser(pair.Key).Send(packet); } } this.Save(); PacChatServer.GetServer().Logger.Info(String.Format("User {0} has logged out at {1}!", this.Email, this.LastLogoff.ToString())); }
public void Handle(ISession session) { ChatSession chatSession = session as ChatSession; ChatUser targetUser = ChatUserManager.LoadUser(TargetID); if (targetUser == null) { return; } DisplayedProfileResponse packet = new DisplayedProfileResponse(); packet.ID = targetUser.ID.ToString(); packet.Name = targetUser.FirstName + " " + targetUser.LastName; packet.Email = targetUser.Email; packet.DoB = targetUser.DateOfBirth.ToString(); packet.Town = targetUser.Town; chatSession.Send(packet); }
public void SessionInactivated(ISession session) { ChatSession chatSession = session as ChatSession; Server.SessionRegistry.Remove(chatSession.SessionID); if (chatSession.Owner == null) { return; } chatSession.Owner.sessions.Remove(chatSession); Server.Logger.Info(String.Format("Session {0} of user {1} has disconnected.", chatSession.getAddress(), chatSession.Owner.Email)); if (!chatSession.Owner.IsOnline()) { ChatUserManager.MakeOffline(chatSession.Owner); } }
public void FinalizeLogin(ChatUserProfile profile) { try { Owner = ChatUserManager.LoadUser(profile.ID); } catch { this.Disconnect(); } ChatUserManager.MakeOnline(Owner); Owner.LastLogon = DateTime.UtcNow; Owner.sessions.Add(this); Protocol = protocolProvider.MainProtocol; //Notify Server.Logger.Info(String.Format("User {0} has logged in at {1}", Owner.Email, getAddress())); }
public void Handle(ISession session) { ChatSession chatSession = session as ChatSession; UserSearchResponse response = new UserSearchResponse(); List <String> UserIDs = new ChatUserStore().SearchUserIDByEmail(Email, (session as ChatSession).Owner); ConversationStore store = new ConversationStore(); foreach (var item in UserIDs) { Guid userId = Guid.Parse(item); ChatUser targetUser = ChatUserManager.LoadUser(userId); SearchResult result = new SearchResult(); result.ID = targetUser.ID.ToString(); result.FirstName = targetUser.FirstName; result.LastName = targetUser.LastName; result.IsOnline = targetUser.IsOnline(); result.LastLogout = targetUser.LastLogoff; result.PreviewCode = -1; result.ConversationID = "~"; var CommonConversation = targetUser.ConversationID.Intersect(chatSession.Owner.ConversationID); foreach (Guid id in CommonConversation) { AbstractConversation conversation = store.Load(id); if (conversation is SingleConversation) { result.ConversationID = conversation.ID.ToString(); AbstractMessage message = conversation.MessagesID.Count > 0 ? new MessageStore().Load(conversation.MessagesID.Last(), conversation.ID) : null; if (message == null) { break; } if (!message.Showable(chatSession.Owner.ID)) { result.PreviewCode = 0; break; } result.PreviewCode = message.GetPreviewCode(); if (message.GetPreviewCode() == 4) { result.LastMessage = (message as TextMessage).Message; } break; } } if (chatSession.Owner.Relationship.ContainsKey(targetUser.ID)) { result.Relationship = (int)Relation.Get(chatSession.Owner.Relationship[targetUser.ID]).RelationType; } else { result.Relationship = (int)Relation.Type.None; } response.Results.Add(result); } session.Send(response); }
public void Execute(ISender commandSender, string commandLabel, string[] args) { if (args.Length < 3) { return; } string email = args[2]; if (args[1] == "get") { Guid id = ProfileCache.Instance.ParseEmailToGuid(email); ChatUserProfile profile = ProfileCache.Instance.GetUserProfile(id); if (profile == null) { PacChatServer.GetServer().Logger.Debug("NULL"); } else { PacChatServer.GetServer().Logger.Debug(profile.ID); } } if (args[1] == "add" && args.Length >= 4) { Random r = new Random(); if (ProfileCache.Instance.ParseEmailToGuid(email) != Guid.Empty) { PacChatServer.GetServer().Logger.Error("Create fail: email early existed!!!"); return; } Guid id = Guid.NewGuid(); ChatUser user = new ChatUser() { ID = id, Email = email, Password = HashUtils.MD5(HashUtils.MD5(args[3]) + id), FirstName = "Admin", LastName = "Admin's lastname", DateOfBirth = new DateTime(1998, r.Next(11) + 1, r.Next(29) + 1), Gender = Entity.EntityProperty.Gender.Male }; bool added = user.Save(); if (added) { PacChatServer.GetServer().Logger.Info(String.Format("Account {0} has registered successfully. ID = {1}", user.Email, user.ID)); } else { PacChatServer.GetServer().Logger.Error("Create fail: Database error!!!"); } } if (args[1] == "search" && args.Length >= 3) { //List<String> ids = new ChatUserStore().SearchUserIDByEmail(args[2]); //foreach (string s in ids) //{ // Console.WriteLine(s); //} } if (args[1] == "mkfriend" && args.Length >= 4) { Guid userID1 = ProfileCache.Instance.ParseEmailToGuid(args[2]); Guid userID2 = ProfileCache.Instance.ParseEmailToGuid(args[3]); if (userID1 == Guid.Empty || userID2 == Guid.Empty) { PacChatServer.GetServer().Logger.Warn("One of two emails does not exist."); return; } ChatUser user1 = ChatUserManager.LoadUser(userID1); ChatUser user2 = ChatUserManager.LoadUser(userID2); user1.SetRelation(user2, Relation.Type.Friend, true); } }
public ChatController() { _chatmanager = new ChatUserManager(); }
public void Handle(ISession session) { ChatSession chatSession = session as ChatSession; ChatUser targetUser = ChatUserManager.LoadUser(TargetID); if (targetUser == null) { return; } ShortProfileResponse response = new ShortProfileResponse(); response.ID = targetUser.ID.ToString(); response.FirstName = targetUser.FirstName; response.LastName = targetUser.LastName; response.IsOnline = targetUser.IsOnline(); response.LastLogout = targetUser.LastLogoff; ConversationStore store = new ConversationStore(); response.PreviewCode = -1; response.ConversationID = "~"; var CommonConversation = targetUser.ConversationID.Intersect(chatSession.Owner.ConversationID); foreach (Guid id in CommonConversation) { AbstractConversation conversation = store.Load(id); if (conversation is SingleConversation) { response.ConversationID = conversation.ID.ToString(); AbstractMessage message = conversation.MessagesID.Count > 0 ? new MessageStore().Load(conversation.MessagesID.Last(), conversation.ID) : null; if (message == null) { break; } if (!message.Showable(chatSession.Owner.ID)) { response.PreviewCode = 0; break; } response.PreviewCode = message.GetPreviewCode(); if (message.GetPreviewCode() == 4) { response.LastMess = (message as TextMessage).Message; } break; } } if (chatSession.Owner.Relationship.ContainsKey(targetUser.ID)) { response.RelationshipType = (int)Relation.Get(chatSession.Owner.Relationship[targetUser.ID]).RelationType; } else { response.RelationshipType = (int)Relation.Type.None; } chatSession.Send(response); }