public void Execute()
        {
            var channel = _contexts.session.clientSessionObjects.NetworkChannel;
            var token   = _contexts.session.clientSessionObjects.LoginToken;

            if (channel != null && channel.IsConnected)
            {
                if (!_loginSended)
                {
                    _loginSended = true;
                    var message = LoginMessage.Allocate();
                    message.Token      = token;
                    message.LoginStage = ELoginStage.RequestSnapshot;
                    message.ComponentSerializerVersion = ComponentSerializerManager.HashMd5;
                    channel.SendReliable((int)EClient2ServerMessage.Login, message);

                    _logger.InfoFormat("Sending Login Message {0}", message);
                    message.ReleaseReference();
                }

                if (_loginSuccReceived)
                {
                    _sessionState.FullfillExitCondition(typeof(RequestSnapshotSystem));
                }
            }
        }
Beispiel #2
0
        public void Execute()
        {
            if (SharedConfig.IsOffline)
            {
                if (!_loginSended)
                {
                    _loginSended = true;
                    var sessionObjects             = _contexts.session.commonSession;
                    IEntityIdGenerator idGenerator = sessionObjects.EntityIdGenerator;
                    var id = idGenerator.GetNextEntityId();
                    var _offlineSelector = new OfflineSnapshotSelector(new EntityKey(id, (int)EEntityType.Player),
                                                                       _contexts.session.commonSession.GameContexts);
                    _contexts.session.clientSessionObjects.SnapshotSelectorContainer.SnapshotSelector =
                        _offlineSelector;

                    _contexts.session.clientSessionObjects.SimulationTimer.CurrentTime = 0;
                    _contexts.session.entityFactoryObject.SceneObjectEntityFactory     = new ServerSceneObjectEntityFactory(
                        _contexts.sceneObject, _contexts.player, sessionObjects.EntityIdGenerator, sessionObjects.EntityIdGenerator,
                        _contexts.session.currentTimeObject);
                    _contexts.session.entityFactoryObject.MapObjectEntityFactory =
                        new ServerMapObjectEntityFactory(_contexts.mapObject, sessionObjects.EntityIdGenerator);

                    IPlayerInfo playerInfo = TestUtility.CreateTestPlayer();
                    playerInfo.EntityId = id;
                    var player = PlayerEntityFactory.CreateNewPlayerEntity(_contexts.player,
                                                                           SingletonManager.Get <MapsDescription>().SceneParameters.PlayerBirthPosition, playerInfo, true, false);
                    _offlineSelector.Init();
                    _sessionState.FullfillExitCondition(typeof(RequestPlayerInfoSystem));
                    SingletonManager.Get <SubProgressBlackBoard>().Step();
                }
            }
            else
            {
                var channel = _contexts.session.clientSessionObjects.NetworkChannel;
                var token   = _contexts.session.clientSessionObjects.LoginToken;
                if (channel != null && channel.IsConnected)
                {
                    if (!_loginSended)
                    {
                        _loginSended = true;
                        var message = LoginMessage.Allocate();
                        message.Token      = token;
                        message.LoginStage = ELoginStage.GetPlayerInfo;
                        message.ComponentSerializerVersion = ComponentSerializerManager.HashMd5;
                        channel.SendReliable((int)EClient2ServerMessage.Login, message);

                        _logger.InfoFormat("Sending Login Message {0}", message);
                        message.ReleaseReference();
                    }

                    if (_loginSuccReceived)
                    {
                        _sessionState.FullfillExitCondition(typeof(RequestPlayerInfoSystem));
                        SingletonManager.Get <SubProgressBlackBoard>().Step();
                    }
                }
            }
        }
Beispiel #3
0
        public void Execute()
        {
            var channel = _contexts.session.clientSessionObjects.NetworkChannel;
            var token   = _contexts.session.clientSessionObjects.LoginToken;

            if (channel != null && channel.IsConnected && !_loginSuccReceived)
            {
                //send to server every 1 second.
                var currentTime = Time.time;
                if (currentTime - _lastSendTime > 1.0f)
                {
                    var message = LoginMessage.Allocate();
                    message.Token      = token;
                    message.LoginStage = ELoginStage.PreLogin;
                    message.ComponentSerializerVersion = ComponentSerializerManager.HashMd5;
                    channel.SendReliable((int)EClient2ServerMessage.Login, message);

                    _logger.InfoFormat("Sending Login Message {0}", message);
                    message.ReleaseReference();

                    _lastSendTime = currentTime;
                }
            }
        }