/// <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)); } }
/// <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)); } }
/// <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)); } }
/// <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)); } }
/// <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)); } }
/// <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)); } }
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)); } }
/// <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)); } }
/// <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(); } }
/// <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(); } }
/// <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")); } } }
/// <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); } } } }