Ejemplo n.º 1
0
        public bool ReconnectPlc()
        {
            Stopwatch sw = new Stopwatch();

            sw.Start();
            while (true)
            {
                // 等待5s的重连
                if (sw.Elapsed > TimeSpan.FromSeconds(5))
                {
                    break;
                }
                int result = _s7Client.ConnectTo(PlcIPAddress, Rack, Slot);
                Thread.Sleep(50);
                if (result == 0)
                {
                    ReconnectEvent?.Invoke(this, null);
                    _isConnected = true;
                    break;
                }
                Thread.Sleep(800);
            }
            sw.Stop();
            if (_isConnected)
            {
                _hbTimer.Start();
            }
            return(_isConnected);
        }
Ejemplo n.º 2
0
 private void Callback_OnConnect(IAsyncResult result)
 {
     try
     {
         bool isReconnect = false;
         if (null != _socket)
         {
             isReconnect = true;
         }
         _socket = (Socket)result.AsyncState;
         _socket.EndConnect(result);
         _socket.ReceiveBufferSize = Gamnet.Buffer.BUFFER_SIZE;
         _socket.SendBufferSize    = Gamnet.Buffer.BUFFER_SIZE;
         if (true == isReconnect)
         {
             ReconnectEvent evt = new ReconnectEvent();
             evt.session = this;
             eventQueue.Enqueue(evt);
         }
         else
         {
             ConnectEvent evt = new ConnectEvent();
             evt.session = this;
             eventQueue.Enqueue(evt);
         }
         Receive();
     }
     catch (System.Exception error)
     {
         Error(error);
         Close();
     }
 }
Ejemplo n.º 3
0
        private void InitPlcConnect(object state)
        {
            CancellationToken token = (CancellationToken)state;
            int result = _s7Client.ConnectTo(PlcIPAddress, Rack, Slot);

            Thread.Sleep(10); // 很小的复位时间
            while (true)
            {
                if (token.IsCancellationRequested)
                {
                    break;
                }
                if (result == 0 /* && _s7Client.Connected()*/)
                {
                    _initEvent.Set();
                    ReconnectEvent?.Invoke(this, null);
                    _isConnected    = true;
                    _initPlcConnect = true;
                    break;
                }
                Thread.Sleep(2000); // 等待2s延时连接
                result = _s7Client.Connect();
                Thread.Sleep(10);
            }
        }
            public async Task ShouldReportAReconnectMetric(
                string sessionId,
                [Frozen, Substitute] IMetricReporter reporter,
                [Target] ReconnectEventController controller
                )
            {
                var cancellationToken = new CancellationToken(false);
                var @event            = new ReconnectEvent {
                };

                await controller.Handle(@event, cancellationToken);

                await reporter.Received().Report(Is(default(ReconnectEventMetric)), Is(cancellationToken));
            }
            public async Task ShouldRestartTheGatewayService(
                string sessionId,
                [Frozen, Substitute] IGatewayService gateway,
                [Target] ReconnectEventController controller
                )
            {
                var cancellationToken = new CancellationToken(false);
                var @event            = new ReconnectEvent {
                };

                await controller.Handle(@event, cancellationToken);

                await gateway.Received().Restart();
            }
            public async Task ShouldThrowIfCanceled(
                string sessionId,
                [Frozen, Substitute] IGatewayService gateway,
                [Target] ReconnectEventController controller
                )
            {
                var cancellationToken = new CancellationToken(true);
                var @event            = new ReconnectEvent {
                };

                Func <Task> func = () => controller.Handle(@event, cancellationToken);

                await func.Should().ThrowAsync <OperationCanceledException>();

                await gateway.DidNotReceive().Restart();
            }
Ejemplo n.º 7
0
        void Recv_Reconnect_Ans(System.IO.MemoryStream buffer)
        {
            string            json = System.Text.Encoding.UTF8.GetString(buffer.GetBuffer(), (int)buffer.Position, (int)(buffer.Length - buffer.Position));
            Msg_Reconnect_Ans ans  = JsonUtility.FromJson <Msg_Reconnect_Ans>(json);

            if (0 != ans.error_code)
            {
                Error(new Gamnet.Exception(ans.error_code, "fail to reconnect"));
                return;
            }
            _session_key   = ans.session_key;
            _session_token = ans.session_token;
            //RemoveSentPacket(ans.msg_seq);
            ReconnectEvent evt = new ReconnectEvent(this);

            _event_queue.Add(evt);             // already locked
        }
Ejemplo n.º 8
0
 private void Callback_OnReconnect(IAsyncResult result)
 {
     try
     {
         _socket = (Socket)result.AsyncState;
         _socket.EndConnect(result);
         _socket.ReceiveBufferSize = Gamnet.Buffer.BUFFER_SIZE;
         _socket.SendBufferSize    = Gamnet.Buffer.BUFFER_SIZE;
         ReconnectEvent evt = new ReconnectEvent(this);
         eventQueue.Enqueue(evt);
         Receive();
     }
     catch (System.Exception error)
     {
         Error(error);
         Close();
     }
 }
Ejemplo n.º 9
0
            public override void OnRecvMsg(System.IO.MemoryStream buffer)
            {
                string            json = System.Text.Encoding.UTF8.GetString(buffer.GetBuffer(), (int)buffer.Position, (int)buffer.Length);
                Msg_Reconnect_Ans ans  = JsonUtility.FromJson <Msg_Reconnect_Ans>(json);

                if (0 != ans.error_code)
                {
                    Debug.LogError("[Session.ReconnectHandler.OnRecvMsg] reconnect fail(error_code:" + ans.error_code + ")");
                    session.Error(new Gamnet.Exception(ErrorCode.ReconnectFailError, "reconnect fail(error_code:" + ans.error_code + ")"));
                    return;
                }
                Debug.Log("[Session.ReconnectHandler.OnRecvMsg] recv reconnect ans(session_key:" + session._session_key + ", session_token:" + session._session_token + ", disconnect_state:" + session._disconnectState.ToString() + ")");
                //session._session_key = ans.session_key;
                //session._session_token = ans.session_token;

                SessionEvent evt = null;

                switch (session._disconnectState)
                {
                case DisconnectState.Pause:
                    evt = new ResumeEvent(session);
                    break;

                case DisconnectState.Handover:
                    evt = new ReconnectEvent(session);
                    break;

                case DisconnectState.Closed:
                    break;
                }

                if (null != evt)
                {
                    session._event_queue.Add(evt);                     // already locked
                }
                session._disconnectState = DisconnectState.Invalid;
            }
Ejemplo n.º 10
0
 protected virtual void OnReconnected(ReconnectEvent msg)
 {
     OnStarted(new StartEvent(this.SourceUri));
 }
Ejemplo n.º 11
0
 protected virtual void OnReconnected(ReconnectEvent msg)
 {
     OnStarted(new StartEvent(this.SourceUri));
 }