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); }
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(); } }
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(); }
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 }
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(); } }
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; }
protected virtual void OnReconnected(ReconnectEvent msg) { OnStarted(new StartEvent(this.SourceUri)); }
protected virtual void OnReconnected(ReconnectEvent msg) { OnStarted(new StartEvent(this.SourceUri)); }