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); } }); }
private void OnChatMessageReceived(IntPtr chatPtr, List<IntPtr> callChatPtrList, string remoteUser, VATRPChatMessage chatMessage) { var args = new ChatMessageEventArgs(remoteUser, chatPtr, callChatPtrList, chatMessage); EnqueueReceivedMsg(args); }