Inheritance: TextMessageEventArgs, ICloneable
示例#1
0
        private void OnChatMessageReceived(ChatMessageEventArgs args)
        {
            if (args == null) return;

            string dn, un, host;
            int port;
            if (args.CallsChatPtrList.Contains(args.ChatPtr) /*&& RttEnabled*/)
            {
                return;
            }

            System.Windows.Threading.Dispatcher dispatcher = null;
            try
            {
               dispatcher = this._serviceManager.Dispatcher;
            }
            catch (NullReferenceException)
            {
                return;
            }

            if (dispatcher != null)
                dispatcher.BeginInvoke((Action) delegate()
                {
                    if (!VATRPCall.ParseSipAddressEx(args.Remote, out dn, out un,
                        out host, out port))
                        un = "";

                    if (!un.NotBlank())
                        return;

                    var contactAddress = string.Format("{0}@{1}", un, host);
                    var contactID = new ContactID(contactAddress, IntPtr.Zero);
                    VATRPContact contact = FindContact(contactID);

                    if (contact == null)
                    {
                        contact = new VATRPContact(contactID)
                        {
                            DisplayName = dn,
                            Fullname = dn.NotBlank() ? dn : un,
                            SipUsername = un,
                            RegistrationName = contactAddress
                        };
                        _contactSvc.AddContact(contact, "");
                        Contacts.Add(contact);
                        if (ContactAdded != null)
                            ContactAdded(this, new ContactEventArgs(new ContactID(contact)));
                    }

                    VATRPChat chat = GetChat(contact, false);
                    chat.NativePtr = args.ChatPtr;

                    if (chat.CheckMessage(args.ChatMessage))
                    {
                        chat.UnreadMsgCount++;
                        if (!chat.IsSelected)
                            contact.UnreadMsgCount++;
                        args.ChatMessage.IsRTTMessage = false;
                        args.ChatMessage.IsIncompleteMessage = false;
                        args.ChatMessage.Chat = chat;
                        if (args.ChatMessage.Content.StartsWith(VATRPChatMessage.DECLINE_PREFIX))
                        {
                            args.ChatMessage.Content = args.ChatMessage.Content.Substring(VATRPChatMessage.DECLINE_PREFIX.Length);

                            args.ChatMessage.IsDeclineMessage = true;
                            if (ConversationDeclineMessageReceived != null)
                            {
                                var header = "Call declined with message";
                                var declineArgs = new DeclineMessageArgs(header, args.ChatMessage.Content) { Sender = contact };
                                ConversationDeclineMessageReceived(this, declineArgs);
                            }
                        }

                        chat.AddMessage(args.ChatMessage, false);
                        chat.UpdateLastMessage(false);

                        OnConversationUnReadStateChanged(chat);
                        this.OnConversationUpdated(chat, true);
                    }
                });
        }
示例#2
0
 private void OnChatMessageReceived(IntPtr chatPtr, List<IntPtr> callChatPtrList, string remoteUser,
     VATRPChatMessage chatMessage)
 {
     var args = new ChatMessageEventArgs(remoteUser, chatPtr, callChatPtrList, chatMessage);
     EnqueueReceivedMsg(args);
 }