// распечатка одиночного сообщения и при необходимости создание привата private void OnMessageReceive(Message message) { // ид и ключ другого пользователя (только для приватных сообщений) var userId = message.Sender == engine.CurrentUserId ? message.Receiver : message.Sender; var userKey = userId.ToString(); var page = string.IsNullOrEmpty(message.Room) ? tabControl.TabPages[userKey] : tabControl.TabPages[message.Room]; var printMessage = true; // признак распечатки сообщения if (string.IsNullOrEmpty(message.Room) && page == null) // приват закрыт - открываем { CreatePrivatePage(userId); printMessage = false; page = tabControl.TabPages[userKey]; } if (page == null) { return; // какая-то странная ошибка } if (tabControl.SelectedTab != page) { if (!highlightedPages.Contains(page)) { highlightedPages.Add(page); } } // сообщение для новой вкладки будет распечатано после вызова GetPendingMessages, // поэтому делаем проверку, чтобы не получить дубликата последнего сообщения if (printMessage) { PrintMessage((ChatMessagingControl)page.Controls[0], message); } }
public Message(Message message) { Sender = message.Sender; Receiver = message.Receiver; Room = message.Room; Text = message.Text; TimeStamp = message.TimeStamp; }
// post room message in ChatMessagingControl w/o informing (highlighting) private void PrintMessage(Message message) { var index = tabControl.TabPages.IndexOfKey(message.Room); if (index == -1) { return; } var page = tabControl.TabPages[index]; var chatControl = (ChatMessagingControl)page.Controls[0]; PrintMessage(chatControl, message); }
private void MessageReceived(Message message) { if (isStopping) { return; } try { BeginInvoke(new Action <Message>(OnMessageReceive), message); } catch (Exception) { } }
public List<Message> LoadMessagesFromFiles() { var result = new List<Message>(); try { foreach (var fileName in Directory.GetFiles(ExecutablePath.ExecPath + folder, "*.txt")) { var shortName = new FileInfo(fileName).Name; var roomName = shortName.Substring(0, shortName.LastIndexOf(".txt")); lock (fileLock) { using (var fs = new FileStream(fileName, FileMode.OpenOrCreate)) using (var sr = new StreamReader(fs)) { var lineNumber = 0; while (true) { var line = sr.ReadLine(); if (string.IsNullOrEmpty(line)) break; var words = line.Split(new[] {" "}, StringSplitOptions.None); if (words.Length < 4) { Logger.Error(string.Format("LoadMessagesFromFiles: format error: file: {0}, line: {1}", fileName, lineNumber)); lineNumber++; continue; } var message = new Message { TimeStamp = DateTime.Parse(words[0]), Sender = words[1].ToInt(), Room = roomName, Receiver = words[2].ToInt(), Text = words[3].Replace(" ", Environment.NewLine) }; result.Add(message); lineNumber++; } } } } } catch (Exception exception) { Logger.Info("ChatClientStorage.LoadMessagesFromFiles", exception); } return result; }
/// <summary> /// если сообщение пришло в чат, а чат открыт в какой-то вкладке, неактивной - /// - моргнуть этой вкладкой /// </summary> private void ChatEngineOnMessageReceived(Message message) { var wndSets = nonChartWindows.FirstOrDefault(w => w.Window == NonChartWindowSettings.WindowCode.Chat); if (wndSets == null) return; var isChildVisible = MdiChildren.Any(c => c is ChatForm && c.Visible); if (!isChildVisible) // заморгать вкладкой try { Invoke(new Action<long>(l => bookmarkStrip.BlinkBookmark(l)), wndSets.ChartTab); } catch (Exception ex) { Logger.Error("ChatEngineOnMessageReceived()", ex); } }
private void PrintMessage(ChatMessagingControl chatControl, Message message, ChatMessagingControl.MessageStyle style = ChatMessagingControl.MessageStyle.None) { chatControl.AddMessage(message, engine, style); }
// post room message in ChatMessagingControl w/o informing (highlighting) private void PrintMessage(Message message) { var index = tabControl.TabPages.IndexOfKey(message.Room); if (index == -1) return; var page = tabControl.TabPages[index]; var chatControl = (ChatMessagingControl) page.Controls[0]; PrintMessage(chatControl, message); }
// распечатка одиночного сообщения и при необходимости создание привата private void OnMessageReceive(Message message) { // ид и ключ другого пользователя (только для приватных сообщений) var userId = message.Sender == engine.CurrentUserId ? message.Receiver : message.Sender; var userKey = userId.ToString(); var page = string.IsNullOrEmpty(message.Room) ? tabControl.TabPages[userKey] : tabControl.TabPages[message.Room]; var printMessage = true; // признак распечатки сообщения if (string.IsNullOrEmpty(message.Room) && page == null) // приват закрыт - открываем { CreatePrivatePage(userId); printMessage = false; page = tabControl.TabPages[userKey]; } if (page == null) return; // какая-то странная ошибка if (tabControl.SelectedTab != page) if (!highlightedPages.Contains(page)) highlightedPages.Add(page); // сообщение для новой вкладки будет распечатано после вызова GetPendingMessages, // поэтому делаем проверку, чтобы не получить дубликата последнего сообщения if (printMessage) PrintMessage((ChatMessagingControl) page.Controls[0], message); }
private void MessageReceived(Message message) { if (isStopping) return; try { BeginInvoke(new Action<Message>(OnMessageReceive), message); } catch (Exception) { } }
public void MessageReceived(Message message) { if (MessageReceivedD != null) MessageReceivedD(message); }
public void SaveMessage(Message message) { pendingMessages.Add(message, LockTimeout); }