public TcpClient(SocketManager socketManager) { maxBufferSize = 1024; ConnectTimeout = 5f; this.socketManager = socketManager; this.hearBeat = new HearBeat(socketManager, this); ConnectSuccess += hearBeat.Start; ConnectAbort += hearBeat.Stop; MsgManager.Instance.Regist(MsgID.ConnectSuccess, (data) => ConnectSuccess?.Invoke()); MsgManager.Instance.Regist(MsgID.ConnectFailed, (data) => ConnectFailed?.Invoke()); MsgManager.Instance.Regist(MsgID.ConnectAbort, (data) => ConnectAbort?.Invoke()); }
public void ReceivedHeartBeat(Address sender, HearBeat hrtBeat) { Message rspMsg; switch (hrtBeat.Type) { case HearBeat.HEART_BEAT: if (_enclosingInstance.Stack.NCacheLog.IsInfoEnabled) _enclosingInstance.Stack.NCacheLog.Info("ConnectionKeepAlive.ReceivedHeartBeat", "received heartbeat from ->:" + sender.ToString()); lock (_idleConnections.SyncRoot) { _idleConnections.Remove(sender); } break; case HearBeat.SEND_HEART_BEAT: rspMsg = new Message(sender, null, new byte[0]); rspMsg.putHeader(HeaderType.KEEP_ALIVE, new HearBeat(HearBeat.HEART_BEAT)); if (_enclosingInstance.Stack.NCacheLog.IsInfoEnabled) _enclosingInstance.Stack.NCacheLog.Info("ConnectionKeepAlive.ReceivedHeartBeat", "seding heartbeat to ->:" + sender.ToString()); _enclosingInstance.sendUnicastMessage(rspMsg, false, rspMsg.Payload, Priority.Critical); break; case HearBeat.ARE_YOU_ALIVE: rspMsg = new Message(sender, null, new byte[0]); HearBeat rsphrtBeat = (_enclosingInstance.isClosing || _enclosingInstance._leaving) ? new HearBeat(HearBeat.I_AM_LEAVING) : new HearBeat(HearBeat.I_AM_NOT_DEAD); rsphrtBeat = _enclosingInstance.isStarting ? new HearBeat(HearBeat.I_AM_STARTING) : rsphrtBeat; rspMsg.putHeader(HeaderType.KEEP_ALIVE, rsphrtBeat); if (_enclosingInstance.Stack.NCacheLog.IsInfoEnabled) _enclosingInstance.Stack.NCacheLog.Info("ConnectionKeepAlive.ReceivedHeartBeat", "seding status" + rsphrtBeat + " to ->:" + sender.ToString()); _enclosingInstance.sendUnicastMessage(rspMsg, false, rspMsg.Payload, Priority.Critical); break; case HearBeat.I_AM_STARTING: case HearBeat.I_AM_LEAVING: case HearBeat.I_AM_NOT_DEAD: lock (_status_mutex) { if (_currentSuspect != null && _currentSuspect.Equals(sender)) { _statusReceived = hrtBeat; Monitor.Pulse(_status_mutex); } } break; } }