private void OnChatMessageComposing(MessageComposingEventArgs args) { if (args == null) return; System.Windows.Threading.Dispatcher dispatcher = null; try { dispatcher = this._serviceManager.Dispatcher; } catch (NullReferenceException) { return; } if (dispatcher != null) dispatcher.BeginInvoke((Action) delegate() { VATRPChat chat = FindRTTChat(args.ChatRoomPtr); if (chat == null) { LOG.WarnFormat("RTT Chat not found Ptr: {0} ", args.ChatRoomPtr); return; } chat.CharsCountInBubble++; var rttCodeArray = new char[2]; var rttCodearrayLength = 1; if (chat.CharsCountInBubble == 201) { rttCodeArray[0] = UNLF; try { rttCodeArray[1] = Convert.ToChar(args.RTTCode); } catch (Exception) { } rttCodearrayLength = 2; chat.CharsCountInBubble = 0; } else { try { rttCodeArray[0] = Convert.ToChar(args.RTTCode); } catch { } } for (int i = 0; i < rttCodearrayLength; i++) { VATRPChatMessage message = chat.SearchIncompleteMessage(MessageDirection.Incoming); if (message == null) { message = new VATRPChatMessage(MessageContentType.Text) { Direction = MessageDirection.Incoming, IsIncompleteMessage = true, Chat = chat, IsRTTMarker = false, IsRTTMessage = true }; chat.AddMessage(message, false); } try { var sb = new StringBuilder(message.Content); switch (rttCodeArray[i]) { case UNLF: // case CR: case LF: message.IsIncompleteMessage = false; break; case '\b': if (sb.Length > 0) sb.Remove(sb.Length - 1, 1); break; default: sb.Append(rttCodeArray[i]); break; } if (message.IsIncompleteMessage) message.Content = sb.ToString(); } catch (Exception ex) { Debug.WriteLine("Error in OnChatMessageComposing: " + ex.Message); message.IsIncompleteMessage = false; } if (string.IsNullOrEmpty(message.Content)) chat.DeleteMessage(message); else chat.UpdateLastMessage(false); this.OnConversationUpdated(chat, true); if (this.RttReceived != null) { this.RttReceived(chat.CallPtr, EventArgs.Empty); } } }); }
private void OnChatMessageComposing(IntPtr chatPtr, uint rttCode) { var args = new MessageComposingEventArgs(chatPtr, rttCode); EnqueueReceivedMsg(args); }