예제 #1
0
 void switchboard_MessageRecieved(DNBSoft.MSN.ClientController.MSNUserMessage message)
 {
     if (message.getMessageType() == dotMSN.MSNEnumerations.UserMessageType.incomming_text_message)
     {
         _OnMessageReceived(message.getUsername(), message.getUserPayload(), false);
     }
 }
예제 #2
0
        public void sendMessage(MSNUserMessage message)
        {
            #region reconnect socket if needs be
            if (switchboardSocket.connected() != true)
            {
                List <String> initialUsers = new List <String>();
                for (int i = 0; i < lastMessageUsers.Count && i < lastMessageUsers.Count; i++) //added i < lastMessageUsers.Cout to remove exceptions
                {
                    initialUsers[i] = lastMessageUsers[i].ToString();
                    controller.startConversation(initialUsers);
                }
            }
            #endregion

            #region reinvite people if they've all left
            if (activeUsers.Count == 0 && lastMessageUsers.Count > 0)
            {
                for (int i = 0; i < lastMessageUsers.Count; i++)
                {
                    invite(lastMessageUsers[i].ToString());
                }
            }
            else if (activeUsers.Count == 0 && lastMessageUsers.Count == 0)
            {
                for (int i = 0; i < connectedUsers.Count; i++)
                {
                    invite(connectedUsers[i].ToString());
                }
            }
            #endregion

            if (message != null)
            {
                outgoingMSGQueue.Enqueue(message);
            }

            #region update last messages user
            lastMessageUsers.Clear();

            if (activeUsers.Count > 0)
            {
                for (int i = 0; i < activeUsers.Count; i++)
                {
                    lastMessageUsers.Add(activeUsers[i].ToString());
                }
            }
            #endregion
        }
예제 #3
0
        private void outgoingMSGLoop()
        {
            while (true)
            {
                MSNUserMessage message = null;

                try
                {
                    #region wait for a message to process
                    while (outgoingMSGQueue.Count == 0)
                    {
                        Thread.Sleep(20);
                    }
                    #endregion

                    #region get message
                    message = outgoingMSGQueue.Dequeue();
                    #endregion

                    #region process message through plugins
                    if (message.ProcessByPlugins)
                    {
                        foreach (IMSNSwitchboardPlugin plugin in plugins)
                        {
                            try
                            {
                                plugin.processOutgoingMessage(message);
                            }
                            catch (Exception err)
                            {
                                Console.WriteLine("IMSNSwitchboard plugin error: " + err.ToString());
                            }
                        }
                    }
                    #endregion

                    #region wait for socket / active users to be valid if actually sending the message
                    if (message.getSend())
                    {
                        #region reconnect socket if needs be
                        if (switchboardSocket.connected() != true)
                        {
                            List <String> initialUsers = new List <string>();
                            for (int i = 0; i < lastMessageUsers.Count; i++)
                            {
                                initialUsers.Add(lastMessageUsers[i].ToString());
                                controller.startConversation(initialUsers);
                            }
                        }
                        #endregion

                        #region reinvite people if they've all left
                        if (activeUsers.Count == 0 && lastMessageUsers.Count > 0)
                        {
                            for (int i = 0; i < lastMessageUsers.Count; i++)
                            {
                                invite(lastMessageUsers[i].ToString());
                            }
                        }
                        else if (activeUsers.Count == 0 && lastMessageUsers.Count == 0)
                        {
                            for (int i = 0; i < connectedUsers.Count; i++)
                            {
                                invite(connectedUsers[i].ToString());
                            }
                        }
                        #endregion

                        #region wait for active users
                        while (activeUsers.Count == 0)
                        {
                            try
                            {
                                Thread.Sleep(50);
                            }
                            catch (Exception)
                            {
                            }
                        }
                        #endregion
                    }
                    #endregion

                    #region writing message to gui plugins IF message.getShowOrRecieve() == true
                    if (message.getDisplay() && MessageSent != null)
                    {
                        MessageSent(message);
                    }

                    /**
                     * if (message.getDisplay())
                     * {
                     *  for (int i = 0; i < windowPlugins.Count; i++)
                     *  {
                     *      MSNSwitchboardGUIPluginListener plugin = null;
                     *
                     *      try
                     *      {
                     *          plugin = (MSNSwitchboardGUIPluginListener)windowPlugins[i];
                     *          plugin.processOutgoingMessage(message);
                     *      }
                     *      catch (Exception)
                     *      {
                     *          if (plugin != null)
                     *          {
                     *              Console.WriteLine("Error sending outgoing MSG to gui plugin (" + plugin.getName() + ") in MSNSwitchboard.incommingMSGLoop()");
                     *          }
                     *          else
                     *          {
                     *              Console.WriteLine("Error sending outgoing MSG to gui plugin (null) in MSNSwitchboard.incommingMSGLoop()");
                     *          }
                     *      }
                     *  }
                     * }
                     **/
                    #endregion

                    #region actually send the message to socket IF message.getSendOrRecieve() == true
                    if (message.getSend())
                    {
                        if (message.getMessageType().Equals(MSNEnumerations.UserMessageType.outgoing_text_message))
                        {
                            sendMessage(new MSNMessage(new MSNUserTypingMessage(controller.Username, MSNEnumerations.UserMessageType.outgoing_typing_message).ToString()));
                        }
                        sendMessage(new MSNMessage(message.ToString()));
                    }
                    #endregion
                }
                catch (Exception)
                {
                    if (message != null)
                    {
                        Console.WriteLine("Error processing message in MSNSwitchboad.incommingMSGLoop(), message = " + message.ToString());
                    }
                    else
                    {
                        Console.WriteLine("Error processing message in MSNSwitchboad.incommingMSGLoop(), message = null");
                    }
                }
            }
        }
예제 #4
0
        private void incommingMSGLoop()
        {
            while (true)
            {
                MSNUserMessage message = null;

                try
                {
                    #region wait for a message to process
                    while (incommingMSGQueue.Count == 0)
                    {
                        Thread.Sleep(100);
                    }
                    #endregion

                    #region get message
                    message = incommingMSGQueue.Dequeue();

                    if (message == null)
                    {
                        continue;
                    }
                    #endregion

                    #region process message through plugins
                    if (message.ProcessByPlugins)
                    {
                        foreach (IMSNSwitchboardPlugin plugin in plugins)
                        {
                            try
                            {
                                plugin.processIngoingMessage(message);
                            }
                            catch (Exception err)
                            {
                                Console.WriteLine("IMSNSwitchboard plugin error: " + err.ToString());
                            }
                        }
                    }
                    #endregion

                    #region writing message to gui plugins IF message.getShowOrRecieve() == true
                    if (message.getDisplay() && MessageRecieved != null)
                    {
                        MessageRecieved(message);
                    }

                    /**
                     * if (message.getDisplay())
                     * {
                     *  for (int i = 0; i < windowPlugins.Count; i++)
                     *  {
                     *      MSNSwitchboardGUIPluginListener plugin = null;
                     *
                     *      try
                     *      {
                     *          plugin = (MSNSwitchboardGUIPluginListener)windowPlugins[i];
                     *          plugin.processIngoingMessage(message);
                     *      }
                     *      catch (Exception)
                     *      {
                     *          if (plugin != null)
                     *          {
                     *              Console.WriteLine("Error sending inbound MSG to gui plugin (" + plugin.getName() + ") in MSNSwitchboard.incommingMSGLoop()");
                     *          }
                     *          else
                     *          {
                     *              Console.WriteLine("Error sending inbound MSG to gui plugin (null) in MSNSwitchboard.incommingMSGLoop()");
                     *          }
                     *      }
                     *  }
                     * }
                     **/
                    #endregion
                }
                catch (Exception)
                {
                    if (message != null)
                    {
                        Console.WriteLine("Error processing message in MSNSwitchboad.incommingMSGLoop(), message = " + message.ToString());
                    }
                    else
                    {
                        Console.WriteLine("Error processing message in MSNSwitchboad.incommingMSGLoop(), message = null");
                    }
                }
            }
        }