private void network_MessageReceived(MeshNetwork.Peer peer, MessageItem message) { switch (message.Type) { case MessageType.Info: AddMessage(new ChatMessageInfoItem(message), peer.IsSelfPeer); break; case MessageType.TextMessage: ChatMessageTextItem textItem = new ChatMessageTextItem(peer, message); textItem.ForwardTo += MessageItem_ForwardTo; AddMessage(textItem, peer.IsSelfPeer); ShowPeerTypingNotification(peer.ProfileDisplayName, false); break; case MessageType.InlineImage: case MessageType.FileAttachment: ChatMessageFileItem fileItem = new ChatMessageFileItem(peer, message); fileItem.ForwardTo += MessageItem_ForwardTo; AddMessage(fileItem, peer.IsSelfPeer); break; } }
public frmViewProfile(MeshNetwork.Peer peer) { InitializeComponent(); _peer = peer; ShowDetails(_peer.ProfileDisplayName, _peer.PeerUserId.ToString(), _peer.ProfileStatus, _peer.ProfileStatusMessage, _peer.ProfileDisplayImage); }
private void peer_StateChanged(object sender, EventArgs e) { MeshNetwork.Peer peer = sender as MeshNetwork.Peer; if (_network.Type == MeshNetworkType.Private) { _view.Title = _network.NetworkName; } //MessageNotification(_network, null, message); }
private void network_MessageReceived(MeshNetwork.Peer peer, MessageItem message) { string msg = null; switch (message.Type) { case MessageType.TextMessage: if (peer.IsSelfPeer) { msg = message.MessageText; } else { msg = peer.ProfileDisplayName + ": " + message.MessageText; } break; case MessageType.InlineImage: if (peer.IsSelfPeer) { msg = "shared an image."; } else { msg = peer.ProfileDisplayName + " shared an image."; } break; case MessageType.FileAttachment: if (peer.IsSelfPeer) { msg = "shared a file."; } else { msg = peer.ProfileDisplayName + " shared a file: " + message.FileName; } break; } if (msg != null) { if (msg.Length > 100) { msg = msg.Substring(0, 100) + "..."; } SetLastMessage(msg, message.MessageDate, true); } }
private void network_MessageDeliveryNotification(MeshNetwork.Peer sender, MessageItem message) { foreach (Control item in customListView1.Controls) { IChatMessageItem msgItem = item as IChatMessageItem; if ((msgItem != null) && (msgItem.Message.MessageNumber == message.MessageNumber)) { msgItem.DeliveryNotification(message); break; } } }
public UserListItem(MeshNetwork.Peer peer) { InitializeComponent(); _peer = peer; RefreshIcon(); RefreshText(); RefreshView(); _peer.StateChanged += peer_StateChanged; _peer.ConnectivityStatusChanged += peer_ConnectivityStatusChanged; _peer.ProfileChanged += peer_ProfileChanged; }
private void network_PeerTyping(MeshNetwork.Peer peer) { //show typing notification if ((_network.Type == MeshNetworkType.Private) && !peer.IsSelfPeer) { labLastMessage.Text = "typing..."; } else { labLastMessage.Text = peer.ProfileDisplayName + " is typing..."; } labLastMessage.ForeColor = Color.FromArgb(255, 213, 89); timerTypingNotification.Stop(); timerTypingNotification.Start(); }
private void network_MessageReceived(MeshNetwork.Peer peer, MessageItem message) { if (!peer.Network.Mute && (!this.Visible || !ApplicationIsActivated())) { string msg; switch (message.Type) { case MessageType.TextMessage: msg = message.MessageText; break; case MessageType.InlineImage: msg = "shared an image."; break; case MessageType.FileAttachment: msg = "shared a file '" + message.FileName + "'"; break; default: return; } lock (_profileManager.SystemTrayIcon) { if (peer.Network.Type == MeshNetworkType.Private) { _profileManager.SystemTrayIcon.ShowBalloonTip(30000, peer.Network.NetworkName + " - Mesh App", msg, ToolTipIcon.Info); } else { _profileManager.SystemTrayIcon.ShowBalloonTip(30000, peer.Network.NetworkName + " - Mesh App", peer.ProfileDisplayName + ": " + msg, ToolTipIcon.Info); } _profileManager.SystemTrayIcon.Tag = this; } _sndMessageNotification.Play(); } }
private void network_GroupImageChanged(MeshNetwork.Peer peer) { RefreshIcon(); }
public frmViewUserDetails(MeshNetwork.Peer peer) { InitializeComponent(); _peer = peer; //name { string name = _peer.ProfileDisplayName; //name icon if (name.Length > 0) { labIcon.Text = name.Substring(0, 1).ToUpper(); int x = name.LastIndexOf(" ", StringComparison.CurrentCultureIgnoreCase); if (x > 0) { labIcon.Text += name.Substring(x + 1, 1).ToUpper(); } else if (name.Length > 1) { labIcon.Text += name.Substring(1, 1).ToLower(); } } else { labIcon.Text = ""; } if (_peer.IsOnline) { labIcon.BackColor = Color.FromArgb(102, 153, 255); } else { labIcon.BackColor = Color.Gray; } labName.Text = name; } //status labStatus.Text = _peer.ProfileStatusMessage; switch (_peer.ProfileStatus) { case MeshProfileStatus.Inactive: labStatus.Text = "(Inactive) " + labStatus.Text; break; case MeshProfileStatus.Busy: labStatus.Text = "(Busy) " + labStatus.Text; break; } //userId labUserId.Text = _peer.PeerUserId.ToString(); //image icon if ((_peer.ProfileDisplayImage != null) && (_peer.ProfileDisplayImage.Length > 0)) { using (MemoryStream mS = new MemoryStream(_peer.ProfileDisplayImage)) { picIcon.Image = new Bitmap(Image.FromStream(mS), picIcon.Size); } picIcon.Visible = true; labIcon.Visible = false; } //network status switch (_peer.ConnectivityStatus) { case MeshNetwork.PeerConnectivityStatus.NoNetwork: labNetworkStatus.Text = "No Network"; labNetworkStatus.ForeColor = Color.DimGray; picNetwork.Image = Properties.Resources.NoNetwork; break; case MeshNetwork.PeerConnectivityStatus.PartialMeshNetwork: labNetworkStatus.Text = "Partial Mesh Network"; labNetworkStatus.ForeColor = Color.OrangeRed; picNetwork.Image = Properties.Resources.PartialNetwork; break; case MeshNetwork.PeerConnectivityStatus.FullMeshNetwork: labNetworkStatus.Text = "Full Mesh Network"; labNetworkStatus.ForeColor = Color.Green; picNetwork.Image = Properties.Resources.FullNetwork; break; default: labNetworkStatus.Text = "Unknown"; labNetworkStatus.ForeColor = Color.DimGray; picNetwork.Image = Properties.Resources.NoNetwork; break; } //cipher suite if (_peer.CipherSuite == SecureChannelCipherSuite.None) { labCipherSuite.Text = "Not applicable"; } else { labCipherSuite.Text = _peer.CipherSuite.ToString(); } //connected with MeshNetworkPeerInfo[] connectedWith = _peer.ConnectedWith; foreach (MeshNetworkPeerInfo peerInfo in connectedWith) { string peerIPs = null; foreach (EndPoint peerEP in peerInfo.PeerEPs) { if (peerIPs == null) { peerIPs = peerEP.ToString(); } else { peerIPs += ", " + peerEP.ToString(); } } lstConnectedWith.Items.Add(peerInfo.PeerDisplayName + " [" + peerInfo.PeerUserId.ToString() + "]").SubItems.Add(peerIPs); } //not connected with MeshNetworkPeerInfo[] notConnectedWith = _peer.NotConnectedWith; foreach (MeshNetworkPeerInfo peerInfo in notConnectedWith) { string peerIPs = null; foreach (EndPoint peerEP in peerInfo.PeerEPs) { if (peerIPs == null) { peerIPs = peerEP.ToString(); } else { peerIPs += ", " + peerEP.ToString(); } } lstNotConnectedWith.Items.Add(peerInfo.PeerDisplayName + " [" + peerInfo.PeerUserId.ToString() + "]").SubItems.Add(peerIPs); } }
public ChatMessageFileItem(MeshNetwork.Peer senderPeer, MessageItem message) { InitializeComponent(); _senderPeer = senderPeer; _message = message; lblFileName.Text = _message.FileName; lblContentType.Text = WebUtilities.GetContentType(_message.FileName).ToString(); lblFileSize.Text = WebUtilities.GetFormattedSize(_message.FileSize); TimeSpan span = DateTime.UtcNow.Date - _message.MessageDate.Date; if (span.TotalDays >= 7) { lblDateTime.Text = _message.MessageDate.ToLocalTime().ToString(); } else if (span.TotalDays >= 2) { lblDateTime.Text = _message.MessageDate.ToLocalTime().DayOfWeek.ToString() + " " + _message.MessageDate.ToLocalTime().ToShortTimeString(); } else if (span.TotalDays >= 1) { lblDateTime.Text = "Yesterday " + _message.MessageDate.ToLocalTime().ToShortTimeString(); } else { lblDateTime.Text = _message.MessageDate.ToLocalTime().ToShortTimeString(); } toolTip1.SetToolTip(lblDateTime, _message.MessageDate.ToLocalTime().ToString()); if (_senderPeer.IsSelfPeer) { if (File.Exists(_message.FilePath)) { linkAction.Visible = true; linkAction.Text = "Open"; } else { linkAction.Visible = false; } pbDownloadProgress.Visible = false; } else if (WasFileDownloaded()) { linkAction.Visible = true; linkAction.Text = "Open"; pbDownloadProgress.Visible = false; } else { linkAction.Visible = true; linkAction.Text = "Download"; pbDownloadProgress.Visible = false; } if (_senderPeer == null) { lblUsername.Text = _message.SenderUserId.ToString(); } else { lblUsername.Text = _senderPeer.ProfileDisplayName; if (_senderPeer.IsSelfPeer) { lblUsername.ForeColor = Color.FromArgb(63, 186, 228); pnlBubble.Left = this.Width - pnlBubble.Width - 20; pnlBubble.Anchor = AnchorStyles.Top | AnchorStyles.Right; picPointLeft.Visible = false; picPointRight.Visible = true; mnuMessageInfo.Visible = true; switch (_message.GetDeliveryStatus()) { case MessageDeliveryStatus.Undelivered: if (_senderPeer.Network.Type == MeshNetworkType.Private) { picDeliveryStatus.Image = Properties.Resources.waiting; } else { if ((_message.Recipients.Length > 0) && ((DateTime.UtcNow - _message.MessageDate).TotalSeconds < 10)) { picDeliveryStatus.Image = Properties.Resources.waiting; timer1.Start(); } else { picDeliveryStatus.Image = Properties.Resources.message_failed; } } break; case MessageDeliveryStatus.PartiallyDelivered: picDeliveryStatus.Image = Properties.Resources.single_tick; break; case MessageDeliveryStatus.Delivered: picDeliveryStatus.Image = Properties.Resources.double_ticks; break; default: picDeliveryStatus.Image = null; break; } picDeliveryStatus.Visible = (picDeliveryStatus.Image != null); } else { lblDateTime.Left = pnlBubble.Width - lblDateTime.Width - 2; } } }
public frmMessageInfo(MeshNetwork.Peer selfPeer, MessageItem message) { this.SuspendLayout(); InitializeComponent(); CustomListViewItem displayItem; switch (message.Type) { case MessageType.TextMessage: ChatMessageTextItem textItem = new ChatMessageTextItem(selfPeer, message); textItem.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; textItem.Width = chatMessagePanel.Width - 30; textItem.ContextMenuStrip = null; displayItem = textItem; break; case MessageType.FileAttachment: ChatMessageFileItem fileItem = new ChatMessageFileItem(selfPeer, message); fileItem.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right; fileItem.Width = chatMessagePanel.Width - 30; fileItem.ContextMenuStrip = null; displayItem = fileItem; break; default: return; } if (displayItem.Height > 150) { chatMessagePanel.Height = 140; } else { chatMessagePanel.Height = displayItem.Height + 10; int heightDiff = 150 - chatMessagePanel.Height; this.Height -= heightDiff; listView1.Top -= heightDiff; btnClose.Top -= heightDiff; } chatMessagePanel.Controls.Add(displayItem); MeshNetwork.Peer[] peers = selfPeer.Network.GetPeers(); foreach (MessageRecipient rcpt in message.Recipients) { string rcptName = null; foreach (MeshNetwork.Peer peer in peers) { if (peer.PeerUserId.Equals(rcpt.UserId)) { rcptName = peer.ProfileDisplayName; break; } } if (rcptName == null) { rcptName = rcpt.UserId.ToString(); } ListViewItem item = listView1.Items.Add(rcptName); switch (rcpt.Status) { case MessageRecipientStatus.Delivered: item.SubItems.Add("Delivered on " + rcpt.DeliveredOn.ToLocalTime().ToString()); break; case MessageRecipientStatus.Undelivered: item.SubItems.Add("Undelivered"); break; } } this.ResumeLayout(); }
private List <CustomListViewItem> ConvertToListViewItems(MessageItem[] items, bool updateLastMessageInChatItem) { MeshNetwork.Peer[] peerList = _network.GetPeers(); List <CustomListViewItem> listItems = new List <CustomListViewItem>(items.Length); DateTime lastItemDate = new DateTime(); string lastMessage = null; DateTime lastMessageDate = new DateTime(); foreach (MessageItem item in items) { if (lastItemDate.Date < item.MessageDate.Date) { lastItemDate = item.MessageDate; listItems.Add(new ChatMessageInfoItem(new MessageItem(lastItemDate))); } switch (item.Type) { case MessageType.Info: listItems.Add(new ChatMessageInfoItem(item)); break; case MessageType.TextMessage: { MeshNetwork.Peer sender = null; foreach (MeshNetwork.Peer peer in peerList) { if (peer.PeerUserId.Equals(item.SenderUserId)) { sender = peer; break; } } if (sender == null) { continue; } ChatMessageTextItem textItem = new ChatMessageTextItem(sender, item); textItem.ForwardTo += MessageItem_ForwardTo; listItems.Add(textItem); if (sender == null) { lastMessage = item.SenderUserId + ": " + item.MessageText; } else if (sender.IsSelfPeer) { lastMessage = item.MessageText; } else { lastMessage = sender.ProfileDisplayName + ": " + item.MessageText; } lastMessageDate = item.MessageDate; } break; case MessageType.InlineImage: case MessageType.FileAttachment: { MeshNetwork.Peer sender = null; foreach (MeshNetwork.Peer peer in peerList) { if (peer.PeerUserId.Equals(item.SenderUserId)) { sender = peer; break; } } if (sender == null) { continue; } ChatMessageFileItem fileItem = new ChatMessageFileItem(sender, item); fileItem.ForwardTo += MessageItem_ForwardTo; listItems.Add(fileItem); string messageText = item.MessageText; if (string.IsNullOrEmpty(messageText)) { messageText = "file attachment"; } if (sender == null) { lastMessage = item.SenderUserId + ": " + messageText; } else if (sender.IsSelfPeer) { lastMessage = messageText; } else { lastMessage = sender.ProfileDisplayName + ": " + messageText; } lastMessageDate = item.MessageDate; } break; } } if (updateLastMessageInChatItem && (lastMessage != null)) { _chatItem.SetLastMessage(lastMessage, lastMessageDate, false); } return(listItems); }
private void network_PeerTyping(MeshNetwork.Peer peer) { ShowPeerTypingNotification(peer.ProfileDisplayName, true); }
public ChatMessageTextItem(MeshNetwork.Peer senderPeer, MessageItem message) { InitializeComponent(); this.SuspendLayout(); _senderPeer = senderPeer; _message = message; lblMessage.Text = _message.MessageText; TimeSpan span = DateTime.UtcNow.Date - _message.MessageDate.Date; if (span.TotalDays >= 7) { lblDateTime.Text = _message.MessageDate.ToLocalTime().ToString(); } else if (span.TotalDays >= 2) { lblDateTime.Text = _message.MessageDate.ToLocalTime().DayOfWeek.ToString() + " " + _message.MessageDate.ToLocalTime().ToShortTimeString(); } else if (span.TotalDays >= 1) { lblDateTime.Text = "Yesterday " + _message.MessageDate.ToLocalTime().ToShortTimeString(); } else { lblDateTime.Text = _message.MessageDate.ToLocalTime().ToShortTimeString(); } toolTip1.SetToolTip(lblDateTime, _message.MessageDate.ToLocalTime().ToString()); if (_senderPeer == null) { lblUsername.Text = _message.SenderUserId.ToString(); } else { lblUsername.Text = _senderPeer.ProfileDisplayName; if (_senderPeer.IsSelfPeer) { lblUsername.ForeColor = Color.FromArgb(63, 186, 228); pnlBubble.Left = this.Width - pnlBubble.Width - 20; picPointLeft.Visible = false; picPointRight.Visible = true; mnuMessageInfo.Visible = true; switch (_message.GetDeliveryStatus()) { case MessageDeliveryStatus.Undelivered: if (_senderPeer.Network.Type == MeshNetworkType.Private) { picDeliveryStatus.Image = Properties.Resources.waiting; } else { if ((_message.Recipients.Length > 0) && ((DateTime.UtcNow - _message.MessageDate).TotalSeconds < 10)) { picDeliveryStatus.Image = Properties.Resources.waiting; timer1.Start(); } else { picDeliveryStatus.Image = Properties.Resources.message_failed; } } break; case MessageDeliveryStatus.PartiallyDelivered: picDeliveryStatus.Image = Properties.Resources.single_tick; break; case MessageDeliveryStatus.Delivered: picDeliveryStatus.Image = Properties.Resources.double_ticks; break; default: picDeliveryStatus.Image = null; break; } picDeliveryStatus.Visible = (picDeliveryStatus.Image != null); } } this.ResumeLayout(); ResizeByTextSize(); }
private void network_PeerAdded(MeshNetwork.Peer peer) { lstUsers.AddItem(new UserListItem(peer)); peer.StateChanged += peer_StateChanged; }