예제 #1
0
        /// <summary>
        /// Converts an <see cref="EmbeddedVNodeBuilder"/> to a <see cref="ClusterVNode"/>.
        /// </summary>
        public ClusterVNode Build()
        {
            EnsureHttpPrefixes();
            SetUpProjectionsIfNeeded();

            var dbConfig = CreateDbConfig(_chunkSize, _dbPath, _chunksCacheSize,
                                          _inMemoryDb);
            var db = new TFChunkDb(dbConfig);

            var vNodeSettings = new ClusterVNodeSettings(Guid.NewGuid(),
                                                         0,
                                                         _internalTcp,
                                                         _internalSecureTcp,
                                                         _externalTcp,
                                                         _externalSecureTcp,
                                                         _internalHttp,
                                                         _externalHttp,
                                                         new GossipAdvertiseInfo(_internalTcp, _internalSecureTcp, _externalTcp, _externalSecureTcp, _internalHttp, _externalHttp),
                                                         _intHttpPrefixes.ToArray(),
                                                         _extHttpPrefixes.ToArray(),
                                                         _enableTrustedAuth,
                                                         _certificate,
                                                         _workerThreads,
                                                         _discoverViaDns,
                                                         _clusterDns,
                                                         _gossipSeeds.ToArray(),
                                                         _minFlushDelay,
                                                         _clusterNodeCount,
                                                         _prepareAckCount,
                                                         _commitAckCount,
                                                         _prepareTimeout,
                                                         _commitTimeout,
                                                         _useSsl,
                                                         _sslTargetHost,
                                                         _sslValidateServer,
                                                         _statsPeriod,
                                                         _statsStorage,
                                                         _nodePriority,
                                                         _authenticationProviderFactory,
                                                         _disableScavengeMerging,
                                                         _scavengeHistoryMaxAge,
                                                         _adminOnPublic,
                                                         _statsOnPublic,
                                                         _gossipOnPublic,
                                                         _gossipInterval,
                                                         _gossipAllowedTimeDifference,
                                                         _gossipTimeout,
                                                         _intTcpHeartbeatTimeout,
                                                         _intTcpHeartbeatInterval,
                                                         _extTcpHeartbeatTimeout,
                                                         _extTcpHeartbeatInterval,
                                                         !_skipVerifyDbHashes,
                                                         _maxMemtableSize,
                                                         _startStandardProjections,
                                                         _disableHTTPCaching,
                                                         _logHttpRequests);
            var infoController = new InfoController(null, _projectionType);

            return(new ClusterVNode(db, vNodeSettings, GetGossipSource(), infoController, _subsystems.ToArray()));
        }
예제 #2
0
        public void InfoController_GetInfo_UsesCorrectQueryLogicProvider()
        {
            //Arrange
            var stubLogger = Substitute.For <ILogger>();

            stubLogger.LogRequest(Arg.Any <Func <JToken> >(), Arg.Any <string>(), Arg.Any <object>()).Returns((callInfo) => callInfo.ArgAt <Func <JToken> >(0)());
            var stubRepository = Substitute.For <IInfoRepository>();

            stubRepository.GetInfoContext(Arg.Any <string>()).Returns(new InfoContext()
            {
                QueryLogicType = QueryLogicType.REST, QueryLogic = "someUri"
            });
            var stubQueryLogicProvider = Substitute.For <IQueryLogicResolver>();

            stubQueryLogicProvider.PerformQuery("someUri", Arg.Any <string[]>()).Returns(JToken.Parse("\"aSampleResult\""));
            var stubQueryLogicProviders = Substitute.For <IQueryLogicResolverFactory>();

            stubQueryLogicProviders.getQueryLogicResolver(QueryLogicType.REST).Returns(stubQueryLogicProvider);
            var target = new InfoController(stubRepository, stubQueryLogicProviders, stubLogger);
            //Act
            var result   = target.GetInfo("someTestInfo", null);
            var okResult = result as OkObjectResult;

            //Assert
            Assert.IsNotNull(okResult);
            Assert.That(okResult.Value.ToString(), Is.EqualTo("aSampleResult"));
        }
예제 #3
0
    // Create buttons for each teacher on stage up.
    void Start()
    {
        // Max of 8 teachers at once.
        GameObject[] buttonArray = new GameObject[8];

        ic       = (InfoController)FindObjectOfType(typeof(InfoController));
        teachers = ic.getTeachers();

        //DEBUG_PACKS();

        for (int i = 0; i < teachers.Length; i++)
        {
            var fix = i;
            buttonArray[i] = Instantiate(buttonPrefab) as GameObject;
            buttonArray[i].transform.SetParent(canvas.transform);

            // Perform trig to make teacher's things appear as buttons
            float c     = 360 / teachers.Length;
            float xcord = Mathf.Cos(c * i * Mathf.Deg2Rad + Mathf.PI / 2) * Screen.height / 4;
            float ycord = Mathf.Sin(c * i * Mathf.Deg2Rad + Mathf.PI / 2) * Screen.height / 4;

            buttonArray[i].transform.position = new Vector3(xcord + Screen.width / 2, ycord + Screen.height / 2, 0);
            buttonArray[i].GetComponentInChildren <Text>().text = teachers[i];
            buttonArray[i].GetComponent <Button>().onClick.AddListener(() => CallRequestContentPacks(teachers[fix]));
        }
    }
예제 #4
0
        public void TestIfInfoIndexIsRedirect()
        {
            InfoController infoController = new InfoController();
            var            result         = infoController.Index();

            var viewResult = Assert.IsType <RedirectResult>(result);
        }
예제 #5
0
        public void InfoController_GetInfo_UsesParameters(string paramUrlSegments, string commaSeparatedParams)
        {
            //Arrange
            var stubLogger = Substitute.For <ILogger>();

            stubLogger.LogRequest(Arg.Any <Func <JToken> >(), Arg.Any <string>(), Arg.Any <object>()).Returns((callInfo) => callInfo.ArgAt <Func <JToken> >(0)());

            var stubRepository = Substitute.For <IInfoRepository>();

            stubRepository.GetInfoContext(Arg.Any <string>()).Returns(new InfoContext()
            {
                QueryLogicType = QueryLogicType.REST, QueryLogic = "someUri"
            });
            var mockQueryLogicProvider  = Substitute.For <IQueryLogicResolver>();
            var stubQueryLogicProviders = Substitute.For <IQueryLogicResolverFactory>();

            stubQueryLogicProviders.getQueryLogicResolver(QueryLogicType.REST).Returns(mockQueryLogicProvider);
            var target = new InfoController(stubRepository, stubQueryLogicProviders, stubLogger);

            string[] paramArray = null;
            if (paramUrlSegments != null)
            {
                paramArray = paramUrlSegments.Split(',');
            }
            //Act
            var result = target.GetInfo("someTestInfo", paramUrlSegments);

            //Assert
            mockQueryLogicProvider.Received().PerformQuery(Arg.Any <string>(), Arg.Is <string[]>(prms => string.Join(",", prms) == commaSeparatedParams));
        }
예제 #6
0
        public void TestGetInfo_SouldReturnInfo()
        {
            var configuration = new Mock <IConfiguration>();
            var subject       = new InfoController(configuration.Object);
            var response      = ((ContentResult)subject.ApiInfo()).Content;

            Assert.IsTrue(response.Contains("NET.Core Api REST service started!"));
        }
예제 #7
0
    private void PrintTeacherList()
    {
        InfoController ic = (InfoController)FindObjectOfType(typeof(InfoController));

        for (int i = 0; i < ic.getTeachers().Length; i++)
        {
            Debug.Log(ic.getTeachers()[i]);
        }
    }
예제 #8
0
        public async Task Get_TestAsync()
        {
            var controller = new InfoController(fMediator);

            fMediator
            .Send(Arg.Any <GetInfoRequest>(), Arg.Any <CancellationToken>())
            .Returns(new InfoModel {
                Version = "ver"
            });

            var result = await controller.GetAsync(default);
예제 #9
0
        public async Task Index_Get_NotNull()
        {
            //arrange
            _infoManager.GetLanguagesListAsync().Returns(_languageDtoList);
            _infoController = new InfoController(_infoManager, _dataAdapter, _logger);

            //act
            var result = await _infoController.GetLanguagesList();

            //assert
            Assert.NotNull(result);
        }
예제 #10
0
        public void Info_Controller()
        {
            var infoController = new InfoController();

            Assert.IsNotNull(infoController);
            var result_Index = infoController.Index();
            var result_Ping  = infoController.Ping();

            Assert.AreEqual("System.Web.Mvc.ViewResult", result_Index.str());
            Assert.IsInstanceOf <ViewResult>(result_Index);
            Assert.AreEqual("pong", result_Ping);
        }
예제 #11
0
        private void SetupControllers()
        {
            var homeCtrl = new HomeController();
            var homeNav  = new UINavigationController(homeCtrl);

            homeNav.TabBarItem.SelectedImage          = UIImage.FromBundle("HomeActive");
            homeNav.TabBarItem.Image                  = UIImage.FromBundle("HomeDefault");
            homeNav.TabBarItem.Title                  = "";
            homeNav.TabBarItem.ImageInsets            = new UIEdgeInsets(6, 0, -6, 0);
            homeNav.NavigationBar.Translucent         = false;
            homeNav.NavigationBar.BarTintColor        = MainColor;
            homeNav.NavigationBar.TintColor           = UIColor.White;
            homeNav.NavigationBar.TitleTextAttributes = new UIStringAttributes()
            {
                ForegroundColor = UIColor.White
            };

            var testListCtrl = new TestListController();
            var testListNav  = new UINavigationController(testListCtrl);

            testListNav.TabBarItem.SelectedImage          = UIImage.FromBundle("TestActive");
            testListNav.TabBarItem.Image                  = UIImage.FromBundle("TestDefault");
            testListNav.TabBarItem.Title                  = "";
            testListNav.TabBarItem.ImageInsets            = new UIEdgeInsets(6, 0, -6, 0);
            testListNav.NavigationBar.Translucent         = false;
            testListNav.NavigationBar.BarTintColor        = MainColor;
            testListNav.NavigationBar.TintColor           = UIColor.White;
            testListNav.NavigationBar.TitleTextAttributes = new UIStringAttributes()
            {
                ForegroundColor = UIColor.White
            };

            var infoCtrl = new InfoController();
            var infoNav  = new UINavigationController(infoCtrl);

            infoNav.TabBarItem.SelectedImage          = UIImage.FromBundle("UserActive");
            infoNav.TabBarItem.Image                  = UIImage.FromBundle("UserDefault");
            infoNav.TabBarItem.Title                  = "";
            infoNav.TabBarItem.ImageInsets            = new UIEdgeInsets(6, 0, -6, 0);
            infoNav.NavigationBar.Translucent         = false;
            infoNav.NavigationBar.BarTintColor        = MainColor;
            infoNav.NavigationBar.TintColor           = UIColor.White;
            infoNav.NavigationBar.TitleTextAttributes = new UIStringAttributes()
            {
                ForegroundColor = UIColor.White
            };

            var navControllers = new UINavigationController[] { homeNav, testListNav, infoNav };

            base.ViewControllers = navControllers;

            base.SelectedIndex = 1;
        }
예제 #12
0
        public void CategoryTest()
        {
            // Arrange
            // Макет репозитория
            var mock = new Mock <IRepository <Movie> >();

            mock.Setup(r => r.GetAll())
            .Returns(new List <Movie>
            {
                new Movie {
                    MovieId = 1, MovieName = "Movie1", GroupName = "1"
                },
                new Movie {
                    MovieId = 2, MovieName = "Movie2", GroupName = "2"
                },
                new Movie {
                    MovieId = 3, MovieName = "Movie3", GroupName = "1"
                },
                new Movie {
                    MovieId = 4, MovieName = "Movie4", GroupName = "2"
                },
                new Movie {
                    MovieId = 5, MovieName = "Movie5", GroupName = "2"
                },
            });

            // Макеты для получения HttpContext HttpRequest
            var request     = new Mock <HttpRequestBase>();
            var httpContext = new Mock <HttpContextBase>();

            httpContext.Setup(h => h.Request).Returns(request.Object);

            // Создание объекта контроллера
            var controller = new InfoController(mock.Object);

            // Создание контекста контроллера
            controller.ControllerContext             = new ControllerContext();
            controller.ControllerContext.HttpContext = httpContext.Object;

            // Act
            // Вызов метода List
            var view = controller.Index("1", 1) as ViewResult;

            // Assert
            Assert.IsNotNull(view, "Представление не получено");
            Assert.IsNotNull(view.Model, "Модель не получена");
            PageListViewModel <Movie> model = view.Model as PageListViewModel <Movie>;

            Assert.AreEqual(2, model.Count);
            Assert.AreEqual(1, model[0].MovieId);
            Assert.AreEqual(3, model[1].MovieId);
        }
예제 #13
0
        public void IndexGet()
        {
            var film = new Film()
            {
                Name   = "AppTesting",
                Actors = new[] { new Actor()
                                 {
                                     Name = "Me"
                                 }, new Actor()
                                 {
                                     Name = "TestWebApp"
                                 } },
                Year  = 2016,
                Genre = Genre.Drama
            };

            using (var context = new Context(Context.Type.TestDatabase))
            {
                context.Films.Add(film);
                context.SaveChanges();

                var amountOfFilms = context.Films.Count();

                using (var infoController = new InfoController(context))
                {
                    var view = infoController.Index((int)film.ID) as ViewResult;

                    film = view?.Model as Film;

                    Assert.IsNotNull(film);
                    Assert.AreEqual("AppTesting", film.Name);
                    Assert.AreEqual((short)2016, film.Year);
                    Assert.AreEqual(Genre.Drama, film.Genre);
                    Assert.IsNotNull(film.Actors);
                    Assert.AreEqual(2, film.Actors.Count);
                    Assert.IsTrue(film.Actors.Any(a => a.Name == "Me"));
                    Assert.IsTrue(film.Actors.Any(a => a.Name == "TestWebApp"));


                    view = infoController.Index() as ViewResult;

                    Assert.IsNotNull(view);
                    Assert.AreEqual("Error", view.ViewName);


                    view = infoController.Index(amountOfFilms + 1) as ViewResult;

                    Assert.IsNotNull(view);
                    Assert.AreEqual("Error", view.ViewName);
                }
            }
        }
예제 #14
0
        private void describe_()
        {
            describe[Controller.Index] = () =>
            {
                Mock <IContainerInfoService> mockContainerService = null;
                string            handle     = "container-handle";
                InfoController    controller = null;
                IHttpActionResult result     = null;

                before = () =>
                {
                    mockContainerService = new Mock <IContainerInfoService>();
                    controller           = new InfoController(mockContainerService.Object);
                };

                act = () => result = controller.GetInfo(handle);


                context["when the container exists"] = () =>
                {
                    ContainerInfo info = null;

                    before = () =>
                    {
                        info = new ContainerInfo();
                        mockContainerService.Setup(x => x.GetInfoByHandle(handle))
                        .Returns(info);
                    };

                    it["returns info about the container"] = () =>
                    {
                        var jsonResult = result.should_cast_to <JsonResult <ContainerInfo> >();
                        jsonResult.Content.should_be(info);
                    };
                };

                context["when the container does not exist"] = () =>
                {
                    before = () =>
                    {
                        mockContainerService.Setup(x => x.GetInfoByHandle(handle))
                        .Returns((ContainerInfo)null);
                    };

                    it["returns not found"] = () =>
                    {
                        result.should_cast_to <NotFoundResult>();
                    };
                };
            };
        }
예제 #15
0
    private void Start()
    {
        _events             = FindObjectOfType <EventsController>();
        _waveController     = FindObjectOfType <WaveController>();
        _currencyController = FindObjectOfType <CurrencyController>();
        _attackerSpawners   = FindObjectsOfType <AttackerSpawner>();
        _heatZones          = FindObjectOfType <HeatZones>();
        _infoController     = FindObjectOfType <InfoController>();
        _boardEvents        = FindObjectOfType <BoardEvents>();

        _cooldownCounterReset();

        StartCoroutine(_firstEvent());
    }
예제 #16
0
 public StandardTradeToolController()
 {
     infoModel = new InfoModel();
     /* Add info messages */
     infoModel.infoMessageList.Add(new InfoMessage(
                                       EInfoMessageId.EntryGreaterThanTicker,
                                       "Entry price is greater than ticker." + " Entrance price: " + exchangeDataModel.EntrancePrice + " Ticker price: " + exchangeDataModel.TickerPrice + " Date/Time: " + DateTime.Now)
                                   );
     infoModel.infoMessageList.Add(new InfoMessage(
                                       EInfoMessageId.EntryLessThanTicker,
                                       "Entry price is less than ticker." + " Entrance price: " + exchangeDataModel.EntrancePrice + " Ticker price: " + exchangeDataModel.TickerPrice + " Date/Time: " + DateTime.Now)
                                   );
     infoModel.infoMessageList.Add(new InfoMessage(
                                       EInfoMessageId.DetectEntrance,
                                       "Detecting trade entrance." + " Ticker price: " + exchangeDataModel.TickerPrice + " Date/Time: " + DateTime.Now)
                                   );
     infoModel.infoMessageList.Add(new InfoMessage(
                                       EInfoMessageId.DetectExit,
                                       "Detecting trade exit." + " Ticker price: " + exchangeDataModel.TickerPrice + " Date/Time: " + DateTime.Now)
                                   );
     infoModel.infoMessageList.Add(new InfoMessage(
                                       EInfoMessageId.BuyOrderEnteredEntryGreaterThanTicker,
                                       "Trade was entered (BUY ORDER) with entry originally greater than ticker." + " Entrance price: " + exchangeDataModel.EntrancePrice + " TickerPrice: " + exchangeDataModel.TickerPrice + " Date/Time: " + DateTime.Now)
                                   );
     infoModel.infoMessageList.Add(new InfoMessage(
                                       EInfoMessageId.BuyOrderEnteredEntryLessThanTicker,
                                       "Trade was entered (BUY ORDER) with entry originally less than ticker." + " Entrance price: " + exchangeDataModel.EntrancePrice + " TickerPrice: " + exchangeDataModel.TickerPrice + " Date/Time: " + DateTime.Now)
                                   );
     infoModel.infoMessageList.Add(new InfoMessage(
                                       EInfoMessageId.SellOrderEnteredEntryGreaterThanTicker,
                                       "Trade was entered (SELL ORDER) with entry originally greater than ticker." + " Entrance price: " + exchangeDataModel.EntrancePrice + " TickerPrice: " + exchangeDataModel.TickerPrice + " Date/Time: " + DateTime.Now)
                                   );
     infoModel.infoMessageList.Add(new InfoMessage(
                                       EInfoMessageId.SellOrderEnteredEntryLessThanTicker,
                                       "Trade was entered (SELL ORDER) with entry originally less than ticker." + " Entrance price: " + exchangeDataModel.EntrancePrice + " TickerPrice: " + exchangeDataModel.TickerPrice + " Date/Time: " + DateTime.Now)
                                   );
     infoModel.infoMessageList.Add(new InfoMessage(
                                       EInfoMessageId.ExitedWithProfit,
                                       "Trade was exited with a profit." + " Target profit price: " + exchangeDataModel.ProfitTargetPrice + " TickerPrice: " + exchangeDataModel.TickerPrice + " Date/Time: " + DateTime.Now)
                                   );
     infoModel.infoMessageList.Add(new InfoMessage(
                                       EInfoMessageId.ExitedWithLoss,
                                       "Trade was exited with a loss." + " Stop loss price: " + exchangeDataModel.StopLossPrice + " TickerPrice: " + exchangeDataModel.TickerPrice + " Date/Time: " + DateTime.Now)
                                   );
     infoController = new InfoController(infoModel, @"E:\Test.txt");
 }
예제 #17
0
    public void OnEnable()
    {
        if (Network.peerType != NetworkPeerType.Server)
        {
            return;
        }

        setupPlayer(true);
        percentage = 100;

        GameObject aux = GameObject.Find("Info");

        if (aux != null)
        {
            info = aux.gameObject.GetComponent <InfoController>();
        }

        player = this.gameObject.GetComponent <MovementController> ();

        if (info != null && player != null)
        {
            info.setLife(percentage);
        }


        if (gameObject.layer == 12)
        {
            return;
        }

        switch (team)
        {
        case 1:
            transform.position = GameObject.FindGameObjectsWithTag("Respawn")[0].GetComponent <SpawnManager>().giveRespawnIzq();
            break;

        case 2:
            transform.position = GameObject.FindGameObjectsWithTag("Respawn")[0].GetComponent <SpawnManager>().giveRespawnDer();
            break;

        case 5:
            transform.position = GameObject.FindGameObjectsWithTag("Respawn")[0].GetComponent <SpawnManager>().giveRespawnIA();
            break;
        }
        ;
    }
예제 #18
0
    public void Hurt(int damage)
    {
        Debug.Log("uuuuh me hacen daño y tengo " + gameObject);
        percentage -= damage;
        if (this.tag == "Player")
        {
            this.gameObject.networkView.RPC("setLife", RPCMode.Others, percentage);
        }
        //UpColorGO.gameObject.GetComponent<SpriteRenderer> ().material.color = Color.red;

        if (percentage <= 0)
        {
            setupPlayer(false);
            Debug.Log("voy a hacer setlife");
            if (this.tag == "Player")
            {
                this.gameObject.networkView.RPC("setLife", RPCMode.Others, percentage);
            }
            Debug.Log("termino setlife");
            Invoke("OnEnable", 5.0f);
        }

        if (info != null)
        {
            info = GameObject.Find("Info").gameObject.GetComponent <InfoController>();
        }

        if (player != null && info != null)
        {
            info.setLife(percentage);
        }

        /*
         *
         * Hashtable tweenParams = new Hashtable();
         * tweenParams.Add("from", Color.red);
         * tweenParams.Add("to", UpColor);
         * tweenParams.Add("time", 4.0f);
         * tweenParams.Add ("easetype", iTween.EaseType.easeInBack);
         * tweenParams.Add ("includeChildren", true);
         *
         * iTween.ValueTo(player.DownSpriteGo, tweenParams);
         *
         */
    }
예제 #19
0
        public void GitHubUserInfoTest()
        {
            //Arrange
            var searchUser     = "******";
            var infoController = new InfoController();

            //Act
            ActionResult result = infoController.GitHubUserInfo(searchUser);

            //Assert
            Assert.IsInstanceOfType(result, typeof(PartialViewResult));

            //Verify the result model type
            ViewResult vResult = result as ViewResult;

            if (vResult != null)
            {
                Assert.IsInstanceOfType(vResult.Model, typeof(DataModels.Info));
            }
        }
예제 #20
0
        public void InfoController_GetInfo_LogsRequests()
        {
            //Arrange
            var mockLogger     = Substitute.For <ILogger>();
            var stubRepository = Substitute.For <IInfoRepository>();

            stubRepository.GetInfoContext(Arg.Any <string>()).Returns(new InfoContext()
            {
                QueryLogicType = QueryLogicType.REST, QueryLogic = "someUri"
            });
            var stubQueryLogicProvider  = Substitute.For <IQueryLogicResolver>();
            var stubQueryLogicProviders = Substitute.For <IQueryLogicResolverFactory>();

            stubQueryLogicProviders.getQueryLogicResolver(QueryLogicType.REST).Returns(stubQueryLogicProvider);
            var target = new InfoController(stubRepository, stubQueryLogicProviders, mockLogger);
            //Act
            var result = target.GetInfo("someTestInfo", null);

            //Assert
            mockLogger.Received().LogRequest(Arg.Any <Func <JToken> >(), "someTestInfo", Arg.Is <object>(prm => true));
        }
예제 #21
0
        public async Task Get_ReturnsInfo()
        {
            // arrange
            var dataStructureConverterMoq = new Mock <IDataStructureConverter>();

            dataStructureConverterMoq.Setup(x => x.Convert(It.IsAny <string>(), It.IsAny <object>()))
            .Returns(new Dictionary <string, object>
            {
                { "data", InfoHelper.Get() }
            });

            var sut = new InfoController(dataStructureConverterMoq.Object);

            // act
            var response = await sut.Get();

            var result = response as OkObjectResult;

            // assert
            Assert.NotNull(result);
        }
예제 #22
0
    IEnumerator LoginPlayer()
    {
        WWWForm form = new WWWForm();

        form.AddField("name", nameField.text);
        form.AddField("password", SHA256(passwordField.text));

        WWW www = new WWW("http://localhost/sqlconnect/login.php", form);

        yield return(www);

        if (www.text == "1")
        {
            Debug.Log("Error communicating with the database");
        }
        else if (www.text == "2")
        {
            Debug.Log("Either your username or password is incorrect");
        }
        else if (www.text == string.Empty)
        {
            Debug.Log("Unable to connect to the server");
        }
        else
        {
            Debug.Log("User login successful!");
            Debug.Log(www.text);

            //Get the 'global' controller for storing objects
            InfoController ic = (InfoController)FindObjectOfType(typeof(InfoController));
            ic.setTeachers(www.text);
            ic.setUsername(nameField.text);

            UnityEngine.SceneManagement.SceneManager.LoadScene(3);
        }
    }
예제 #23
0
        public async Task Get_ReturnsVersion()
        {
            // arrange
            var dataStructureConverterMoq = new Mock <IDataStructureConverter>();

            dataStructureConverterMoq.Setup(x => x.Convert(It.IsAny <string>(), It.IsAny <object>()))
            .Returns(new Dictionary <string, object>
            {
                { "data", InfoHelper.Get() }
            });

            var sut = new InfoController(dataStructureConverterMoq.Object);

            // act
            var response = await sut.Get();

            var result      = response as OkObjectResult;
            var resultValue = (Dictionary <string, object>)result.Value;

            var infoResult = (ApiInfoModel)resultValue["data"];

            // assert
            Assert.True(infoResult.Version.Length > 0);
        }
예제 #24
0
        public void Test_GetLastName_Controller()
        {
            var testctrlr = new InfoController();

            Assert.NotNull(testctrlr.getLastName("Test"));
        }
예제 #25
0
 void Start()
 {
     m = this;
     infoPanel.SetActive(false);
 }
예제 #26
0
 public void EditMetadataRow(InfoController.CustomHeaderEntry headerEntry, bool selectValue)
 {
     foreach (DataGridViewRow row in metadataDataGridView.Rows)
     {
         if (row.DataBoundItem == headerEntry)
         {
             metadataDataGridView.CurrentCell = selectValue
                                                    ? row.Cells[MetadataColumName.Value.ToString()]
                                                    : row.Cells[MetadataColumName.Name.ToString()];
             break;
         }
     }
     metadataDataGridView.BeginEdit(true);
 }
예제 #27
0
        protected override void Create(ClusterNodeOptions opts)
        {
            var dbPath = opts.Db;

            if (!opts.MemDb)
            {
                _dbLock = new ExclusiveDbLock(dbPath);
                if (!_dbLock.Acquire())
                {
                    throw new Exception(string.Format("Couldn't acquire exclusive lock on DB at '{0}'.", dbPath));
                }
            }
            _clusterNodeMutex = new ClusterNodeMutex();
            if (!_clusterNodeMutex.Acquire())
            {
                throw new Exception(string.Format("Couldn't acquire exclusive Cluster Node mutex '{0}'.", _clusterNodeMutex.MutexName));
            }

            var dbConfig = CreateDbConfig(dbPath, opts.CachedChunks, opts.ChunksCacheSize, opts.MemDb);

            FileStreamExtensions.ConfigureFlush(disableFlushToDisk: opts.UnsafeDisableFlushToDisk);
            var db            = new TFChunkDb(dbConfig);
            var vNodeSettings = GetClusterVNodeSettings(opts);

            IGossipSeedSource gossipSeedSource;

            if (opts.DiscoverViaDns)
            {
                gossipSeedSource = new DnsGossipSeedSource(opts.ClusterDns, opts.ClusterGossipPort);
            }
            else
            {
                if (opts.GossipSeed.Length == 0)
                {
                    if (opts.ClusterSize > 1)
                    {
                        Log.Error("DNS discovery is disabled, but no gossip seed endpoints have been specified. "
                                  + "Specify gossip seeds using the --gossip-seed command line option.");
                    }
                    else
                    {
                        Log.Info("DNS discovery is disabled, but no gossip seed endpoints have been specified. Since"
                                 + "the cluster size is set to 1, this may be intentional. Gossip seeds can be specified"
                                 + "seeds using the --gossip-seed command line option.");
                    }
                }

                gossipSeedSource = new KnownEndpointGossipSeedSource(opts.GossipSeed);
            }

            var runProjections = opts.RunProjections;

            Log.Info("{0,-25} {1}", "INSTANCE ID:", vNodeSettings.NodeInfo.InstanceId);
            Log.Info("{0,-25} {1}", "DATABASE:", db.Config.Path);
            Log.Info("{0,-25} {1} (0x{1:X})", "WRITER CHECKPOINT:", db.Config.WriterCheckpoint.Read());
            Log.Info("{0,-25} {1} (0x{1:X})", "CHASER CHECKPOINT:", db.Config.ChaserCheckpoint.Read());
            Log.Info("{0,-25} {1} (0x{1:X})", "EPOCH CHECKPOINT:", db.Config.EpochCheckpoint.Read());
            Log.Info("{0,-25} {1} (0x{1:X})", "TRUNCATE CHECKPOINT:", db.Config.TruncateCheckpoint.Read());

            var enabledNodeSubsystems = runProjections >= ProjectionType.System
                ? new[] { NodeSubsystems.Projections }
            : new NodeSubsystems[0];

            _projections = new Projections.Core.ProjectionsSubsystem(opts.ProjectionThreads, opts.RunProjections, opts.StartStandardProjections);
            var infoController = new InfoController(opts, opts.RunProjections);

            _node = new ClusterVNode(db, vNodeSettings, gossipSeedSource, infoController, _projections);
            RegisterWebControllers(enabledNodeSubsystems, vNodeSettings);
        }
예제 #28
0
 public void EditAclRow(InfoController.UserAndRoleEntry aclEntry, bool selectRole)
 {
     foreach (DataGridViewRow row in aclDataGridView.Rows)
     {
         if (row.DataBoundItem == aclEntry)
         {
             aclDataGridView.CurrentCell = selectRole
                                               ? row.Cells[AclColumnName.Role.ToString()]
                                               : row.Cells[AclColumnName.User.ToString()];
             break;
         }
     }
     aclDataGridView.BeginEdit(true);
 }
예제 #29
0
 public InfoControllerTests()
 {
     _controller = new InfoController();
 }
예제 #30
0
 //this function is called when create soldier button is clicked on information view.
 public void CreateSoldierOnMap()
 {
     InfoController.Instance().CreateSoldierOnMap();
 }
예제 #31
0
        public ClusterVNode(TFChunkDb db,
                            ClusterVNodeSettings vNodeSettings,
                            IGossipSeedSource gossipSeedSource,
                            InfoController infoController,
                            params ISubsystem[] subsystems)
        {
            Ensure.NotNull(db, "db");
            Ensure.NotNull(vNodeSettings, "vNodeSettings");
            Ensure.NotNull(gossipSeedSource, "gossipSeedSource");

#if DEBUG
            AddTask(_taskAddedTrigger.Task);
#endif

            var isSingleNode = vNodeSettings.ClusterNodeCount == 1;
            _nodeInfo = vNodeSettings.NodeInfo;
            _mainBus  = new InMemoryBus("MainBus");

            var forwardingProxy = new MessageForwardingProxy();
            if (vNodeSettings.EnableHistograms)
            {
                HistogramService.CreateHistograms();
                //start watching jitter
                HistogramService.StartJitterMonitor();
            }
            // MISC WORKERS
            _workerBuses = Enumerable.Range(0, vNodeSettings.WorkerThreads).Select(queueNum =>
                                                                                   new InMemoryBus(string.Format("Worker #{0} Bus", queueNum + 1),
                                                                                                   watchSlowMsg: true,
                                                                                                   slowMsgThreshold: TimeSpan.FromMilliseconds(200))).ToArray();
            _workersHandler = new MultiQueuedHandler(
                vNodeSettings.WorkerThreads,
                queueNum => new QueuedHandlerThreadPool(_workerBuses[queueNum],
                                                        string.Format("Worker #{0}", queueNum + 1),
                                                        groupName: "Workers",
                                                        watchSlowMsg: true,
                                                        slowMsgThreshold: TimeSpan.FromMilliseconds(200)));

            _subsystems = subsystems;

            _controller = new ClusterVNodeController((IPublisher)_mainBus, _nodeInfo, db, vNodeSettings, this, forwardingProxy, _subsystems);
            _mainQueue  = QueuedHandler.CreateQueuedHandler(_controller, "MainQueue");

            _controller.SetMainQueue(_mainQueue);

            //SELF
            _mainBus.Subscribe <SystemMessage.StateChangeMessage>(this);
            _mainBus.Subscribe <SystemMessage.BecomeShutdown>(this);
            // MONITORING
            var monitoringInnerBus   = new InMemoryBus("MonitoringInnerBus", watchSlowMsg: false);
            var monitoringRequestBus = new InMemoryBus("MonitoringRequestBus", watchSlowMsg: false);
            var monitoringQueue      = new QueuedHandlerThreadPool(monitoringInnerBus, "MonitoringQueue", true, TimeSpan.FromMilliseconds(100));
            var monitoring           = new MonitoringService(monitoringQueue,
                                                             monitoringRequestBus,
                                                             _mainQueue,
                                                             db.Config.WriterCheckpoint,
                                                             db.Config.Path,
                                                             vNodeSettings.StatsPeriod,
                                                             _nodeInfo.ExternalHttp,
                                                             vNodeSettings.StatsStorage,
                                                             _nodeInfo.ExternalTcp,
                                                             _nodeInfo.ExternalSecureTcp);
            _mainBus.Subscribe(monitoringQueue.WidenFrom <SystemMessage.SystemInit, Message>());
            _mainBus.Subscribe(monitoringQueue.WidenFrom <SystemMessage.StateChangeMessage, Message>());
            _mainBus.Subscribe(monitoringQueue.WidenFrom <SystemMessage.BecomeShuttingDown, Message>());
            _mainBus.Subscribe(monitoringQueue.WidenFrom <SystemMessage.BecomeShutdown, Message>());
            _mainBus.Subscribe(monitoringQueue.WidenFrom <ClientMessage.WriteEventsCompleted, Message>());
            monitoringInnerBus.Subscribe <SystemMessage.SystemInit>(monitoring);
            monitoringInnerBus.Subscribe <SystemMessage.StateChangeMessage>(monitoring);
            monitoringInnerBus.Subscribe <SystemMessage.BecomeShuttingDown>(monitoring);
            monitoringInnerBus.Subscribe <SystemMessage.BecomeShutdown>(monitoring);
            monitoringInnerBus.Subscribe <ClientMessage.WriteEventsCompleted>(monitoring);
            monitoringInnerBus.Subscribe <MonitoringMessage.GetFreshStats>(monitoring);
            monitoringInnerBus.Subscribe <MonitoringMessage.GetFreshTcpConnectionStats>(monitoring);

            var truncPos = db.Config.TruncateCheckpoint.Read();
            if (truncPos != -1)
            {
                Log.Info("Truncate checkpoint is present. Truncate: {0} (0x{0:X}), Writer: {1} (0x{1:X}), Chaser: {2} (0x{2:X}), Epoch: {3} (0x{3:X})",
                         truncPos, db.Config.WriterCheckpoint.Read(), db.Config.ChaserCheckpoint.Read(), db.Config.EpochCheckpoint.Read());
                var truncator = new TFChunkDbTruncator(db.Config);
                truncator.TruncateDb(truncPos);
            }

            // STORAGE SUBSYSTEM
            db.Open(vNodeSettings.VerifyDbHash);
            var indexPath  = vNodeSettings.Index ?? Path.Combine(db.Config.Path, "index");
            var readerPool = new ObjectPool <ITransactionFileReader>(
                "ReadIndex readers pool", ESConsts.PTableInitialReaderCount, ESConsts.PTableMaxReaderCount,
                () => new TFChunkReader(db, db.Config.WriterCheckpoint, optimizeReadSideCache: db.Config.OptimizeReadSideCache));
            var tableIndex = new TableIndex(indexPath,
                                            new XXHashUnsafe(),
                                            new Murmur3AUnsafe(),
                                            () => new HashListMemTable(vNodeSettings.IndexBitnessVersion, maxSize: vNodeSettings.MaxMemtableEntryCount * 2),
                                            () => new TFReaderLease(readerPool),
                                            vNodeSettings.IndexBitnessVersion,
                                            maxSizeForMemory: vNodeSettings.MaxMemtableEntryCount,
                                            maxTablesPerLevel: 2,
                                            inMem: db.Config.InMemDb,
                                            skipIndexVerify: vNodeSettings.SkipIndexVerify,
                                            indexCacheDepth: vNodeSettings.IndexCacheDepth);
            var readIndex = new ReadIndex(_mainQueue,
                                          readerPool,
                                          tableIndex,
                                          ESConsts.StreamInfoCacheCapacity,
                                          Application.IsDefined(Application.AdditionalCommitChecks),
                                          Application.IsDefined(Application.InfiniteMetastreams) ? int.MaxValue : 1,
                                          vNodeSettings.HashCollisionReadLimit,
                                          vNodeSettings.SkipIndexScanOnReads,
                                          db.Config.ReplicationCheckpoint);
            var writer       = new TFChunkWriter(db);
            var epochManager = new EpochManager(_mainQueue,
                                                ESConsts.CachedEpochCount,
                                                db.Config.EpochCheckpoint,
                                                writer,
                                                initialReaderCount: 1,
                                                maxReaderCount: 5,
                                                readerFactory: () => new TFChunkReader(db, db.Config.WriterCheckpoint, optimizeReadSideCache: db.Config.OptimizeReadSideCache));
            epochManager.Init();

            var storageWriter = new ClusterStorageWriterService(_mainQueue, _mainBus, vNodeSettings.MinFlushDelay,
                                                                db, writer, readIndex.IndexWriter, epochManager,
                                                                () => readIndex.LastCommitPosition); // subscribes internally
            AddTasks(storageWriter.Tasks);

            monitoringRequestBus.Subscribe <MonitoringMessage.InternalStatsRequest>(storageWriter);

            var storageReader = new StorageReaderService(_mainQueue, _mainBus, readIndex, vNodeSettings.ReaderThreadsCount, db.Config.WriterCheckpoint);
            _mainBus.Subscribe <SystemMessage.SystemInit>(storageReader);
            _mainBus.Subscribe <SystemMessage.BecomeShuttingDown>(storageReader);
            _mainBus.Subscribe <SystemMessage.BecomeShutdown>(storageReader);
            monitoringRequestBus.Subscribe <MonitoringMessage.InternalStatsRequest>(storageReader);

            var indexCommitterService = new IndexCommitterService(readIndex.IndexCommitter, _mainQueue, db.Config.ReplicationCheckpoint, db.Config.WriterCheckpoint, vNodeSettings.CommitAckCount);
            AddTask(indexCommitterService.Task);

            _mainBus.Subscribe <SystemMessage.StateChangeMessage>(indexCommitterService);
            _mainBus.Subscribe <SystemMessage.BecomeShuttingDown>(indexCommitterService);
            _mainBus.Subscribe <StorageMessage.CommitAck>(indexCommitterService);

            var chaser        = new TFChunkChaser(db, db.Config.WriterCheckpoint, db.Config.ChaserCheckpoint, db.Config.OptimizeReadSideCache);
            var storageChaser = new StorageChaser(_mainQueue, db.Config.WriterCheckpoint, chaser, indexCommitterService, epochManager);
            AddTask(storageChaser.Task);

#if DEBUG
            QueueStatsCollector.InitializeCheckpoints(
                _nodeInfo.DebugIndex, db.Config.WriterCheckpoint, db.Config.ChaserCheckpoint);
#endif
            _mainBus.Subscribe <SystemMessage.SystemInit>(storageChaser);
            _mainBus.Subscribe <SystemMessage.SystemStart>(storageChaser);
            _mainBus.Subscribe <SystemMessage.BecomeShuttingDown>(storageChaser);

            // AUTHENTICATION INFRASTRUCTURE - delegate to plugins
            _internalAuthenticationProvider = vNodeSettings.AuthenticationProviderFactory.BuildAuthenticationProvider(_mainQueue, _mainBus, _workersHandler, _workerBuses);

            Ensure.NotNull(_internalAuthenticationProvider, "authenticationProvider");

            {
                // EXTERNAL TCP
                if (!vNodeSettings.DisableInsecureTCP)
                {
                    var extTcpService = new TcpService(_mainQueue, _nodeInfo.ExternalTcp, _workersHandler,
                                                       TcpServiceType.External, TcpSecurityType.Normal, new ClientTcpDispatcher(),
                                                       vNodeSettings.ExtTcpHeartbeatInterval, vNodeSettings.ExtTcpHeartbeatTimeout,
                                                       _internalAuthenticationProvider, null, vNodeSettings.ConnectionPendingSendBytesThreshold);
                    _mainBus.Subscribe <SystemMessage.SystemInit>(extTcpService);
                    _mainBus.Subscribe <SystemMessage.SystemStart>(extTcpService);
                    _mainBus.Subscribe <SystemMessage.BecomeShuttingDown>(extTcpService);
                }

                // EXTERNAL SECURE TCP
                if (_nodeInfo.ExternalSecureTcp != null)
                {
                    var extSecTcpService = new TcpService(_mainQueue, _nodeInfo.ExternalSecureTcp, _workersHandler,
                                                          TcpServiceType.External, TcpSecurityType.Secure, new ClientTcpDispatcher(),
                                                          vNodeSettings.ExtTcpHeartbeatInterval, vNodeSettings.ExtTcpHeartbeatTimeout,
                                                          _internalAuthenticationProvider, vNodeSettings.Certificate, vNodeSettings.ConnectionPendingSendBytesThreshold);
                    _mainBus.Subscribe <SystemMessage.SystemInit>(extSecTcpService);
                    _mainBus.Subscribe <SystemMessage.SystemStart>(extSecTcpService);
                    _mainBus.Subscribe <SystemMessage.BecomeShuttingDown>(extSecTcpService);
                }
                if (!isSingleNode)
                {
                    // INTERNAL TCP
                    if (!vNodeSettings.DisableInsecureTCP)
                    {
                        var intTcpService = new TcpService(_mainQueue, _nodeInfo.InternalTcp, _workersHandler,
                                                           TcpServiceType.Internal, TcpSecurityType.Normal,
                                                           new InternalTcpDispatcher(),
                                                           vNodeSettings.IntTcpHeartbeatInterval, vNodeSettings.IntTcpHeartbeatTimeout,
                                                           _internalAuthenticationProvider, null, ESConsts.UnrestrictedPendingSendBytes);
                        _mainBus.Subscribe <SystemMessage.SystemInit>(intTcpService);
                        _mainBus.Subscribe <SystemMessage.SystemStart>(intTcpService);
                        _mainBus.Subscribe <SystemMessage.BecomeShuttingDown>(intTcpService);
                    }

                    // INTERNAL SECURE TCP
                    if (_nodeInfo.InternalSecureTcp != null)
                    {
                        var intSecTcpService = new TcpService(_mainQueue, _nodeInfo.InternalSecureTcp, _workersHandler,
                                                              TcpServiceType.Internal, TcpSecurityType.Secure,
                                                              new InternalTcpDispatcher(),
                                                              vNodeSettings.IntTcpHeartbeatInterval, vNodeSettings.IntTcpHeartbeatTimeout,
                                                              _internalAuthenticationProvider, vNodeSettings.Certificate, ESConsts.UnrestrictedPendingSendBytes);
                        _mainBus.Subscribe <SystemMessage.SystemInit>(intSecTcpService);
                        _mainBus.Subscribe <SystemMessage.SystemStart>(intSecTcpService);
                        _mainBus.Subscribe <SystemMessage.BecomeShuttingDown>(intSecTcpService);
                    }
                }
            }

            SubscribeWorkers(bus =>
            {
                var tcpSendService = new TcpSendService();
                // ReSharper disable RedundantTypeArgumentsOfMethod
                bus.Subscribe <TcpMessage.TcpSend>(tcpSendService);
                // ReSharper restore RedundantTypeArgumentsOfMethod
            });

            var httpAuthenticationProviders = new List <HttpAuthenticationProvider>
            {
                new BasicHttpAuthenticationProvider(_internalAuthenticationProvider),
            };
            if (vNodeSettings.EnableTrustedAuth)
            {
                httpAuthenticationProviders.Add(new TrustedHttpAuthenticationProvider());
            }
            httpAuthenticationProviders.Add(new AnonymousHttpAuthenticationProvider());

            var httpPipe        = new HttpMessagePipe();
            var httpSendService = new HttpSendService(httpPipe, forwardRequests: true);
            _mainBus.Subscribe <SystemMessage.StateChangeMessage>(httpSendService);
            _mainBus.Subscribe(new WideningHandler <HttpMessage.SendOverHttp, Message>(_workersHandler));
            SubscribeWorkers(bus =>
            {
                bus.Subscribe <HttpMessage.HttpSend>(httpSendService);
                bus.Subscribe <HttpMessage.HttpSendPart>(httpSendService);
                bus.Subscribe <HttpMessage.HttpBeginSend>(httpSendService);
                bus.Subscribe <HttpMessage.HttpEndSend>(httpSendService);
                bus.Subscribe <HttpMessage.SendOverHttp>(httpSendService);
            });

            _mainBus.Subscribe <SystemMessage.StateChangeMessage>(infoController);

            var adminController     = new AdminController(_mainQueue, _workersHandler);
            var pingController      = new PingController();
            var histogramController = new HistogramController();
            var statController      = new StatController(monitoringQueue, _workersHandler);
            var atomController      = new AtomController(httpSendService, _mainQueue, _workersHandler, vNodeSettings.DisableHTTPCaching);
            var gossipController    = new GossipController(_mainQueue, _workersHandler, vNodeSettings.GossipTimeout);
            var persistentSubscriptionController = new PersistentSubscriptionController(httpSendService, _mainQueue, _workersHandler);
            var electController = new ElectController(_mainQueue);

            // HTTP SENDERS
            gossipController.SubscribeSenders(httpPipe);
            electController.SubscribeSenders(httpPipe);

            // EXTERNAL HTTP
            _externalHttpService = new HttpService(ServiceAccessibility.Public, _mainQueue, new TrieUriRouter(),
                                                   _workersHandler, vNodeSettings.LogHttpRequests, vNodeSettings.GossipAdvertiseInfo.AdvertiseExternalIPAs,
                                                   vNodeSettings.GossipAdvertiseInfo.AdvertiseExternalHttpPortAs, vNodeSettings.ExtHttpPrefixes);
            _externalHttpService.SetupController(persistentSubscriptionController);
            if (vNodeSettings.AdminOnPublic)
            {
                _externalHttpService.SetupController(adminController);
            }
            _externalHttpService.SetupController(pingController);
            _externalHttpService.SetupController(infoController);
            if (vNodeSettings.StatsOnPublic)
            {
                _externalHttpService.SetupController(statController);
            }
            _externalHttpService.SetupController(atomController);
            if (vNodeSettings.GossipOnPublic)
            {
                _externalHttpService.SetupController(gossipController);
            }
            _externalHttpService.SetupController(histogramController);

            _mainBus.Subscribe <SystemMessage.SystemInit>(_externalHttpService);
            _mainBus.Subscribe <SystemMessage.BecomeShuttingDown>(_externalHttpService);
            _mainBus.Subscribe <HttpMessage.PurgeTimedOutRequests>(_externalHttpService);
            // INTERNAL HTTP
            if (!isSingleNode)
            {
                _internalHttpService = new HttpService(ServiceAccessibility.Private, _mainQueue, new TrieUriRouter(),
                                                       _workersHandler, vNodeSettings.LogHttpRequests, vNodeSettings.GossipAdvertiseInfo.AdvertiseInternalIPAs,
                                                       vNodeSettings.GossipAdvertiseInfo.AdvertiseInternalHttpPortAs, vNodeSettings.IntHttpPrefixes);
                _internalHttpService.SetupController(adminController);
                _internalHttpService.SetupController(pingController);
                _internalHttpService.SetupController(infoController);
                _internalHttpService.SetupController(statController);
                _internalHttpService.SetupController(atomController);
                _internalHttpService.SetupController(gossipController);
                _internalHttpService.SetupController(electController);
                _internalHttpService.SetupController(histogramController);
                _internalHttpService.SetupController(persistentSubscriptionController);
            }
            // Authentication plugin HTTP
            vNodeSettings.AuthenticationProviderFactory.RegisterHttpControllers(_externalHttpService, _internalHttpService, httpSendService, _mainQueue, _workersHandler);
            if (_internalHttpService != null)
            {
                _mainBus.Subscribe <SystemMessage.SystemInit>(_internalHttpService);
                _mainBus.Subscribe <SystemMessage.BecomeShuttingDown>(_internalHttpService);
                _mainBus.Subscribe <HttpMessage.PurgeTimedOutRequests>(_internalHttpService);
            }

            SubscribeWorkers(bus =>
            {
                HttpService.CreateAndSubscribePipeline(bus, httpAuthenticationProviders.ToArray());
            });

            // REQUEST FORWARDING
            var forwardingService = new RequestForwardingService(_mainQueue, forwardingProxy, TimeSpan.FromSeconds(1));
            _mainBus.Subscribe <SystemMessage.SystemStart>(forwardingService);
            _mainBus.Subscribe <SystemMessage.RequestForwardingTimerTick>(forwardingService);
            _mainBus.Subscribe <ClientMessage.NotHandled>(forwardingService);
            _mainBus.Subscribe <ClientMessage.WriteEventsCompleted>(forwardingService);
            _mainBus.Subscribe <ClientMessage.TransactionStartCompleted>(forwardingService);
            _mainBus.Subscribe <ClientMessage.TransactionWriteCompleted>(forwardingService);
            _mainBus.Subscribe <ClientMessage.TransactionCommitCompleted>(forwardingService);
            _mainBus.Subscribe <ClientMessage.DeleteStreamCompleted>(forwardingService);

            // REQUEST MANAGEMENT
            var requestManagement = new RequestManagementService(_mainQueue,
                                                                 vNodeSettings.PrepareAckCount,
                                                                 vNodeSettings.PrepareTimeout,
                                                                 vNodeSettings.CommitTimeout,
                                                                 vNodeSettings.BetterOrdering);
            _mainBus.Subscribe <SystemMessage.SystemInit>(requestManagement);
            _mainBus.Subscribe <ClientMessage.WriteEvents>(requestManagement);
            _mainBus.Subscribe <ClientMessage.TransactionStart>(requestManagement);
            _mainBus.Subscribe <ClientMessage.TransactionWrite>(requestManagement);
            _mainBus.Subscribe <ClientMessage.TransactionCommit>(requestManagement);
            _mainBus.Subscribe <ClientMessage.DeleteStream>(requestManagement);
            _mainBus.Subscribe <StorageMessage.RequestCompleted>(requestManagement);
            _mainBus.Subscribe <StorageMessage.CheckStreamAccessCompleted>(requestManagement);
            _mainBus.Subscribe <StorageMessage.AlreadyCommitted>(requestManagement);
            _mainBus.Subscribe <StorageMessage.CommitReplicated>(requestManagement);
            _mainBus.Subscribe <StorageMessage.PrepareAck>(requestManagement);
            _mainBus.Subscribe <StorageMessage.WrongExpectedVersion>(requestManagement);
            _mainBus.Subscribe <StorageMessage.InvalidTransaction>(requestManagement);
            _mainBus.Subscribe <StorageMessage.StreamDeleted>(requestManagement);
            _mainBus.Subscribe <StorageMessage.RequestManagerTimerTick>(requestManagement);

            // SUBSCRIPTIONS
            var subscrBus   = new InMemoryBus("SubscriptionsBus", true, TimeSpan.FromMilliseconds(50));
            var subscrQueue = new QueuedHandlerThreadPool(subscrBus, "Subscriptions", false);
            _mainBus.Subscribe(subscrQueue.WidenFrom <SystemMessage.SystemStart, Message>());
            _mainBus.Subscribe(subscrQueue.WidenFrom <SystemMessage.BecomeShuttingDown, Message>());
            _mainBus.Subscribe(subscrQueue.WidenFrom <TcpMessage.ConnectionClosed, Message>());
            _mainBus.Subscribe(subscrQueue.WidenFrom <ClientMessage.SubscribeToStream, Message>());
            _mainBus.Subscribe(subscrQueue.WidenFrom <ClientMessage.UnsubscribeFromStream, Message>());
            _mainBus.Subscribe(subscrQueue.WidenFrom <SubscriptionMessage.PollStream, Message>());
            _mainBus.Subscribe(subscrQueue.WidenFrom <SubscriptionMessage.CheckPollTimeout, Message>());
            _mainBus.Subscribe(subscrQueue.WidenFrom <StorageMessage.EventCommitted, Message>());

            var subscription = new SubscriptionsService(_mainQueue, subscrQueue, readIndex);
            subscrBus.Subscribe <SystemMessage.SystemStart>(subscription);
            subscrBus.Subscribe <SystemMessage.BecomeShuttingDown>(subscription);
            subscrBus.Subscribe <TcpMessage.ConnectionClosed>(subscription);
            subscrBus.Subscribe <ClientMessage.SubscribeToStream>(subscription);
            subscrBus.Subscribe <ClientMessage.UnsubscribeFromStream>(subscription);
            subscrBus.Subscribe <SubscriptionMessage.PollStream>(subscription);
            subscrBus.Subscribe <SubscriptionMessage.CheckPollTimeout>(subscription);
            subscrBus.Subscribe <StorageMessage.EventCommitted>(subscription);

            // PERSISTENT SUBSCRIPTIONS
            // IO DISPATCHER
            var ioDispatcher = new IODispatcher(_mainQueue, new PublishEnvelope(_mainQueue));
            _mainBus.Subscribe <ClientMessage.ReadStreamEventsBackwardCompleted>(ioDispatcher.BackwardReader);
            _mainBus.Subscribe <ClientMessage.WriteEventsCompleted>(ioDispatcher.Writer);
            _mainBus.Subscribe <ClientMessage.ReadStreamEventsForwardCompleted>(ioDispatcher.ForwardReader);
            _mainBus.Subscribe <ClientMessage.DeleteStreamCompleted>(ioDispatcher.StreamDeleter);
            _mainBus.Subscribe(ioDispatcher);
            var perSubscrBus   = new InMemoryBus("PersistentSubscriptionsBus", true, TimeSpan.FromMilliseconds(50));
            var perSubscrQueue = new QueuedHandlerThreadPool(perSubscrBus, "PersistentSubscriptions", false);
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <SystemMessage.StateChangeMessage, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <TcpMessage.ConnectionClosed, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <ClientMessage.CreatePersistentSubscription, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <ClientMessage.UpdatePersistentSubscription, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <ClientMessage.DeletePersistentSubscription, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <ClientMessage.ConnectToPersistentSubscription, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <ClientMessage.UnsubscribeFromStream, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <ClientMessage.PersistentSubscriptionAckEvents, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <ClientMessage.PersistentSubscriptionNackEvents, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <ClientMessage.ReplayAllParkedMessages, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <ClientMessage.ReplayParkedMessage, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <ClientMessage.ReadNextNPersistentMessages, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <StorageMessage.EventCommitted, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <MonitoringMessage.GetAllPersistentSubscriptionStats, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <MonitoringMessage.GetStreamPersistentSubscriptionStats, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <MonitoringMessage.GetPersistentSubscriptionStats, Message>());
            _mainBus.Subscribe(perSubscrQueue.WidenFrom <SubscriptionMessage.PersistentSubscriptionTimerTick, Message>());

            //TODO CC can have multiple threads working on subscription if partition
            var consumerStrategyRegistry = new PersistentSubscriptionConsumerStrategyRegistry(_mainQueue, _mainBus, vNodeSettings.AdditionalConsumerStrategies);
            var persistentSubscription   = new PersistentSubscriptionService(perSubscrQueue, readIndex, ioDispatcher, _mainQueue, consumerStrategyRegistry);
            perSubscrBus.Subscribe <SystemMessage.BecomeShuttingDown>(persistentSubscription);
            perSubscrBus.Subscribe <SystemMessage.BecomeMaster>(persistentSubscription);
            perSubscrBus.Subscribe <SystemMessage.StateChangeMessage>(persistentSubscription);
            perSubscrBus.Subscribe <TcpMessage.ConnectionClosed>(persistentSubscription);
            perSubscrBus.Subscribe <ClientMessage.ConnectToPersistentSubscription>(persistentSubscription);
            perSubscrBus.Subscribe <ClientMessage.UnsubscribeFromStream>(persistentSubscription);
            perSubscrBus.Subscribe <ClientMessage.PersistentSubscriptionAckEvents>(persistentSubscription);
            perSubscrBus.Subscribe <ClientMessage.PersistentSubscriptionNackEvents>(persistentSubscription);
            perSubscrBus.Subscribe <StorageMessage.EventCommitted>(persistentSubscription);
            perSubscrBus.Subscribe <ClientMessage.DeletePersistentSubscription>(persistentSubscription);
            perSubscrBus.Subscribe <ClientMessage.CreatePersistentSubscription>(persistentSubscription);
            perSubscrBus.Subscribe <ClientMessage.UpdatePersistentSubscription>(persistentSubscription);
            perSubscrBus.Subscribe <ClientMessage.ReplayAllParkedMessages>(persistentSubscription);
            perSubscrBus.Subscribe <ClientMessage.ReplayParkedMessage>(persistentSubscription);
            perSubscrBus.Subscribe <ClientMessage.ReadNextNPersistentMessages>(persistentSubscription);
            perSubscrBus.Subscribe <MonitoringMessage.GetAllPersistentSubscriptionStats>(persistentSubscription);
            perSubscrBus.Subscribe <MonitoringMessage.GetStreamPersistentSubscriptionStats>(persistentSubscription);
            perSubscrBus.Subscribe <MonitoringMessage.GetPersistentSubscriptionStats>(persistentSubscription);
            perSubscrBus.Subscribe <SubscriptionMessage.PersistentSubscriptionTimerTick>(persistentSubscription);

            // STORAGE SCAVENGER
            var scavengerLogManager = new TFChunkScavengerLogManager(_nodeInfo.ExternalHttp.ToString(), TimeSpan.FromDays(vNodeSettings.ScavengeHistoryMaxAge), ioDispatcher);
            var storageScavenger    = new StorageScavenger(db,
                                                           tableIndex,
                                                           readIndex,
                                                           scavengerLogManager,
                                                           vNodeSettings.AlwaysKeepScavenged,
                                                           !vNodeSettings.DisableScavengeMerging,
                                                           unsafeIgnoreHardDeletes: vNodeSettings.UnsafeIgnoreHardDeletes);

            // ReSharper disable RedundantTypeArgumentsOfMethod
            _mainBus.Subscribe <ClientMessage.ScavengeDatabase>(storageScavenger);
            _mainBus.Subscribe <ClientMessage.StopDatabaseScavenge>(storageScavenger);
            _mainBus.Subscribe <SystemMessage.StateChangeMessage>(storageScavenger);
            // ReSharper restore RedundantTypeArgumentsOfMethod


            // TIMER
            _timeProvider = new RealTimeProvider();
            var threadBasedScheduler = new ThreadBasedScheduler(_timeProvider);
            AddTask(threadBasedScheduler.Task);
            _timerService = new TimerService(threadBasedScheduler);
            _mainBus.Subscribe <SystemMessage.BecomeShutdown>(_timerService);
            _mainBus.Subscribe <TimerMessage.Schedule>(_timerService);

            var gossipInfo = new VNodeInfo(_nodeInfo.InstanceId, _nodeInfo.DebugIndex,
                                           vNodeSettings.GossipAdvertiseInfo.InternalTcp,
                                           vNodeSettings.GossipAdvertiseInfo.InternalSecureTcp,
                                           vNodeSettings.GossipAdvertiseInfo.ExternalTcp,
                                           vNodeSettings.GossipAdvertiseInfo.ExternalSecureTcp,
                                           vNodeSettings.GossipAdvertiseInfo.InternalHttp,
                                           vNodeSettings.GossipAdvertiseInfo.ExternalHttp);
            if (!isSingleNode)
            {
                // MASTER REPLICATION
                var masterReplicationService = new MasterReplicationService(_mainQueue, gossipInfo.InstanceId, db, _workersHandler,
                                                                            epochManager, vNodeSettings.ClusterNodeCount);
                AddTask(masterReplicationService.Task);
                _mainBus.Subscribe <SystemMessage.SystemStart>(masterReplicationService);
                _mainBus.Subscribe <SystemMessage.StateChangeMessage>(masterReplicationService);
                _mainBus.Subscribe <ReplicationMessage.ReplicaSubscriptionRequest>(masterReplicationService);
                _mainBus.Subscribe <ReplicationMessage.ReplicaLogPositionAck>(masterReplicationService);
                monitoringInnerBus.Subscribe <ReplicationMessage.GetReplicationStats>(masterReplicationService);

                // REPLICA REPLICATION
                var replicaService = new ReplicaService(_mainQueue, db, epochManager, _workersHandler, _internalAuthenticationProvider,
                                                        gossipInfo, vNodeSettings.UseSsl, vNodeSettings.SslTargetHost, vNodeSettings.SslValidateServer,
                                                        vNodeSettings.IntTcpHeartbeatTimeout, vNodeSettings.ExtTcpHeartbeatInterval);
                _mainBus.Subscribe <SystemMessage.StateChangeMessage>(replicaService);
                _mainBus.Subscribe <ReplicationMessage.ReconnectToMaster>(replicaService);
                _mainBus.Subscribe <ReplicationMessage.SubscribeToMaster>(replicaService);
                _mainBus.Subscribe <ReplicationMessage.AckLogPosition>(replicaService);
                _mainBus.Subscribe <StorageMessage.PrepareAck>(replicaService);
                _mainBus.Subscribe <StorageMessage.CommitAck>(replicaService);
                _mainBus.Subscribe <ClientMessage.TcpForwardMessage>(replicaService);
            }

            // ELECTIONS

            var electionsService = new ElectionsService(_mainQueue, gossipInfo, vNodeSettings.ClusterNodeCount,
                                                        db.Config.WriterCheckpoint, db.Config.ChaserCheckpoint,
                                                        epochManager, () => readIndex.LastCommitPosition, vNodeSettings.NodePriority);
            electionsService.SubscribeMessages(_mainBus);
            if (!isSingleNode || vNodeSettings.GossipOnSingleNode)
            {
                // GOSSIP

                var gossip = new NodeGossipService(_mainQueue, gossipSeedSource, gossipInfo, db.Config.WriterCheckpoint,
                                                   db.Config.ChaserCheckpoint, epochManager, () => readIndex.LastCommitPosition,
                                                   vNodeSettings.NodePriority, vNodeSettings.GossipInterval, vNodeSettings.GossipAllowedTimeDifference);
                _mainBus.Subscribe <SystemMessage.SystemInit>(gossip);
                _mainBus.Subscribe <GossipMessage.RetrieveGossipSeedSources>(gossip);
                _mainBus.Subscribe <GossipMessage.GotGossipSeedSources>(gossip);
                _mainBus.Subscribe <GossipMessage.Gossip>(gossip);
                _mainBus.Subscribe <GossipMessage.GossipReceived>(gossip);
                _mainBus.Subscribe <SystemMessage.StateChangeMessage>(gossip);
                _mainBus.Subscribe <GossipMessage.GossipSendFailed>(gossip);
                _mainBus.Subscribe <SystemMessage.VNodeConnectionEstablished>(gossip);
                _mainBus.Subscribe <SystemMessage.VNodeConnectionLost>(gossip);
            }
            AddTasks(_workersHandler.Start());
            AddTask(_mainQueue.Start());
            AddTask(monitoringQueue.Start());
            AddTask(subscrQueue.Start());
            AddTask(perSubscrQueue.Start());

            if (subsystems != null)
            {
                foreach (var subsystem in subsystems)
                {
                    var http = isSingleNode ? new [] { _externalHttpService } : new [] { _internalHttpService, _externalHttpService };
                    subsystem.Register(new StandardComponents(db, _mainQueue, _mainBus, _timerService, _timeProvider, httpSendService, http, _workersHandler));
                }
            }
        }
예제 #32
0
 private void Awake()
 {
     Instance = this;
 }