示例#1
0
        // распечатка одиночного сообщения и при необходимости создание привата
        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);
            }
        }
示例#2
0
 public Message(Message message)
 {
     Sender = message.Sender;
     Receiver = message.Receiver;
     Room = message.Room;
     Text = message.Text;
     TimeStamp = message.TimeStamp;
 }
示例#3
0
        // 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);
        }
示例#4
0
 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[] {"&#32;"}, 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("&#10;", Environment.NewLine)
                             };
                         result.Add(message);
                         lineNumber++;
                     }
                 }
             }
         }
     }
     catch (Exception exception)
     {
         Logger.Info("ChatClientStorage.LoadMessagesFromFiles", exception);
     }
     return result;
 }
示例#6
0
        /// <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);
            }
        }
示例#7
0
 private void PrintMessage(ChatMessagingControl chatControl, Message message, ChatMessagingControl.MessageStyle style = ChatMessagingControl.MessageStyle.None)
 {
     chatControl.AddMessage(message, engine, style);
 }
示例#8
0
 // 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);
 }
示例#9
0
 // распечатка одиночного сообщения и при необходимости создание привата
 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);
 }
示例#10
0
 private void MessageReceived(Message message)
 {
     if (isStopping)
         return;
     try
     {
         BeginInvoke(new Action<Message>(OnMessageReceive), message);
     }
     catch (Exception)
     {
     }
 }
示例#11
0
 public void MessageReceived(Message message)
 {
     if (MessageReceivedD != null)
         MessageReceivedD(message);
 }
示例#12
0
 public void SaveMessage(Message message)
 {
     pendingMessages.Add(message, LockTimeout);
 }
示例#13
0
 private void PrintMessage(ChatMessagingControl chatControl, Message message, ChatMessagingControl.MessageStyle style = ChatMessagingControl.MessageStyle.None)
 {
     chatControl.AddMessage(message, engine, style);
 }