/// <summary>
            /// 初始化网络频道基类的新实例。
            /// </summary>
            /// <param name="name">网络频道名称。</param>
            /// <param name="networkChannelHelper">网络频道辅助器。</param>
            public NetworkChannelBase(string name, INetworkChannelHelper networkChannelHelper)
            {
                m_Name                 = name ?? string.Empty;
                m_SendPacketPool       = new Queue <Packet>();
                m_ReceivePacketPool    = new EventPool <Packet>(EventPoolMode.Default);
                m_NetworkChannelHelper = networkChannelHelper;
                m_AddressFamily        = AddressFamily.Unknown;
                m_ResetHeartBeatElapseSecondsWhenReceivePacket = false;
                m_HeartBeatInterval   = DefaultHeartBeatInterval;
                m_Socket              = null;
                m_SendState           = new SendState();
                m_ReceiveState        = new ReceiveState();
                m_HeartBeatState      = new HeartBeatState();
                m_SentPacketCount     = 0;
                m_ReceivedPacketCount = 0;
                m_Active              = false;
                m_Disposed            = false;

                NetworkChannelConnected     = null;
                NetworkChannelClosed        = null;
                NetworkChannelMissHeartBeat = null;
                NetworkChannelError         = null;
                NetworkChannelCustomError   = null;

                networkChannelHelper.Initialize(this);
            }
Example #2
0
 private void Unconfigured()
 {
     Receive <ConfigureUpdate>(msg =>
     {
         Context.LogMessageDebug(msg);
         _state = new HeartBeatState(msg.UpdatePeriod, msg.FactoryUpdatePeriod, DateTimeProvider.Now(), ImmutableDictionary <UpdateType, ImmutableHashSet <IActorRef> > .Empty);
         Become(Configured);
     });
 }
Example #3
0
 /// <summary>
 /// 初始化网络频道的新实例。
 /// </summary>
 /// <param name="name">网络频道名称。</param>
 /// <param name="networkChannelHelper">网络频道辅助器。</param>
 public NetworkChannel(string name)
 {
     m_Name              = name ?? string.Empty;
     m_SendPacketPool    = new Queue <Protocol>();
     m_ReceivePacketPool = new Queue <Protocol>();
     m_NetworkType       = NetworkType.Unknown;
     m_ResetHeartBeatElapseSecondsWhenReceivePacket = false;
     m_HeartBeatInterval   = DefaultHeartBeatInterval;
     m_Socket              = null;
     m_Helper              = new NetworkChannelHelper();
     m_SendState           = new SendState();
     m_ReceiveState        = new ReceiveState();
     m_HeartBeatState      = new HeartBeatState();
     m_SentPacketCount     = 0;
     m_ReceivedPacketCount = 0;
     m_Active              = false;
     m_Disposed            = false;
 }
            /// <summary>
            /// 初始化网络频道的新实例。
            /// </summary>
            /// <param name="name">网络频道名称。</param>
            /// <param name="networkHelper">网络辅助器。</param>
            public NetworkChannel(string name, INetworkHelper networkHelper)
            {
                m_Name            = name ?? string.Empty;
                m_NetworkHelper   = networkHelper;
                m_NetworkType     = NetworkType.Unknown;
                m_MaxPacketLength = DefaultMaxPacketLength;
                m_ResetHeartBeatElapseSecondsWhenReceivePacket = false;
                m_HeartBeatInterval = DefaultHeartBeatInterval;
                m_Socket            = null;
                m_ReceiveState      = null;
                m_HeartBeatState    = new HeartBeatState();
                m_Active            = false;
                m_Disposed          = false;

                NetworkChannelConnected     = null;
                NetworkChannelClosed        = null;
                NetworkChannelSended        = null;
                NetworkChannelReceived      = null;
                NetworkChannelMissHeartBeat = null;
                NetworkChannelError         = null;
                NetworkChannelCustomError   = null;
            }
Example #5
0
        private void UpdateFactories(DateTime now)
        {
            var diff = now - _state.LastFactoryUpdate;

            if (diff > _state.FactoryUpdatePeriod)
            {
                int remainder;
                var noPeriods = Math.DivRem((int)diff.TotalMilliseconds, (int)_state.FactoryUpdatePeriod.TotalMilliseconds, out remainder);

                _state = new HeartBeatState(_state.UpdatePeriod, _state.FactoryUpdatePeriod, now - TimeSpan.FromMilliseconds(remainder), _state.Registrees);

                if (_state.Registrees.ContainsKey(UpdateType.Factory))
                {
                    foreach (var actorRef in _state.Registrees[UpdateType.Factory])
                    {
                        for (int i = 0; i < noPeriods; i++)
                        {
                            actorRef.Tell(new FactoryTick());
                        }
                    }
                }
            }
        }
Example #6
0
 public ConfigurationResult(HeartBeatState state)
 {
     State = state;
 }