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); }
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"); }
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(); }
public ViewModelUpdater(SessionMonitor monitor) { Requires.NotNull(monitor, nameof(monitor)); ViewModel = new SessionViewModel(); this.monitor = monitor; monitor.SessionChanged += SessionChanged; UpdateViewModel(); }
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; }
void StartArtemis() { this.ShowInTaskbar = false; SessionMonitor win = new SessionMonitor(); win.StartSession(); this.DoAnimation(); win.ShowDialog(); this.ShowInTaskbar = true; this.WindowState = System.Windows.WindowState.Normal; }
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(); }
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(); }
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); }
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); }
/// <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); } }
public StartupConnectionHandler(ConnectionMonitor connectionMonitor, SessionMonitor sessionMonitor) { this.sessionMonitor = sessionMonitor; this.connectionMonitor = connectionMonitor; }
/// <summary> /// 取消静态事件的注册 /// </summary> public static void End() { MessageMonitor.End(); SessionMonitor.End(); }
/// <summary> /// 注册静态事件 /// </summary> public static void Start() { MessageMonitor.Start(); SessionMonitor.Start(); }