Exemple #1
0
        public static ChatUser LoadUser(Guid id)
        {
            if (OnlineUsers.ContainsKey(id))
            {
                return(OnlineUsers[id]);
            }

            ChatUser result = null;

            try
            {
                result = new ChatUserStore().Load(id);
                if (result != null)
                {
                    ConversationStore conversationStore = new ConversationStore();
                    long time = 0;
                    foreach (Guid cid in result.ConversationID)
                    {
                        time = conversationStore.GetLastActive(cid);
                        result.Conversations.TryAdd(cid, time);
                    }
                }
            } catch (Exception e)
            {
                PacChatServer.GetServer().Logger.Error(e);
            }

            return(result);
        }
        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 static AbstractConversation GetConversation(Guid id)
        {
            CachedConversation.TryGet(id, out var result);

            if (result == null)
            {
                result = new ConversationStore().Load(id);
                CachedConversation.AddReplace(id, result);
            }

            return(result);
        }
        public void Handle(ISession session)
        {
            ChatSession chatSession = session as ChatSession;

            ConversationFrIDResponse packet = new ConversationFrIDResponse();

            packet.ConversationID = ConversationID.ToString();
            var conversationStore = new ConversationStore().Load(ConversationID);

            packet.LastActive       = 0;
            packet.ConversationName = "";

            if (conversationStore == null)
            {
                packet.StatusCode = 404;
            }
            else
            {
                packet.StatusCode = 200;
                conversationStore.UpdateLastActive(chatSession);
                packet.LastActive = conversationStore.LastActive;

                if (conversationStore is SingleConversation)
                {
                    packet.ConversationName = "~";
                }
                else
                {
                    packet.ConversationName = conversationStore.ConversationName;
                }

                foreach (var member in conversationStore.Members)
                {
                    packet.Members.Add(member.ToString());
                }

                packet.LastMessID       = conversationStore.MessagesID.Count - 1;
                packet.LastMediaID      = conversationStore.MediaID.Count - 1;
                packet.LastAttachmentID = conversationStore.AttachmentID.Count - 1;
            }

            packet.BubbleColor = conversationStore.Color;

            // Update later
            packet.PreviewCode    = -1;
            packet.PreviewContent = "";

            chatSession.Send(packet);
        }
Exemple #5
0
        public void Handle(ISession session)
        {
            ChatSession chatSession = session as ChatSession;

            AbstractConversation conversation = new ConversationStore().Load(ConversationID);

            if (conversation == null)
            {
                return;
            }

            MediaFromConversationResponse packet = new MediaFromConversationResponse();

            if (conversation.MediaID.Count > 0)
            {
                for (int i = MediaPosition; i >= Math.Max(0, MediaPosition - Quantity + 1); --i)
                {
                    AbstractMessage mediaMessage = new MessageStore().Load(conversation.MediaID[i], ConversationID);

                    string fileID, fileName;
                    fileID = fileName = "~";

                    if (mediaMessage is ImageMessage)
                    {
                        fileID   = (mediaMessage as ImageMessage).FileID;
                        fileName = (mediaMessage as ImageMessage).FileName;
                    }
                    else if (mediaMessage is VideoMessage)
                    {
                        fileID   = (mediaMessage as VideoMessage).FileID;
                        fileName = (mediaMessage as VideoMessage).FileName;
                    }

                    if (fileID.Equals("~") || fileName.Equals("~"))
                    {
                        continue;
                    }
                    packet.Positions.Add(i);
                    packet.FileIDs.Add(fileID);
                    packet.FileNames.Add(fileName);
                }
            }
            chatSession.Send(packet);
        }
        public void Handle(ISession session)
        {
            GetConversationShortInfoResponse packet = new GetConversationShortInfoResponse();

            packet.ConversationID = ConversationID.ToString();

            ChatSession          chatSession  = session as ChatSession;
            AbstractConversation conversation = new ConversationStore().Load(ConversationID);

            int cnt = 0;

            packet.ConversationName = "";
            if (string.IsNullOrEmpty(conversation.ConversationName) || conversation.ConversationName.Equals("~"))
            {
                foreach (var member in conversation.Members)
                {
                    if (member.CompareTo(chatSession.Owner.ID) == 0)
                    {
                        continue;
                    }
                    string name = new ChatUserStore().Load(member).FirstName;
                    packet.ConversationName += name + ", ";
                    cnt++;

                    if (cnt >= 2)
                    {
                        break;
                    }
                }

                if (cnt >= 2)
                {
                    packet.ConversationName += "and " + (conversation.Members.Count - 3) + "others...";
                }
                else
                {
                    packet.ConversationName = packet.ConversationName.Replace(", ", "");
                }
            }

            conversation.UpdateLastActive(chatSession);
            packet.LastActive = conversation.LastActive;
            chatSession.Send(packet);
        }
Exemple #7
0
        public void Handle(ISession session)
        {
            if (MessagePosition == -1)
            {
                return;
            }

            ChatSession       chatSession = session as ChatSession;
            ConversationStore store       = new ConversationStore();

            AbstractConversation conversation = store.Load(ConversationID);

            MessageFromConversationResponse packet = new MessageFromConversationResponse();

            var messages = conversation.MessagesID;

            if (messages.Count == 0)
            {
                return;
            }
            MessageStore messageStore = new MessageStore();

            for (int i = MessagePosition; i >= Math.Max(0, MessagePosition - Quantity + 1); --i)
            {
                AbstractMessage mess = new MessageStore().Load(messages[i], ConversationID);

                if (mess != null)
                {
                    packet.SenderID.Add(mess.Author.ToString());
                    packet.Content.Add(mess);
                }
            }

            packet.LoadConversation = LoadConversation;

            chatSession.Owner.SendOnly(packet, chatSession);
        }
        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 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);
        }