public WebApp(Node node, Interrupters ints) { _node = node; node.MMLC.Register (BBS.SimpleBBSParser.Instance); node.MMLC.Register (Wiki.WikiParser.Instance); _statInt = ints.StatisticsTimer; lock (_xslTemplate) { if (_threadInfoArray == null) { _statInt.AddInterruption (UpdateThreadStatistics); UpdateThreadStatistics (); } } _statInt.AddInterruption (UpdateStatistics); }
public Node(Interrupters ints, IDatagramEventSocket bindedDgramSock, ITcpListener tcpListener, string db_path, ushort bindUdpPort, ushort bindTcpPort) { _udpPort = bindUdpPort; _tcpPort = bindTcpPort; _ints = ints; _dgramSock = bindedDgramSock; _tcpListener = tcpListener; _rtoAlgo = new RFC2988BasedRTOCalculator (TimeSpan.FromSeconds (1), TimeSpan.FromMilliseconds (100), 50, false); _messagingSock = new MessagingSocket (_dgramSock, true, SymmetricKey.NoneKey, p2pncs.Serializer.Instance, null, ints.MessagingInt, _rtoAlgo, DefaultMessagingRetry, DefaultMessagingRetryBufferSize, DefaultMessagingDuplicationCheckBufferSize); _kbrPrivateKey = ECKeyPair.Create (DefaultAlgorithm.ECDomainName); _kbr = new SimpleIterativeRouter2 (Key.Create (_kbrPrivateKey), bindTcpPort, _messagingSock, new SimpleRoutingAlgorithm (), p2pncs.Serializer.Instance, true); _portChecker = new PortOpenChecker (_kbr); _localHT = new OnMemoryLocalHashTable (_kbr, ints.DHTInt); IMassKeyDelivererLocalStore mkdLocalStore = _localHT as IMassKeyDelivererLocalStore; _dht = new SimpleDHT (_kbr, _messagingSock, _localHT); _anonymous = new AnonymousRouter (_dht, _kbrPrivateKey, ints.AnonymousInt); ints.KBRStabilizeInt.AddInterruption (Stabilize); _mkd = new MassKeyDeliverer (_dht, mkdLocalStore, ints.MassKeyDeliverTimerInt); _mmlc = new MMLC (_anonymous, _dht, mkdLocalStore, db_path, ints.StreamSocketTimeoutInt, ints.DFSRePutTimerInt); _crawler = new FileInfoCrawler (_tcpListener, _mmlc, _ints.CrawlingTimer); _statistics = new Statistics ((AnonymousRouter)_anonymous, _mmlc, _tcpListener); }
public void Run() { _running = true; try { if (!LoadConfig (_config)) { throw new ConfigFileInitializedException (); } ushort bindUdp = (ushort)_config.GetValue<int> (ConfigFields.NetBindUdp); ushort bindTcp = (ushort)_config.GetValue<int> (ConfigFields.NetBindTcp); int gwBindTcp = _config.GetValue<int> (ConfigFields.GwBindTcp); _url = string.Format ("http://127.0.0.1:{0}/", gwBindTcp); using (IDatagramEventSocket dgramSock = UdpSocket.CreateIPv4 ()) using (TcpListener listener = new TcpListener ()) { dgramSock.Bind (new IPEndPoint (IPAddress.Any, bindUdp)); listener.Bind (new IPEndPoint (IPAddress.Any, bindTcp)); listener.ListenStart (); CreateDatabaseConnectionDelegate create_session_db = delegate () { IDbConnection connection = new Mono.Data.Sqlite.SqliteConnection (); connection.ConnectionString = "Data Source=http-session.sqlite,DateTimeFormat=Ticks,Pooling=False"; connection.Open (); return connection; }; using (Interrupters ints = new Interrupters ()) using (Node node = new Node (ints, dgramSock, listener, "database.sqlite", bindUdp, bindTcp)) using (WebApp app = new WebApp (node, ints)) using (SessionMiddleware mid1 = new SessionMiddleware (create_session_db, app)) using (HttpServer.CreateEmbedHttpServer (mid1, null, true, true, _config.GetValue<bool> (ConfigFields.GwBindAny), gwBindTcp, 16)) { InitNodeList initNodeList = new InitNodeList (node.PortOpenChecker); _app = app; _node = node; _startupWaitHandle.Set (); if (Started != null) { try { Started (this, EventArgs.Empty); } catch {} } initNodeList.Load (); app.ExitWaitHandle.WaitOne (); initNodeList.Save (); app.CreateStatisticsXML ().Save ("statistics-" + DateTime.Now.ToString ("yyyyMMddHHmmss") + ".xml"); _waitHandle.Set (); } } } finally { _running = false; _startupWaitHandle.Set (); } }