예제 #1
0
        //---------------------------------------------------------------------
        public override Task OnActivateAsync()
        {
            DelayDeactivation(TimeSpan.FromMinutes(60));

            Tm4CouchbaseQue = 0f;
            Subscribers     = new ObserverSubscriptionManager <ICellPlayerObserver>();

            if (this.State != null && !string.IsNullOrEmpty(this.State.entity_guid))
            {
                if (AsyncStream == null)
                {
                    IStreamProvider stream_provider = GetStreamProvider(StringDef.SMSProvider);
                    AsyncStream = stream_provider.GetStream <StreamData>(this.GetPrimaryKey(), "Friend");
                }

                if (CouchbaseQue == null)
                {
                    CouchbaseQue = new CouchbaseQue("EtPlayer", this.State.entity_guid);
                }

                EtPlayer = EntityMgr.Instance.genEntity <EtPlayer, GrainCellPlayer>(this.State, this);
            }

            StopwatchUpdate   = new Stopwatch();
            TimerHandleUpdate = RegisterTimer((_) => _update(), null, TimeSpan.FromMilliseconds(50), TimeSpan.FromMilliseconds(50));
            TimerHandleSave   = RegisterTimer((_) => _save(), null, TimeSpan.FromMilliseconds(10000), TimeSpan.FromMilliseconds(10000));

            return(base.OnActivateAsync());
        }
예제 #2
0
        //---------------------------------------------------------------------
        async Task _update()
        {
            float tm = (float)StopwatchUpdate.Elapsed.TotalSeconds;

            StopwatchUpdate.Restart();

            if (EtPlayer != null)
            {
                EtPlayer.update(tm);

                if (CouchbaseQue != null)
                {
                    Tm4CouchbaseQue += tm;
                    if (Tm4CouchbaseQue > 1f)
                    {
                        Tm4CouchbaseQue = 0f;
                        await CouchbaseQue.queryThenCacheAllData();
                    }

                    if (CouchbaseQue.Count > 0)
                    {
                        var que_data = await CouchbaseQue.popData();

                        if (que_data.type > 0)
                        {
                            var co_player = EtPlayer.getComponent <CellPlayer <DefPlayer> >();
                            await co_player.recvCouchbaseQueData(que_data);
                        }
                    }
                }
            }
        }
예제 #3
0
        //---------------------------------------------------------------------
        public override Task OnActivateAsync()
        {
            DelayDeactivation(TimeSpan.FromMinutes(1));

            PlayerServerState = PlayerServerState.Offline;

            string que_id = this.GetPrimaryKey().ToString();

            CouchbaseQue = new CouchbaseQue("EtPlayer", que_id);

            TimerHandleUpdate = RegisterTimer((_) => _update(), null, TimeSpan.FromMilliseconds(1000), TimeSpan.FromMilliseconds(1000));

            return(base.OnActivateAsync());
        }
예제 #4
0
        //---------------------------------------------------------------------
        // Client->Cell的请求
        async Task <EntityData> ICellPlayer.c2sEnterWorld(NewPlayerInfo new_player_info)
        {
            Logger.Info("c2sEnterWorld() GrainId={0}", this.GetPrimaryKey().ToString());

            // 新建角色
            if (EtPlayer == null)
            {
                if (AsyncStream == null)
                {
                    IStreamProvider stream_provider = GetStreamProvider(StringDef.SMSProvider);
                    AsyncStream = stream_provider.GetStream <StreamData>(this.GetPrimaryKey(), "Friend");
                }

                if (CouchbaseQue == null)
                {
                    CouchbaseQue = new CouchbaseQue("EtPlayer", new_player_info.et_player_guid);
                }

                bool  exist     = true;
                ulong player_id = 100;
                //do
                //{
                //    player_id = (ulong)CellApp.Instance.Rd.next(1000000, 9999999);
                //    var grain_playerservice = GF.GetGrain<ICellPlayerService>(0);
                //    exist = await grain_playerservice.playerIdExist(player_id);
                //} while (exist);

                EbLog.Note("-------------------------------");
                EbLog.Note("新创建玩家");
                EbLog.Note("AccountName=" + new_player_info.account_name);
                EbLog.Note("PlayerId=" + player_id);
                EbLog.Note("-------------------------------");

                var et_player_data = new EntityData();
                et_player_data.entity_type                 = typeof(EtPlayer).Name;
                et_player_data.entity_guid                 = new_player_info.et_player_guid;
                et_player_data.list_component              = new List <ComponentData>();
                et_player_data.cache_data                  = new Dictionary <string, object>();
                et_player_data.cache_data["NewPlayer"]     = true;
                et_player_data.cache_data["NewPlayerInfo"] = new_player_info;
                et_player_data.cache_data["NewPlayerId"]   = player_id;
                EtPlayer = EntityMgr.Instance.genEntity <EtPlayer, GrainCellPlayer>(et_player_data, this);
                State    = EtPlayer.genEntityData4SaveDb();
                await WriteStateAsync();
            }

            return(EtPlayer.genEntityData4NetSync((byte)NodeType.Client));
        }