コード例 #1
0
 private void ThreadTask()
 {
     try
     {
         while (!m_Terminate)
         {
             Socket sckt = null;
             try
             {
                 sckt = m_IncomingSocket.Accept();
             }
             catch (SocketException e)
             {
                 Trace(e);
                 sckt = null;
             }
             if (sckt != null)
             {
                 if (MaxConn == 0 ||
                     m_ConnList.Count < MaxConn)
                 {
                     var scktConn = new SocketConn(sckt, false);
                     scktConn.OnEventTrace += ScktConn_OnEventTrace;
                     scktConn.OnDisconnect += new SocketConn.DlgDisconnect(SocketConn_Disconnect);
                     scktConn.OnSendError  += new SocketConn.DlgSendError(SocketConn_SendError);
                     if (!m_ConnList.TryAdd(scktConn, scktConn))
                     {
                         Trace(EventType.Exception,
                               "Couldn't add connection to socket server connection list. Refusing connection. ConnID: {0}",
                               scktConn);
                         sckt.Close();
                     }
                     OnConnect?.Invoke(scktConn);
                     if (m_StartScktConnReadThread)
                     {
                         scktConn.OnReceiveData  += new SocketConn.DlgReceiveData(SocketConn_ReceiveData);
                         scktConn.OnReceiveError += new SocketConn.DlgReceiveError(SocketConn_ReceiveError);
                         scktConn.StartReadThread();
                     }
                     if (m_AcceptDelay)
                     {
                         m_AcceptDelayWaitHandle.WaitOne(ACCEPT_DELAY, false);
                     }
                 }
                 else
                 {
                     sckt.Close();
                     Trace(
                         EventType.Warning,
                         "Socket connection refused. Reached connection limit of {0} connections. {1}/{2}",
                         MaxConn,
                         sckt.LocalEndPoint,
                         sckt.RemoteEndPoint);
                 }
             }
         }
     }
     catch (Exception exc) { Trace(exc); }
 }
コード例 #2
0
 private void SocketConn_Disconnect(SocketConn scktConn)
 {
     if (!m_Terminate)
     {
         TryToReconnect();
         OnDisconnect?.Invoke(scktConn);
     }
 }
コード例 #3
0
 private void SocketServer_OnDisconnect(SocketConn scktConn)
 {
     lock (m_CIPConnList)
         if (m_CIPConnList.ContainsKey(scktConn))
         {
             m_CIPConnList.Remove(scktConn);
         }
     OnConnStatusChanged?.Invoke(ConnType.Receive, false, scktConn.ConnID);
 }
コード例 #4
0
 public CIPConn(SocketConn scktConn)
 {
     LOG_TAG                   += string.Format(" ({0})", scktConn.RemoteEndPoint);
     m_ActivityTimeRef          = DateTime.Now;
     m_ScktConn                 = scktConn;
     m_ScktConn.OnDisconnect   += ScktConn_OnDisconnect;
     m_ScktConn.OnReceiveData  += ScktConn_OnReceiveData;
     m_ScktConn.OnReceiveError += ScktConn_OnReceiveError;
     m_ScktConn.OnSendError    += ScktConn_OnSendError;
 }
コード例 #5
0
 private void ScktConn_OnReceiveData(SocketConn scktConn, byte[] data)
 {
     try
     {
         ReceiveBytes(data);
     }
     catch (Exception e)
     {
         Trace(e);
     }
 }
コード例 #6
0
 private void SocketServer_OnConnect(SocketConn scktConn)
 {
     lock (m_CIPConnList)
     {
         CIPConn cipConn = new CIPConn(scktConn);
         cipConn.OnEventTrace  += CIPConn_OnEventTrace;
         cipConn.OnReceiveData += OnConnRecReceivedDataMsg;
         cipConn.Open();
         m_CIPConnList.Add(scktConn, cipConn);
     }
     OnConnStatusChanged?.Invoke(ConnType.Receive, true, scktConn.ConnID);
 }
コード例 #7
0
 private void ScktConn_OnDisconnect(SocketConn scktConn)
 {
     try
     {
         Trace(EventType.Info, string.Format("{0} - Connection is closed: {1}", LOG_TAG, scktConn.RemoteEndPoint));
         Close();
     }
     catch (Exception e)
     {
         Trace(e);
     }
 }
コード例 #8
0
 public void TryToReconnect()
 {
     try
     {
         m_SocketConn?.Close();
     }
     catch (Exception exc)
     {
         Trace(exc);
     }
     finally
     {
         m_SocketConn = null;
     }
 }
コード例 #9
0
 public void CloseConnection(SocketConn scktConn)
 {
     scktConn.Close();
     if (m_ConnList.TryRemove(scktConn, out SocketConn removed))
     {
         Trace(EventType.Data,
               "Removed connection {0} from the socket server connection list",
               removed);
     }
     else
     {
         Trace(EventType.Exception,
               "Removing connection from the socket server connection list: {0}",
               scktConn);
     }
 }
コード例 #10
0
        private void SocketConn_Disconnect(SocketConn scktConn)
        {
            if (m_ConnList.TryRemove(scktConn, out SocketConn removed))
            {
                Trace(EventType.Data,
                      "Removed connection {0} from the socket server connection list by disconnection event",
                      removed);
            }
            else
            {
                Trace(EventType.Exception,
                      "Removing connection {0} from the socket server connection list by disconnection event",
                      scktConn);
            }

            OnDisconnect?.Invoke(scktConn);
        }
コード例 #11
0
 private void ThreadTask()
 {
     try
     {
         while (!m_Terminate)
         {
             if (m_SocketConn == null || !m_SocketConn.Connected)
             {
                 var socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                 try
                 {
                     socket.Connect(m_RemoteAddress, m_RemotePort);
                     m_SocketConn = new SocketConn(socket, false);
                     m_SocketConn.OnEventTrace += ScktConn_OnEventTrace;
                     m_SocketConn.OnDisconnect += new SocketConn.DlgDisconnect(SocketConn_Disconnect);
                     m_SocketConn.OnSendError  += new SocketConn.DlgSendError(SocketConn_SendError);
                     if (m_StartScktConnReadThread)
                     {
                         m_SocketConn.OnReceiveData  += new SocketConn.DlgReceiveData(SocketConn_ReceiveData);
                         m_SocketConn.OnReceiveError += new SocketConn.DlgReceiveError(SocketConn_ReceiveError);
                         m_SocketConn.StartReadThread();
                     }
                     OnConnect?.Invoke(m_SocketConn);
                 }
                 catch (Exception e)
                 {
                     Trace(EventType.Error,
                           "Exception connecting the socket. Remote endpoint: {0}",
                           RemoteEndPoint);
                     OnConnectError?.Invoke(e);
                     TryToReconnect();
                 }
             }
             m_ReconnectSignal.WaitOne(RETRY_CONNECT);
         }
     }
     catch (Exception exc)
     {
         Trace(exc);
     }
 }
コード例 #12
0
 private void SocketClient_OnDisconnect(SocketConn scktConn)
 {
     m_ClientConnStates = ClientConnStates.Disconnected;
     Trace(EventType.Info, string.Format("{0} - Connection is closed: {1}", LOG_TAG, scktConn.RemoteEndPoint));
     OnConnStatusChanged?.Invoke(ConnType.Send, false, scktConn.ConnID);
 }
コード例 #13
0
 private void SocketClient_OnConnect(SocketConn scktConn)
 {
     m_ClientConnStates = ClientConnStates.SendListServices;
     Trace(EventType.Info, string.Format("{0} - Connection established: {1}", LOG_TAG, scktConn.RemoteEndPoint));
     OnConnStatusChanged?.Invoke(ConnType.Send, true, scktConn.ConnID);
 }
コード例 #14
0
 private void SocketConn_SendError(SocketConn scktConn, Exception scktExp)
 {
     OnSendError?.Invoke(scktExp);
 }
コード例 #15
0
 private void SocketConn_ReceiveError(SocketConn scktConn, Exception scktExp)
 {
     OnReceiveError?.Invoke(scktExp);
 }
コード例 #16
0
 private void SocketConn_ReceiveData(SocketConn scktConn, byte[] data)
 {
     OnReceiveData?.Invoke(data);
 }
コード例 #17
0
 public bool SendData(SocketConn scktConn, byte[] data)
 {
     return(scktConn.SendData(data));
 }
コード例 #18
0
 private void ScktConn_OnSendError(SocketConn scktConn, Exception scktExp)
 {
     Trace(EventType.Error, string.Format("{0} - Send socket error {1}", LOG_TAG, scktExp.Message));
 }