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());
            }
示例#2
0
文件: TCP.cs 项目: javithalion/NCache
            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;

                }
            }