Example #1
0
 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);
 }
Example #2
0
 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);
 }
Example #3
0
        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 ();
            }
        }