Beispiel #1
0
    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();
        }
      }
    }
Beispiel #2
0
    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;
      }
    }