//--------------------------------------------------------------------- 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()); }
//--------------------------------------------------------------------- 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); } } } } }
//--------------------------------------------------------------------- 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()); }
//--------------------------------------------------------------------- // 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)); }