private void HandleContactItemButton(UI.ContactItem.Contact senderContact, UI.ContactItem.Buttons clickedButton) { Debug.Log("Clicked on ClientId={0} Button={1}.", senderContact.ClientId, clickedButton.ToString()); if (clickedButton == UI.ContactItem.Buttons.Information) { if (this.m_guiContactInformation.Visibility == System.Windows.Visibility.Visible) { this.m_guiContactInformation.Dispatcher.Invoke(() => this.m_guiContactInformation.Hide()); } this.m_guiContactInformation.UpdatePublicKey(this.m_localClient.GetClientKey(senderContact.ClientId)); this.m_guiContactInformation.UpdateClient(senderContact.Username, senderContact.ClientId); this.m_guiContactInformation.Dispatcher.Invoke(() => this.m_guiContactInformation.Show()); } else if (clickedButton == UI.ContactItem.Buttons.Message) { GUI.Message clientMessageUI = null; if (this.m_guiMessages.ContainsKey(senderContact.ClientId)) { Debug.Log("Accessing created message window for ClientId={0}.", senderContact.ClientId); clientMessageUI = this.m_guiMessages[senderContact.ClientId]; } else { Debug.Log("Creating message window for ClientId={0}.", senderContact.ClientId); this.m_guiContacts.Dispatcher.Invoke(() => clientMessageUI = new GUI.Message()); clientMessageUI.SetWindow(this.m_guiContacts.LocalContact, senderContact); clientMessageUI.onMessageAccept += (string messageContent) => this.SendClientMessage(senderContact.ClientId, messageContent); this.m_guiMessages.Add(senderContact.ClientId, clientMessageUI); this.RequestClientPublicKey(senderContact.ClientId); } if (clientMessageUI.Visibility != System.Windows.Visibility.Visible) { Debug.Log("Showing message window for ClientId={0}.", senderContact.ClientId); clientMessageUI.Show(); } } }
private void ReceivedClientMessage(long senderClientId, int messageType, ByteString messageContent) { Debug.Log("Received client message from ClientId={0}.", senderClientId); switch (messageType) { case MessageType.DirectMessage: { DirectMessage clientMessage = DirectMessage.Parser.ParseFrom(messageContent); UI.ContactItem.Contact senderContact = this.m_guiContacts.GetClientContact(senderClientId); if (senderContact == null) { Debug.Error("Cannot proceed invalid message contact."); return; } GUI.Message clientWindow = null; if (this.m_guiMessages.ContainsKey(senderClientId)) { clientWindow = this.m_guiMessages[senderClientId]; } else { this.m_guiContacts.Dispatcher.Invoke(() => clientWindow = new GUI.Message()); clientWindow.SetWindow(this.m_guiContacts.LocalContact, senderContact); clientWindow.onMessageAccept += (string msgContent) => this.SendClientMessage(senderContact.ClientId, msgContent); this.m_guiMessages.Add(senderClientId, clientWindow); } clientWindow.AddMessage(senderContact, clientMessage.Content); this.RequestClientPublicKey(senderClientId); if (clientWindow.Visibility != System.Windows.Visibility.Visible) { Debug.Log("Showing notification to the local client."); GUI.Notice noticeWindow = null; this.m_guiContacts.Dispatcher.Invoke(() => noticeWindow = new GUI.Notice()); if (noticeWindow != null) { noticeWindow.MessageResource = "Notice_NewMessage"; noticeWindow.ButtonResource = "Notice_ShowButton"; noticeWindow.MessageContent = senderContact.Username; noticeWindow.onButtonClick += (object sender) => clientWindow.Show(); noticeWindow.Dispatcher.Invoke(() => noticeWindow.Show()); } } } break; } }