Esempio n. 1
0
        protected void WaitForData()
        {
            listenerState = ListenerStates.Running;
            //TCPReceiver tcpReceiver = new TCPReceiver(receiveBufferSize);
            //tcpClientSocket.BeginReceive(tcpReceiver.ReceiveBuffer, 0, receiveBufferSize, SocketFlags.None, new AsyncCallback(OnReceiveDataFromServer), tcpReceiver);

            TCPReceiver tcpReceiver = new TCPReceiver(receiveBufferSize);

            tcpReceiver.WaitHandle = new AutoResetEvent(true);
            do
            {
                try
                {
                    //LogManager.LogStatus("Waiting for new requests");
                    //Console.Write(".");
                    tcpClientSocket.BeginReceive(tcpReceiver.ReceiveBuffer, 0, receiveBufferSize, SocketFlags.None, new AsyncCallback(OnReceiveDataFromServer), tcpReceiver);
                    tcpReceiver.WaitHandle.Reset();
                    tcpReceiver.WaitHandle.WaitOne(this.receiveTimeout);
                }
                catch (USSDTcpReceiveTimeoutException) { }
                catch (Exception ex)
                {
                    LogManager.LogError(ex);
                }
            }while (listenerState == ListenerStates.Running);
        }
Esempio n. 2
0
        public virtual void Stop()
        {
            listenerState = ListenerStates.Stopping;

            if (pingThread != null)
            {
                if (pingThreadHandle != null)
                {
                    pingThreadHandle.Set();
                }
                try
                {
                    pingThread.Join(5000);
                }
                catch (Exception)
                {
                }
                finally
                {
                    pingThread = null;
                }
            }

            if (tcpClientSocket != null)
            {
                tcpClientSocket.Close();
            }
            tcpClientSocket = null;

            connectWaitEvent.Set();
            listenerState = ListenerStates.Stopped;
            LogManager.LogStatus("{0} stopped", name);
        }
Esempio n. 3
0
 public void Stop()
 {
     listenerState = ListenerStates.Stopping;
     httpListenerWaitHandle.Set();
     httpListener.Stop();
     listenerState = ListenerStates.Stopped;
 }
Esempio n. 4
0
        /// <summary>
        /// Resume a paused listener.
        /// </summary>
        public void Resume()
        {
            // We can only resume the listener if they are paused!
            if (Status != ListenerStates.PAUSED)
            {
                throw new ListenerStateChangeException();
            }

            Status     = ListenerStates.ACTIVE;
            StatusInfo = "";
        }
Esempio n. 5
0
        /// <summary>
        /// Pause the listener
        /// </summary>
        public void Pause(DateTime startDate, DateTime?endDate = null)
        {
            // We can only pause the listener if they are not deleted!
            if (Status == ListenerStates.DELETED)
            {
                throw new ListenerStateChangeException();
            }
            Status = ListenerStates.PAUSED;

            string myDateStr = "";

            if (endDate == null)
            {
                myDateStr = Listener.NEVER_END_PAUSE_STRING;
            }
            else
            {
                myDateStr = endDate.Value.ToNiceStr();
            }

            StatusInfo = startDate.ToNiceStr() + "," + myDateStr;
        }
Esempio n. 6
0
        protected void ConnectToServer(Boolean isReconnect)
        {
            if (!isReconnect)
            {
                LogManager.LogStatus("{0} starting", name);
            }
            if (tcpClientSocket != null)
            {
                if (tcpClientSocket.Connected)
                {
                    return;
                }

                try
                {
                    tcpClientSocket.Close();
                }
                catch (Exception)
                {
                }
                finally
                {
                    tcpClientSocket = null;
                }
            }
            if (isReconnect && AutoReconnectWhenConnectionIsLost)
            {
                LogManager.LogStatus("Connection lost to server {0}. Reconnecting", RemoteIPEndPoint.ToString());
            }

            if ((!isReconnect || (isReconnect && AutoReconnectWhenConnectionIsLost)) && listenerState != ListenerStates.Stopped && listenerState != ListenerStates.Stopping)
            {
                listenerState            = ListenerStates.Connecting;
                tcpClientSocket          = new Socket(LocalIPEndPoint.AddressFamily, SocketType.Stream, ProtocolType.Tcp);
                tcpClientSocket.Blocking = false;
                tcpClientSocket.BeginConnect(RemoteIPEndPoint, new AsyncCallback(OnConnectedToServer), tcpClientSocket);
            }
        }
Esempio n. 7
0
        protected void OnReceiveDataFromServer(IAsyncResult asyncResult)
        {
            if (listenerState != ListenerStates.Running)
            {
                return;
            }

            TCPReceiver tcpReceiver = asyncResult.AsyncState as TCPReceiver;
            SocketError errorCode;
            int         bytesReceived = tcpClientSocket.EndReceive(asyncResult, out errorCode);

            byte[] tmp = new byte[bytesReceived];
            tmp = tcpReceiver.ReceiveBuffer;
            string payload = Encoding.ASCII.GetString(tmp);

            //LogManager.LogStatus(" ... " + payload);

            if (!tcpClientSocket.Connected)
            {
                listenerState = ListenerStates.Stopped;
                Boolean autoReconnectWhenConnectionIsLost = AutoReconnectWhenConnectionIsLost;
                OnServerDisconnected(tcpClientSocket, ref autoReconnectWhenConnectionIsLost);
                AutoReconnectWhenConnectionIsLost = autoReconnectWhenConnectionIsLost;
                ConnectToServer(true);
                return;
            }

            if (bytesReceived != 0)
            {
                byte[] dataChunk    = new byte[] { };
                byte[] dataOverflow = new byte[] { };

                tcpReceiver.AddReceiveData(tmp, bytesReceived);

                string recev = Encoding.ASCII.GetString(tcpReceiver.ReceiveData);

                while (tcpReceiver.ReceiveData.Contains((byte)255))
                {
                    for (int x = 0; x < tcpReceiver.ReceiveData.Length; x++)
                    {
                        if (tcpReceiver.ReceiveData[x] == (byte)255)
                        {
                            dataChunk = new byte[x];
                            Buffer.BlockCopy(tcpReceiver.ReceiveData, 0, dataChunk, 0, dataChunk.Length);
                            dataOverflow = new byte[tcpReceiver.ReceiveData.Length - dataChunk.Length - 1];
                            Buffer.BlockCopy(tcpReceiver.ReceiveData, x + 1, dataOverflow, 0, dataOverflow.Length);

                            tcpReceiver.ReceiveData = dataOverflow;

                            if (dataChunk.Length > 0)
                            {
                                if (dataChunk[0] == 60)
                                {
                                    string tempDAta = Encoding.ASCII.GetString(dataChunk);
                                    OnDataReceived(dataChunk);
                                }
                                else
                                {
                                    Console.WriteLine("*** PROBLEM WITH PDU ****");
                                }
                            }

                            break;
                        }
                    }
                }


                //tcpReceiver.AddReceiveData(tcpReceivere.Buffer, e.BytesTransferred);
                //if (tcpReceiver.ReceiveData.Contains((byte)255))
                //{
                //// remove the terminator
                //int terminatorIndex = 0;
                //Byte[] dataChunk = new Byte[] { };
                //Byte[] dataOverflow = new Byte[] { };
                //Boolean completePacket = false;
                //while (terminatorIndex <= tcpReceiver.ReceiveData.Length)
                //{

                //    if (tcpReceiver.ReceiveData[terminatorIndex].Equals(this.packetTerminator))
                //    {
                //        completePacket = true;

                //        Byte[] copyBuffer = new Byte[tcpReceiver.ReceiveData.Length - dataChunk.Length-1];
                //        Buffer.BlockCopy(tcpReceiver.ReceiveData, terminatorIndex, copyBuffer, 0, tcpReceiver.ReceiveData.Length - dataChunk.Length-1);
                //        dataOverflow = copyBuffer;
                //        break;
                //    }
                //    else
                //    {
                //        Byte[] copyBuffer = new Byte[dataChunk.Length + 1];
                //        Buffer.BlockCopy(tcpReceiver.ReceiveData, 0, copyBuffer, 0, copyBuffer.Length);
                //        dataChunk = copyBuffer;

                //        copyBuffer = new Byte[tcpReceiver.ReceiveData.Length - dataChunk.Length];
                //        Buffer.BlockCopy(tcpReceiver.ReceiveData, terminatorIndex, copyBuffer, 0, tcpReceiver.ReceiveData.Length - dataChunk.Length);
                //        dataOverflow = copyBuffer;
                //    }

                //    terminatorIndex++;
                //}

                //if (completePacket)
                //{
                //    Byte[] copyBuffer = new Byte[Math.Max(tcpReceiver.ReceiveData.Length - dataChunk.Length, 0)];
                //    if (copyBuffer.Length > 0)
                //        Buffer.BlockCopy(tcpReceiver.ReceiveData, terminatorIndex, copyBuffer, 0, Math.Max(tcpReceiver.ReceiveData.Length - dataChunk.Length, 0));

                //    OnDataReceived(dataChunk);

                //    tcpReceiver.ReceiveData = copyBuffer;
                //    tcpReceiver.ReceiveData = dataOverflow.Where(b => b != (byte)255).ToArray();
                //}
                //// Remove thye terminator
                //tcpReceiver.ReceiveData = tcpReceiver.ReceiveData.Where(b => b != (byte)255).ToArray();
                ////OnDataReceived(tcpReceiver.ReceiveData);
                ////tcpReceiver.Clear();

                if (tcpReceiver.WaitHandle != null)
                {
                    tcpReceiver.WaitHandle.Set();
                }
                //}
            }

            //if (listenerState == ListenerStates.Running)
            //{
            //    if (listenerState != ListenerStates.Running) return;

            //    if (tcpReceiver.ReceiveData.Length != 0 && tcpReceiver.ReceiveBuffer.Contains(this.packetTerminator))
            //        OnDataReceived(tcpReceiver.ReceiveData);
            //    tcpClientSocket.BeginReceive(tcpReceiver.ReceiveBuffer, 0, receiveBufferSize, SocketFlags.None, new AsyncCallback(OnReceiveDataFromServer), tcpReceiver);
            //}
        }
Esempio n. 8
0
        protected void OnConnectedToServer(IAsyncResult asyncResult)
        {
            if (tcpClientSocket == null)
            {
                return;
            }
            try
            {
                tcpClientSocket.EndConnect(asyncResult);
                LogManager.LogStatus("{0} connected to {1}{2} ", name, address, (port == null ? String.Empty : ":" + port.Value.ToString()));
                if (tcpClientSocket.Connected)
                {
                    listenerState = ListenerStates.Running;
                    if (listenerState == ListenerStates.Running)
                    {
                        OnConnectedToServer(tcpClientSocket);
                    }
                }
                else
                {
                    ConnectToServer(true);
                }
            }
            catch (SocketException se)
            {
                if (se.SocketErrorCode == SocketError.TimedOut && (listenerState != ListenerStates.Stopping || listenerState != ListenerStates.Stopped))
                {
                    int retryInterval = ConfigurationAppSettingsWrapper <int> .GetValue("Tcp Connection retry interval");

                    LogManager.LogError("Timed out connecting to {0}. Retrying", RemoteIPEndPoint.ToString());
                    connectWaitEvent.Reset();
                    connectWaitEvent.WaitOne(new TimeSpan(0, 0, 0, 0, retryInterval));
                    try
                    {
                        if (tcpClientSocket != null)
                        {
                            tcpClientSocket.BeginConnect(RemoteIPEndPoint, new AsyncCallback(OnConnectedToServer), tcpClientSocket);
                        }
                    }
                    catch (Exception)
                    {
                        if (listenerState != ListenerStates.Stopping || listenerState != ListenerStates.Stopped)
                        {
                            throw;
                        }
                    }
                }
                else if (se.SocketErrorCode == SocketError.ConnectionRefused && (listenerState != ListenerStates.Stopping || listenerState != ListenerStates.Stopped))
                {
                    int retryInterval = ConfigurationAppSettingsWrapper <int> .GetValue("Tcp Connection retry interval");

                    LogManager.LogError("Unable to connect to {0}. Retrying", RemoteIPEndPoint.ToString());
                    connectWaitEvent.Reset();
                    connectWaitEvent.WaitOne(new TimeSpan(0, 0, 0, 0, retryInterval));
                    try
                    {
                        if (tcpClientSocket != null)
                        {
                            tcpClientSocket.BeginConnect(RemoteIPEndPoint, new AsyncCallback(OnConnectedToServer), tcpClientSocket);
                        }
                    }
                    catch (Exception)
                    {
                        if (listenerState != ListenerStates.Stopping || listenerState != ListenerStates.Stopped)
                        {
                            throw;
                        }
                    }
                }
                else
                {
                    LogManager.LogError(se);
                }
            }
        }
Esempio n. 9
0
 /// <summary>
 /// Get listeners of a status
 /// </summary>
 /// <param name="status"></param>
 /// <returns></returns>
 public List <Listener> GetListenersByStatus(ListenerStates status)
 {
     return(repoLayer.GetListeners(connection).Where(x => x.Status.Equals(status)).ToList());
 }