コード例 #1
0
        public async Task Will_keep_pinging(int randomResult)
        {
            ISession session1 = CreateSession();
            ISession session2 = CreateUnresponsiveSession();

            NetworkConfig networkConfig = new NetworkConfig();

            networkConfig.P2PPingInterval = 50;
            TestRandom     testRandom     = new TestRandom((i) => randomResult);
            SessionMonitor sessionMonitor = new SessionMonitor(networkConfig, LimboLogs.Instance);

            sessionMonitor.AddSession(session1);
            sessionMonitor.AddSession(session2);
            sessionMonitor.Start();
            await Task.Delay(300);

            sessionMonitor.Stop();

            await _pingSender.Received().SendPing();

            await _noPong.Received().SendPing();

            Assert.AreEqual(SessionState.Initialized, session1.State);
            Assert.AreEqual(randomResult == 0? SessionState.Disconnected : SessionState.Initialized, session2.State);
        }
コード例 #2
0
        public void Will_unregister_on_disconnect()
        {
            ISession       session        = CreateSession();
            SessionMonitor sessionMonitor = new SessionMonitor(new NetworkConfig(), LimboLogs.Instance);

            sessionMonitor.AddSession(session);
            session.MarkDisconnected(DisconnectReason.Other, DisconnectType.Remote, "test");
        }
コード例 #3
0
        private async Task InitPeer()
        {
            /* rlpx */
            var eciesCipher = new EciesCipher(_cryptoRandom);
            var eip8Pad     = new Eip8MessagePad(_cryptoRandom);

            _messageSerializationService.Register(new AuthEip8MessageSerializer(eip8Pad));
            _messageSerializationService.Register(new AckEip8MessageSerializer(eip8Pad));
            var encryptionHandshakeServiceA = new EncryptionHandshakeService(_messageSerializationService, eciesCipher,
                                                                             _cryptoRandom, new Signer(), _nodeKey, _logManager);

            /* p2p */
            _messageSerializationService.Register(new HelloMessageSerializer());
            _messageSerializationService.Register(new DisconnectMessageSerializer());
            _messageSerializationService.Register(new PingMessageSerializer());
            _messageSerializationService.Register(new PongMessageSerializer());

            /* eth62 */
            _messageSerializationService.Register(new StatusMessageSerializer());
            _messageSerializationService.Register(new TransactionsMessageSerializer());
            _messageSerializationService.Register(new GetBlockHeadersMessageSerializer());
            _messageSerializationService.Register(new NewBlockHashesMessageSerializer());
            _messageSerializationService.Register(new GetBlockBodiesMessageSerializer());
            _messageSerializationService.Register(new BlockHeadersMessageSerializer());
            _messageSerializationService.Register(new BlockBodiesMessageSerializer());
            _messageSerializationService.Register(new NewBlockMessageSerializer());

            /* eth63 */
            _messageSerializationService.Register(new GetNodeDataMessageSerializer());
            _messageSerializationService.Register(new NodeDataMessageSerializer());
            _messageSerializationService.Register(new GetReceiptsMessageSerializer());
            _messageSerializationService.Register(new ReceiptsMessageSerializer());

            var             networkConfig  = _configProvider.GetConfig <INetworkConfig>();
            ISessionMonitor sessionMonitor = new SessionMonitor(networkConfig, _logManager);

            _rlpxPeer = new RlpxPeer(
                _nodeKey.PublicKey,
                _initConfig.P2PPort,
                encryptionHandshakeServiceA,
                _logManager,
                _perfService,
                sessionMonitor);

            await _rlpxPeer.Init();


            var peerStorage = new NetworkStorage(PeersDbPath, networkConfig, _logManager, _perfService);

            ProtocolValidator protocolValidator = new ProtocolValidator(_nodeStatsManager, _blockTree, _logManager);

            _protocolsManager = new ProtocolsManager(_syncManager, _transactionPool, _discoveryApp, _messageSerializationService, _rlpxPeer, _nodeStatsManager, protocolValidator, peerStorage, _perfService, _logManager);
            PeerLoader peerLoader = new PeerLoader(networkConfig, _nodeStatsManager, peerStorage, _logManager);

            _peerManager = new PeerManager(_rlpxPeer, _discoveryApp, _nodeStatsManager, peerStorage, peerLoader, networkConfig, _logManager);
            _peerManager.Init();
        }
コード例 #4
0
        public ViewModelUpdater(SessionMonitor monitor)
        {
            Requires.NotNull(monitor, nameof(monitor));
            ViewModel = new SessionViewModel();

            this.monitor            = monitor;
            monitor.SessionChanged += SessionChanged;
            UpdateViewModel();
        }
コード例 #5
0
        public DebugWindow(SessionMonitor monitor)
        {
            Requires.NotNull(monitor, nameof(monitor));
            InitializeComponent();

            this.monitor = monitor;
            this.log     = new SessionLog(monitor);

            txt_Session.DataContext = monitor;
            txt_Log.DataContext     = log;
        }
コード例 #6
0
        void StartArtemis()
        {
            this.ShowInTaskbar = false;
            SessionMonitor win = new SessionMonitor();

            win.StartSession();
            this.DoAnimation();
            win.ShowDialog();
            this.ShowInTaskbar = true;
            this.WindowState   = System.Windows.WindowState.Normal;
        }
コード例 #7
0
        public MainWindow(SessionMonitor monitor)
        {
            Requires.NotNull(monitor, nameof(monitor));
            InitializeComponent();

            this.monitor          = monitor;
            this.viewModelUpdater = new ViewModelUpdater(monitor);

            viewModelUpdater.PropertyChanged += (sender, e) => SessionChanged();
            //Must wait for monitors refresh to happen
            SessionChanged();
        }
コード例 #8
0
ファイル: App.xaml.cs プロジェクト: JamesFaix/ExcelBrowser
        protected override void OnStartup(StartupEventArgs e)
        {
            base.OnStartup(e);

            var monitor = new SessionMonitor(refreshSeconds: 1);

            var window = new MainWindow(monitor);

            window.Show();

            var debugWindow = new DebugWindow(monitor);

            debugWindow.Show();
        }
コード例 #9
0
        public void Will_keep_pinging()
        {
            ISession session1 = CreateSession();
            ISession session2 = CreateUnresponsiveSession();

            NetworkConfig networkConfig = new NetworkConfig();

            networkConfig.P2PPingInterval = 50;
            SessionMonitor sessionMonitor = new SessionMonitor(networkConfig, LimboLogs.Instance);

            sessionMonitor.AddSession(session1);
            sessionMonitor.AddSession(session2);
            sessionMonitor.Start();
            Thread.Sleep(100);
            sessionMonitor.Stop();

            _pingSender.Received().SendPing();
            _noPong.Received().SendPing();

            Assert.AreEqual(SessionState.Initialized, session1.State);
            Assert.AreEqual(SessionState.Disconnected, session2.State);
        }
コード例 #10
0
        public ActorSystemBootstrap Startup()
        {
            logInfo("Process system starting up");

            // Top tier
            system = ActorCreate <object>(root, Config.SystemProcessName, publish, null, ProcessFlags.Default);
            user   = ActorCreate <object>(root, Config.UserProcessName, publish, null, ProcessFlags.Default);
            js     = ActorCreate <ProcessId, RelayMsg>(root, "js", RelayActor.Inbox, () => System.User["process-hub-js"], null, ProcessFlags.Default);

            // Second tier
            sessionMonitor = ActorCreate <Tuple <SessionSync, Time>, Unit>(system, Config.Sessions, SessionMonitor.Inbox, () => SessionMonitor.Setup(Sync, Settings.SessionTimeoutCheckFrequency), null, ProcessFlags.Default);
            deadLetters    = ActorCreate <DeadLetter>(system, Config.DeadLettersProcessName, publish, null, ProcessFlags.Default);
            errors         = ActorCreate <Exception>(system, Config.ErrorsProcessName, publish, null, ProcessFlags.Default);
            monitor        = ActorCreate <ClusterMonitor.State, ClusterMonitor.Msg>(system, Config.MonitorProcessName, ClusterMonitor.Inbox, () => ClusterMonitor.Setup(System), null, ProcessFlags.Default);

            inboxShutdown = ActorCreate <IActorInbox>(system, Config.InboxShutdownProcessName, inbox => inbox.Shutdown(), null, ProcessFlags.Default, 100000);

            reply = ask = ActorCreate <Tuple <long, Dictionary <long, AskActorReq> >, object>(system, Config.AskProcessName, AskActor.Inbox, AskActor.Setup, null, ProcessFlags.ListenRemoteAndLocal);

            logInfo("Process system startup complete");

            return(this);
        }
コード例 #11
0
        /// <summary>
        /// 从网络查询消息
        /// </summary>
        /// <param name="sessionId">会话ID</param>
        /// <param name="chatType">聊天类型</param>
        /// <param name="first">第一次查询,传true;其他传false</param>
        /// <param name="msgCount">查询数量,范围在[1,20],超出的话,会报错</param>
        /// <param name="index">起始chatIndex,如果第一次查询的话,可以传0;如果不是第一次查询,那么查询出来的消息的index都是小于这个chatIndex的</param>
        /// <returns></returns>
        public static List <AntSdkChatMsg.ChatBase> QueryMessageFromServer(string sessionId, AntSdkchatType chatType, bool first, int msgCount, int index)
        {
            var input = new AntSdkSynchronusMsgInput
            {
                sessionId = sessionId,
                chatType  = (int)chatType,
                flag      = 0,
                userId    = AntSdkService.AntSdkLoginOutput.userId,
                isFirst   = first,
                count     = msgCount,
                chatIndex = index,
            };
            var    chatMsgList = new List <AntSdkChatMsg.ChatBase>();
            int    errorCode   = 0;
            string errorMsg    = string.Empty;

            AntSdkService.SynchronusMsgs(input, ref chatMsgList, ref errorCode, ref errorMsg);
            if (chatMsgList == null || chatMsgList.Count == 0)
            {
                return(null);
            }
            else
            {
                var tempChatMsg     = chatMsgList[chatMsgList.Count - 1];
                var localMsgSession = t_sessionBll.GetModelByKey(tempChatMsg.sessionId);
                var chatIndex       = 0;
                int.TryParse(tempChatMsg.chatIndex, out chatIndex);

                if (localMsgSession != null)
                {
                    var localChatIndex = 0;
                    var burnChatIndex  = 0;
                    if (!string.IsNullOrEmpty(localMsgSession.LastChatIndex))
                    {
                        int.TryParse(localMsgSession.LastChatIndex, out localChatIndex);
                    }
                    if (!string.IsNullOrEmpty(localMsgSession.BurnLastChatIndex))
                    {
                        int.TryParse(localMsgSession.BurnLastChatIndex, out burnChatIndex);
                    }
                    if (localChatIndex < burnChatIndex)
                    {
                        localChatIndex = burnChatIndex;
                    }
                    if (chatIndex > localChatIndex)
                    {
                        var antSdkContactUser = AntSdkService.AntSdkListContactsEntity.users.FirstOrDefault(c => c.userId == tempChatMsg.sendUserId);
                        localMsgSession.LastChatIndex = tempChatMsg.chatIndex;
                        localMsgSession.LastMsg       = antSdkContactUser != null?
                                                        FormatLastMessageContent(tempChatMsg.MsgType, tempChatMsg, chatType == AntSdkchatType.Group,
                                                                                 antSdkContactUser.userNum != null?antSdkContactUser.userNum + antSdkContactUser.userName : antSdkContactUser.userName) :
                                                            PublicMessageFunction.FormatLastMessageContent(tempChatMsg.MsgType, tempChatMsg, chatType == AntSdkchatType.Group);

                        localMsgSession.LastMsgTimeStamp = tempChatMsg.sendTime;
                        t_sessionBll.Update(localMsgSession);
                        tempChatMsg.chatType = (int)chatType;
                        SessionMonitor.AddSessionItemOnlineMsg(tempChatMsg.MsgType, tempChatMsg, false);
                    }
                }
                return(chatMsgList);
            }
        }
コード例 #12
0
 public StartupConnectionHandler(ConnectionMonitor connectionMonitor,
                                 SessionMonitor sessionMonitor)
 {
     this.sessionMonitor    = sessionMonitor;
     this.connectionMonitor = connectionMonitor;
 }
コード例 #13
0
ファイル: WindowMonitor.cs プロジェクト: eosvil/AntennaChat
 /// <summary>
 /// 取消静态事件的注册
 /// </summary>
 public static void End()
 {
     MessageMonitor.End();
     SessionMonitor.End();
 }
コード例 #14
0
ファイル: WindowMonitor.cs プロジェクト: eosvil/AntennaChat
 /// <summary>
 /// 注册静态事件
 /// </summary>
 public static void Start()
 {
     MessageMonitor.Start();
     SessionMonitor.Start();
 }