Example #1
0
        /// <summary>
        /// OpenMinaSocket
        /// </summary>
        public void OpenMinaSocket()
        {
            if (Connected)
            {
                return;
            }
            try
            {
                Manager.InitializeClient();

                if (Manager.Connector == null)
                {
                    throw new Exception("This should not happen!");
                }

                Manager.Connector.ExceptionCaught += HandleException;
                Manager.Connector.SessionOpened   += HandeleSessionOpened;
                Manager.Connector.SessionClosed   += HandeleSessionClosed;
                Manager.Connector.SessionIdle     += HandleIdle;
                Manager.Connector.MessageReceived += HandleReceived;

                Manager.ServerIpAddress = _serverIpAddress;
                Manager.Port            = _port;
                Manager.ConnectToServer();
            }
            catch (Exception ex)
            {
                _logger.Error(String.Format("Exception in {0} {1}", LST.GetCurrentMethod(), ex.Message));
            }
        }
Example #2
0
        /// <summary>
        /// Send
        /// </summary>
        /// <param name="message"></param>
        public void Send(byte[] message)
        {
            try
            {
                lock (_lockObject)
                {
                    if (MultipleConnections)
                    {
                        _logger.Info(String.Format("MultipleConnections ON"));
                    }

                    _logger.Info(String.Format("Send data {0} Bytes", message.Length));
                    _logger.Trace(String.Format("Send data => {0} | {1} |", ByteArrayToHexString(message), ByteArrayToAsciiString(message)));
                    foreach (var s in Sessions)
                    {
                        s.Write(message);
                        _logger.Info(String.Format("Send to {0}", s.RemoteEndPoint));
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.Error(String.Format("Exception in {0} {1}", LST.GetCurrentMethod(), ex.Message));
            }
        }
Example #3
0
        /// <summary>
        /// Close
        /// </summary>
        public void Close()
        {
            try
            {
                StopReconnectTimer();

                if (Manager != null)
                {
                    Manager.Connector.ExceptionCaught -= HandleException;
                    Manager.Connector.SessionOpened   -= HandeleSessionOpened;
                    Manager.Connector.SessionClosed   -= HandeleSessionClosed;
                    Manager.Connector.SessionIdle     -= HandleIdle;
                    Manager.Connector.MessageReceived -= HandleReceived;

                    if (Manager.Session != null)
                    {
                        Manager.Session.Close(true);
                    }

                    Manager.Connector.Dispose();
                    Manager = null;
                }
            }
            catch (Exception ex)
            {
                _logger.Error(String.Format("Exception in {0} {1}", LST.GetCurrentMethod(), ex.Message));
            }
        }
Example #4
0
        /// <summary>
        /// StartMinaListener
        /// </summary>
        /// <param name="port"></param>
        public void StartMinaListener()
        {
            try
            {
                Manager.InitializeServer();

                if (Manager.Acceptor == null)
                {
                    throw new Exception("This should not happen!");
                }

                if (MultipleConnections)
                {
                    _logger.Info(String.Format("Start Listener MultipleConnections ON"));
                }
                else
                {
                    _logger.Info(String.Format("Start Listener MultipleConnections OFF"));
                }

                Manager.Acceptor.ExceptionCaught += HandleException;
                Manager.Acceptor.SessionOpened   += HandeleSessionOpened;
                Manager.Acceptor.SessionClosed   += HandeleSessionClosed;
                Manager.Acceptor.SessionIdle     += HandleIdle;
                Manager.Acceptor.MessageReceived += HandleReceived;

                Manager.Port = _port;
                Manager.StartServer();
            }
            catch (Exception ex)
            {
                _logger.Error(String.Format("Exception in {0} {1}", LST.GetCurrentMethod(), ex.Message));
            }
        }
Example #5
0
 /// <summary>
 /// Close
 /// </summary>
 public void Close()
 {
     try
     {
         Manager.Session.Close(true);
         Manager.Connector.Dispose();
     }
     catch (Exception ex)
     {
         _logger.Error(String.Format("Exception in {0} {1}", LST.GetCurrentMethod(), ex.Message));
     }
 }
Example #6
0
        /// <summary>
        /// Send
        /// </summary>
        /// <param name="message"></param>
        public void Send(byte[] message)
        {
            try
            {
                Manager.Send(message);

                _logger.Info(String.Format("Send data {0} Bytes", message.Length));
                _logger.Trace(String.Format("Send data => {0} | {1} |", ByteArrayToHexString(message), ByteArrayToAsciiString(message)));
            }
            catch (Exception ex)
            {
                _logger.Error(String.Format("Exception in {0} {1}", LST.GetCurrentMethod(), ex.Message));
            }
        }
Example #7
0
        public void Encode(IoSession session, byte[] message, IProtocolEncoderOutput output)
        {
            try
            {
                var      data = (byte[])message;
                IoBuffer buf  = IoBuffer.Allocate(data.Length);
                buf.AutoExpand = true; // Enable auto-expand for easier encoding

                buf.Put(data);
                buf.Flip();
                output.Write(buf);
            }
            catch (System.Exception ex)
            {
                _logger.Error(System.String.Format("Exception in {0} {1}", LST.GetCurrentMethod(), ex.Message));
            }
        }
Example #8
0
        /// <summary>
        /// Close
        /// </summary>
        public void Close()
        {
            try
            {
                lock (_lockObject)
                {
                    if (MultipleConnections)
                    {
                        _logger.Info(String.Format("MultipleConnections ON"));
                    }

                    for (int i = Sessions.Count - 1; i >= 0; i--)
                    {
                        _logger.Info(String.Format("Close Session {0}", Sessions[i].RemoteEndPoint));
                        Sessions[i].Close(true);
                    }

                    Manager.Acceptor.ExceptionCaught -= HandleException;
                    Manager.Acceptor.SessionOpened   -= HandeleSessionOpened;
                    Manager.Acceptor.SessionClosed   -= HandeleSessionClosed;
                    Manager.Acceptor.SessionIdle     -= HandleIdle;
                    Manager.Acceptor.MessageReceived -= HandleReceived;

                    if (Manager.Session != null)
                    {
                        _logger.Info(String.Format("Close Session {0}", Manager.Session.RemoteEndPoint));
                        Manager.Session.Close(true);
                        if (Manager.Connector != null)
                        {
                            Manager.Connector.Dispose();
                        }
                    }
                    if (Manager != null)
                    {
                        Manager.Acceptor.Dispose();
                    }

                    Manager = null;
                }
            }
            catch (Exception ex)
            {
                _logger.Error(String.Format("Exception in {0} {1}", LST.GetCurrentMethod(), ex.Message));
            }
        }
Example #9
0
        /// <summary>
        /// HandeleSessionClosed
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void HandeleSessionClosed(Object sender, IoSessionEventArgs e)
        {
            Connected = false;
            _logger.Info(String.Format("SessionClosed {0}", e.Session.RemoteEndPoint));
            _logger.Debug(String.Format("#1 {0} IsConnected={1} ThreadId={2} hashcode={3}", LST.GetCurrentMethod(), Connected, System.Threading.Thread.CurrentThread.ManagedThreadId, GetHashCode()));
            if (ConnectionStateChaneged != null)
            {
                ConnectionStateChaneged(Connected);
            }
            else
            {
                _logger.Error(String.Format("Call HandeleSessionOpened but ConnectionStateChaneged Event is null"));
            }

            Manager.Connector.ExceptionCaught -= HandleException;
            Manager.Connector.SessionOpened   -= HandeleSessionOpened;
            Manager.Connector.SessionClosed   -= HandeleSessionClosed;
            Manager.Connector.SessionIdle     -= HandleIdle;
            Manager.Connector.MessageReceived -= HandleReceived;

            Manager.Connector.Dispose();
            Manager = null;

            if (AutoConnections)
            {
                StartReconnectTimer();
            }
        }
Example #10
0
        /// <summary>
        /// HandeleSessionOpened
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void HandeleSessionOpened(Object sender, IoSessionEventArgs e)
        {
            Connected = true;

            _logger.Info(String.Format("SessionOpened {0}", e.Session.RemoteEndPoint));
            _logger.Debug(String.Format("#1 {0} IsConnected={1} ThreadId={2} hashcode={3}", LST.GetCurrentMethod(), Connected, System.Threading.Thread.CurrentThread.ManagedThreadId, GetHashCode()));
            if (ConnectionStateChaneged != null)
            {
                ConnectionStateChaneged(Connected);
            }
            else
            {
                _logger.Error(String.Format("Call HandeleSessionOpened but ConnectionStateChaneged Event is null"));
            }

            if (AutoConnections)
            {
                StopReconnectTimer();
            }
        }
Example #11
0
        /// <summary>
        /// HandeleSessionClosed
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void HandeleSessionClosed(Object sender, IoSessionEventArgs e)
        {
            Connected = false;
            lock (_lockObject)
            {
                if (MultipleConnections)
                {
                    _logger.Info(String.Format("MultipleConnections ON"));
                    _logger.Info(String.Format("SessionClosed {0}", e.Session.RemoteEndPoint));
                    _logger.Debug(String.Format("#1 {0} IsConnected={1} ThreadId={2} hashcode={3}", LST.GetCurrentMethod(), Connected, System.Threading.Thread.CurrentThread.ManagedThreadId, GetHashCode()));
                    Sessions.Remove(e.Session);
                    foreach (var s in Sessions)  // check all remaning Sessions
                    {
                        if (s.Connected)
                        {
                            Connected = true;
                        }
                    }
                }
                else
                {
                    Sessions.Remove(e.Session);
                    _logger.Info(String.Format("SessionClosed {0}", e.Session.RemoteEndPoint));
                    _logger.Debug(String.Format("#1 {0} IsConnected={1} ThreadId={2} hashcode={3}", LST.GetCurrentMethod(), Connected, System.Threading.Thread.CurrentThread.ManagedThreadId, GetHashCode()));
                }

                if (ConnectionStateChaneged != null)
                {
                    ConnectionStateChaneged(Connected);
                }
                else
                {
                    _logger.Error(String.Format("Call HandeleSessionOpened but ConnectionStateChaneged Event is null"));
                }
            }
        }
Example #12
0
 /// <summary>
 /// HandeleSessionOpened
 /// </summary>
 /// <param name="sender"></param>
 /// <param name="e"></param>
 private void HandeleSessionOpened(Object sender, IoSessionEventArgs e)
 {
     Connected = true;
     lock (_lockObject)
     {
         if (MultipleConnections)
         {
             Sessions.Add(e.Session);
             _logger.Info(String.Format("MultipleConnections ON"));
             _logger.Info(String.Format("SessionOpened {0}", e.Session.RemoteEndPoint));
             _logger.Debug(String.Format("#1 {0} IsConnected={1} ThreadId={2} hashcode={3}", LST.GetCurrentMethod(), Connected, System.Threading.Thread.CurrentThread.ManagedThreadId, GetHashCode()));
             if (ConnectionStateChaneged != null)
             {
                 ConnectionStateChaneged(Connected);
             }
             else
             {
                 _logger.Error(String.Format("Call HandeleSessionOpened but ConnectionStateChaneged Event is null"));
             }
         }
         else
         {
             if (Sessions.Count < 1)
             {
                 Sessions.Add(e.Session);
                 _logger.Info(String.Format("SessionOpened {0}", e.Session.RemoteEndPoint));
                 _logger.Debug(String.Format("#1 {0} IsConnected={1} ThreadId={2} hashcode={3}", LST.GetCurrentMethod(), Connected, System.Threading.Thread.CurrentThread.ManagedThreadId, GetHashCode()));
                 if (ConnectionStateChaneged != null)
                 {
                     ConnectionStateChaneged(Connected);
                 }
                 else
                 {
                     _logger.Error(String.Format("Call HandeleSessionOpened but ConnectionStateChaneged Event is null"));
                 }
             }
             else
             {
                 _logger.Error(String.Format("We allow only one connection in this case"));
                 e.Session.Close(true);
             }
         }
     }
 }