Example #1
0
        public IEnumerator LoadPlayer(Coroutine coroutine,
                                      ulong clientId,
                                      string name,
                                      AsyncReturnValue <PlayerController> ret,
                                      PlayerManager _this)
        {
            ret.Value = null;
            var dbAccoutGuid = LoginServer.Instance.DB.Get <DBUlong>(coroutine, DataCategory.LoginPlayerName,
                                                                     name);

            yield return(dbAccoutGuid);

            if (dbAccoutGuid.Data == null)
            {
                yield break;
            }
            var dbAccout = LoginServer.Instance.DB.Get <DBPlayerLogin>(coroutine, DataCategory.LoginPlayer,
                                                                       dbAccoutGuid.Data.Value);

            yield return(dbAccout);

            if (dbAccout.Data == null)
            {
                yield break;
            }
            var playerController = new PlayerController();

            playerController.DbData = dbAccout.Data;
            ret.Value = playerController;
        }
Example #2
0
 public IEnumerator LoadPlayer(Coroutine coroutine,
                               ulong clientId,
                               string name,
                               AsyncReturnValue <PlayerController> ret)
 {
     return(mImpl.LoadPlayer(coroutine, clientId, name, ret, this));
 }
        public IEnumerator SSNotifyCharacterOnConnet(Coroutine coroutine,
                                                     RankService _this,
                                                     SSNotifyCharacterOnConnetInMessage msg)
        {
            var characterId = msg.Request.CharacterId;
            var clientId    = msg.Request.ClientId;
            var proxy       = new RankProxy(_this, characterId, clientId);

            _this.Proxys[characterId] = proxy;

            var ret = AsyncReturnValue <bool> .Create();

            var subCo = CoroutineFactory.NewSubroutine(OnConnected, coroutine, proxy, ret);

            if (subCo.MoveNext())
            {
                yield return(subCo);
            }
            var isOk = ret.Value;

            ret.Dispose();
            if (isOk)
            {
                msg.Reply((int)ErrorCodes.OK);
            }
            else
            {
                msg.Reply((int)ErrorCodes.ConnectFail);
            }
        }
Example #4
0
 public static IEnumerator GmCommand(Coroutine co,
                                     ulong characterId,
                                     string command,
                                     AsyncReturnValue <ErrorCodes> err)
 {
     return(mImpl.GmCommand(co, characterId, command, err));
 }
Example #5
0
        //开始创建副本
        public IEnumerator NotifyCreateChangeSceneCoroutine(Coroutine co,
                                                            ObjPlayer Character,
                                                            int scneneId,
                                                            int x,
                                                            int y,
                                                            AsyncReturnValue <ErrorCodes> error)
        {
            //GM命令切换场景,根据合服ID进行
            var serverLogicId = SceneExtension.GetServerLogicId(Character.ServerId);
            var sceneInfo     = new ChangeSceneInfo
            {
                SceneId   = scneneId,
                ServerId  = serverLogicId,
                SceneGuid = 0,
                Type      = (int)eScnenChangeType.Position
            };

            sceneInfo.Guids.Add(Character.ObjId);
            sceneInfo.Pos = new SceneParam();
            sceneInfo.Pos.Param.Add(x);
            sceneInfo.Pos.Param.Add(y);
            Character.BeginChangeScene();
            var msgChgScene = SceneServer.Instance.SceneAgent.SBChangeSceneByTeam(Character.ObjId, sceneInfo);

            yield return(msgChgScene.SendAndWaitUntilDone(co, TimeSpan.FromSeconds(30)));
        }
Example #6
0
        public AsyncReturnValue <int> UpdateReStateAsync(Coroutine co, string code, ClientAgentBase agent)
        {
            var ret = AsyncReturnValue <int> .Create();

            ret.Value = -1;

            Task.Run(() =>
            {
                var iData = new MySqlParameter[2];
                iData[0]  = new MySqlParameter("@incode", code)
                {
                    MySqlDbType = MySqlDbType.VarChar
                };
                iData[1]           = new MySqlParameter("@myreturn", MySqlDbType.Int16);
                iData[1].Direction = ParameterDirection.Output;

                MySqlConnection conn = null;
                try
                {
                    conn = CheckConnection();

                    using (var command = conn.CreateCommand())
                    {
                        command.CommandText = UpdateReStateProcedureName;
                        command.CommandType = CommandType.StoredProcedure;
                        command.Parameters.AddRange(iData);
                        using (var reader = command.ExecuteReader())
                        {
                            if (!reader.Read())
                            {
                                ret.Value = -1;
                            }
                            else
                            {
                                ret.Value = reader.GetInt16("myreturn");
                                reader.Close();
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error("RunProcedure error !! storedProcName: {0} ,ex{1}", UpdateStateProcedureName, ex);
                }
                finally
                {
                    if (conn != null)
                    {
                        mConnections.Push(conn);
                    }
                }

                if (!agent.mWaitingEvents.IsAddingCompleted)
                {
                    agent.mWaitingEvents.Add(new Scorpion.ContinueEvent(co));
                }
            });

            return(ret);
        }
Example #7
0
 public static IEnumerator LoadGM(Coroutine co,
                                  string name,
                                  AsyncReturnValue <ulong> gmId,
                                  AsyncReturnValue <int> ret)
 {
     return(mStaticImpl.LoadGM(co, name, gmId, ret));
 }
Example #8
0
        public IEnumerator CreateCharacter(Coroutine coroutine, ChatService _this, CreateCharacterInMessage msg)
        {
            var characterId = msg.CharacterId;

            PlayerLog.WriteLog(characterId, "----------PrepareDataForCreateCharacter----------{0}", characterId);

            var result = AsyncReturnValue <ChatCharacterController> .Create();

            var co = CoroutineFactory.NewSubroutine(CharacterManager.Instance.CreateCharacterController, coroutine,
                                                    characterId, result,
                                                    new object[] { msg.Request.Type });

            if (co.MoveNext())
            {
                yield return(co);
            }
            var retValue = result.Value;

            result.Dispose();
            if (retValue == null)
            {
                msg.Reply((int)ErrorCodes.Error_PrepareEnterGameFailed);
                yield break;
            }

            var co1 = CoroutineFactory.NewSubroutine(CharacterManager.Instance.RemoveCharacter, coroutine, characterId);

            if (co1.MoveNext())
            {
                yield return(co1);
            }

            msg.Reply();
        }
Example #9
0
 public static IEnumerator CreateGmAccount(Coroutine co,
                                           string name,
                                           string pwd,
                                           int priority,
                                           AsyncReturnValue <int> status)
 {
     return(mStaticImpl.CreateGmAccount(co, name, pwd, priority, status));
 }
Example #10
0
        public IEnumerator CreateGmAccount(Coroutine co,
                                           string name,
                                           string pwd,
                                           int priority,
                                           AsyncReturnValue <int> status)
        {
            status.Value = 0;
            var uuid = GameMasterServer.Instance.DB.GetNextId(co, (int)DataCategory.GameMaster);

            yield return(uuid);

            if (uuid.Status != DataStatus.Ok)
            {
                yield break;
            }

            var gmController = new GMAccountController
            {
                DbData = new DBGmAccount
                {
                    Id        = uuid.Data,
                    Name      = name,
                    Pwd       = pwd,
                    Priority  = priority,
                    FoundTime = DateTime.Now.ToBinary()
                }
            };

            var returnValue = AsyncReturnValue <int> .Create();

            var co1 = CoroutineFactory.NewSubroutine(gmController.SaveDbName, co, returnValue);

            if (co1.MoveNext())
            {
                yield return(co1);
            }
            if (returnValue.Value != 1)
            {
                Logger.Error("gmController.SaveDbName Error! GM name = " + gmController.DbData.Name);
                yield break;
            }

            co1 = CoroutineFactory.NewSubroutine(gmController.SaveDb, co, returnValue);
            if (co1.MoveNext())
            {
                yield return(co1);
            }
            if (returnValue.Value != 1)
            {
                Logger.Error("gmController.SaveDb Error! GM name = " + gmController.DbData.Name);
                yield break;
            }
            returnValue.Dispose();
            AddGM(gmController.DbData.Id, gmController);

            status.Value = 1;
        }
Example #11
0
 public IEnumerator CreateCharacter(Coroutine coroutine,
                                    ulong clientId,
                                    int serverId,
                                    int type,
                                    string name,
                                    AsyncReturnValue <int, ulong> asyValue)
 {
     return(mImpl.CreateCharacter(coroutine, clientId, serverId, type, name, asyValue, this));
 }
Example #12
0
 //开始创建副本
 public static IEnumerator NotifyCreateChangeSceneCoroutine(Coroutine co,
                                                            ObjPlayer Character,
                                                            int scneneId,
                                                            int x,
                                                            int y,
                                                            AsyncReturnValue <ErrorCodes> error)
 {
     return(mImpl.NotifyCreateChangeSceneCoroutine(co, Character, scneneId, x, y, error));
 }
Example #13
0
 //调玩家位置
 public static IEnumerator GmGoto(Coroutine coroutine,
                                  ObjCharacter Character,
                                  int targetSceneId,
                                  int x,
                                  int y,
                                  AsyncReturnValue <ErrorCodes> error)
 {
     return(mImpl.GmGoto(coroutine, Character, targetSceneId, x, y, error));
 }
Example #14
0
 public IEnumerator CreatePlayer(Coroutine coroutine,
                                 ulong clientId,
                                 string name,
                                 string psw,
                                 string channelPid,
                                 AsyncReturnValue <PlayerController> status)
 {
     return(mImpl.CreatePlayer(coroutine, clientId, name, psw, channelPid, status, this));
 }
Example #15
0
        public IEnumerator OnConnected(Coroutine coroutine,
                                       ActivityCharacterProxy characterProxy,
                                       AsyncReturnValue <bool> ret)
        {
            ret.Value = true;
            var proxy = (ActivityProxy)characterProxy;

            proxy.Connected = true;

            yield break;
        }
Example #16
0
        public IEnumerator AddPlayerToChatMonitor(Coroutine coroutine, ChatService _this, AddPlayerToChatMonitorInMessage msg)
        {
            var charController = CharacterManager.Instance.GetCharacterControllerFromMemroy(msg.CharacterId);

            if (charController == null || null == charController.moniterData)
            {
                yield break;
            }
            if (charController.moniterData.channel.Equals("37") == false)
            {
                yield break;
            }
            var unixTimer = (DateTime.UtcNow - new DateTime(1970, 1, 1, 0, 0, 0)).TotalSeconds;
            var dic       = new Dictionary <string, string>();

            dic.Add("time", Math.Ceiling(unixTimer).ToString());
            dic.Add("uid", charController.moniterData.uid);
            dic.Add("gid", charController.moniterData.gid.ToString());
            dic.Add("dsid", charController.ServerId.ToString());
            dic.Add("memo", "Vip");
            dic.Add("actor_name", HttpUtility.UrlEncode(charController.Name));
            dic.Add("actor_id", charController.mGuid.ToString());

            var md5Key  = "Ob7mD7HqInhGxTNt";
            var strsign = string.Format("{0}{1}{2}{3}{4}{5}{6}{7}",
                                        md5Key, Math.Ceiling(unixTimer), charController.moniterData.uid, charController.moniterData.gid, charController.ServerId, charController.mGuid.ToString(), HttpUtility.UrlEncode(charController.Name), "Vip");//md5Key + "}{" + proxy.Character.moniterData.uid + "}{""}{" + proxy.Character.ServerId.ToString()+ "}{" + unixTimer + "}{" + dic["type"] + "}");
            var sign = RequestManager.Encrypt_MD5_UTF8(strsign);

            dic.Add("sign", sign);

            var url = @"http://cm3.api.37.com.cn/Content/_addPrivateChatTempWhiteList";

            var result = AsyncReturnValue <string> .Create();

            yield return(ChatManager.WebRequestManager.DoRequest(coroutine, url, dic, result));

            if (string.IsNullOrEmpty(result.Value))
            {
                Logger.Error("ChatChatMessage get webResponse is null.url{0}", url);
                yield break;
            }

            var jsonObj    = (JObject)JsonConvert.DeserializeObject(result.Value);
            var resultCode = int.Parse(jsonObj["state"].ToString());

            if (resultCode != 1)
            {
                Logger.Error("ChatChatMessage get resultCode is error[{0}][{1}]  sign=[{2}]", resultCode, jsonObj["msg"], strsign);
                msg.Reply((int)ErrorCodes.Error_BannedToPost);
                yield break;
            }
            yield break;
        }
Example #17
0
        public IEnumerator SaveDb(Coroutine coroutine, AsyncReturnValue <int> ret, PlayerController _this)
        {
            ret.Value = 1;
            var retSet = LoginServer.Instance.DB.Set(coroutine, DataCategory.LoginPlayer, _this.DbData.Id, _this.DbData);

            yield return(retSet);

            if (retSet.Status == DataStatus.Ok)
            {
                Logger.Info("Save Player DB OK" + _this.DbData.Name);
            }
            ret.Value = 0;
        }
Example #18
0
        // 修改玩家反馈消息状态
        public AsyncReturnValue <int> SetCharacterFanKuiStateAsync(Coroutine co, List <int> Ids, int State, ClientAgentBase agent)
        {
            var ret = AsyncReturnValue <int> .Create();

            ret.Value = 0;

            Task.Run(() =>
            {
                var ids = string.Empty;
                for (int i = 0; i < Ids.Count; i++)
                {
                    if (i != Ids.Count - 1)
                    {
                        ids = ids + Ids[i] + ",";
                    }
                    else
                    {
                        ids = ids + Ids[i];
                    }
                }

                var sql = string.Format("Update giftcodedb.question set state = {0} where id IN({1});", State, ids);
                MySqlConnection conn = null;
                try
                {
                    conn = CheckConnection();
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        cmd.CommandType = CommandType.Text;
                        ret.Value       = cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error(ex, "GetCharacterFanKuiAsync error !! {0}");
                }
                finally
                {
                    if (conn != null)
                    {
                        mConnections.Push(conn);
                    }
                    if (!agent.mWaitingEvents.IsAddingCompleted)
                    {
                        agent.mWaitingEvents.Add(new ContinueEvent(co));
                    }
                }
            });
            return(ret);
        }
Example #19
0
        public static bool FindPath(Coroutine co,
                                    SceneObstacle obstacle,
                                    ObjCharacter obj,
                                    Vector2 start,
                                    Vector2 end,
                                    AsyncReturnValue <List <Vector2> > result)
        {
            if (mWaitingPathToFind.Count > 100)
            {
                if (obj.GetObjType() == ObjType.NPC)
                {
                    var npc = obj as ObjNPC;
                    if (npc.CurrentState != BehaviorState.Combat)
                    {
                        result.Value = SceneObstacle.EmptyPath;
                        if (!SceneServer.Instance.ServerControl.mWaitingEvents.IsAddingCompleted)
                        {
                            SceneServer.Instance.ServerControl.mWaitingEvents.Add(new ContinueEvent(co));
                        }

                        return(false);
                    }
                }
            }

            if (!mWaitingPathToFind.IsAddingCompleted)
            {
                mWaitingPathToFind.Add(() =>
                {
                    var path     = obstacle.FindPath(start, end);
                    result.Value = path;

                    if (path.Count == 0)
                    {
                        // Count为0时,我们认为start点是无效的
                        // 当前点的格子中心点是有效的。。存在无效的可能??
                        var ValidStart = new Vector2(((int)(start.X * 2)) / 2.0f, ((int)(start.Y * 2)) / 2.0f);

                        path         = obstacle.FindPath(ValidStart, end);
                        result.Value = path;
                    }

                    if (!SceneServer.Instance.ServerControl.mWaitingEvents.IsAddingCompleted)
                    {
                        SceneServer.Instance.ServerControl.mWaitingEvents.Add(new ContinueEvent(co));
                    }
                });
            }

            return(true);
        }
Example #20
0
        public IEnumerator SaveDb(Coroutine co, GMAccountController _this, AsyncReturnValue <int> ret)
        {
            var retSet = GameMasterServer.Instance.DB.Set(co, DataCategory.GameMaster, _this.DbData.Id, _this.DbData);

            yield return(retSet);

            if (retSet.Status != DataStatus.Ok)
            {
                Logger.Error("Save GM DB Error! GM name = " + _this.DbData.Name);
                yield break;
            }
            Logger.Info("Save GM DB OK! GM name = " + _this.DbData.Name);
            ret.Value = 1;
        }
Example #21
0
        public IEnumerator LoadPlayer(Coroutine coroutine, ulong playerId, AsyncReturnValue <PlayerController> ret)
        {
            ret.Value = null;
            var dbAccout = LoginServer.Instance.DB.Get <DBPlayerLogin>(coroutine, DataCategory.LoginPlayer, playerId);

            yield return(dbAccout);

            if (dbAccout.Data == null)
            {
                yield break;
            }
            var playerController = new PlayerController();

            playerController.DbData = dbAccout.Data;
            ret.Value = playerController;
        }
Example #22
0
        // 查看当前礼品码是否可以使用
        public AsyncReturnValue <bool> CheckCodeIsActiveAsync(Coroutine co, string code, ClientAgentBase agent)
        {
            var ret = AsyncReturnValue <bool> .Create();

            ret.Value = false;
            Task.Run(() =>
            {
                var sql = string.Format("SELECT * FROM giftcodedb.giftcode where code = '{0}' and state = 0;", code);
                MySqlConnection conn   = null;
                MySqlDataReader reader = null;
                try
                {
                    conn = CheckConnection();
                    using (var cmd = conn.CreateCommand())
                    {
                        cmd.CommandText = sql;
                        cmd.CommandType = CommandType.Text;
                        using (reader = cmd.ExecuteReader())
                        {
                            if (reader != null)
                            {
                                if (reader.Read())
                                {
                                    ret.Value = true;
                                }
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error(ex, "CheckCodeIsActiveAsync error !! {0}");
                }
                finally
                {
                    if (conn != null)
                    {
                        mConnections.Push(conn);
                    }
                    if (!agent.mWaitingEvents.IsAddingCompleted)
                    {
                        agent.mWaitingEvents.Add(new Scorpion.ContinueEvent(co));
                    }
                }
            });
            return(ret);
        }
Example #23
0
        public IEnumerator LoadGM(Coroutine coroutine,
                                  string name,
                                  AsyncReturnValue <ulong> gmId,
                                  AsyncReturnValue <int> ret)
        {
            var dbAccoutGuid = GameMasterServer.Instance.DB.Get <DBUlong>(coroutine, DataCategory.GameMaster,
                                                                          name);

            yield return(dbAccoutGuid);

            if (dbAccoutGuid.Data == null)
            {
                yield break;
            }

            gmId.Value = dbAccoutGuid.Data.Value;
            if (GetGM(gmId.Value) != null)
            {
                ret.Value = 1;
                yield break;
            }

            var dbAccout = GameMasterServer.Instance.DB.Get <DBGmAccount>(coroutine, DataCategory.GameMaster,
                                                                          dbAccoutGuid.Data.Value);

            yield return(dbAccout);

            if (dbAccout.Data == null)
            {
                yield break;
            }
            var gmController = new GMAccountController();

            gmController.DbData = dbAccout.Data;
            AddGM(gmController.DbData.Id, gmController);

            ret.Value = 1;

            /*
             * OneAccent acc = new OneAccent() { Name = dbAccout.Data.Name };
             * LoginAllAccounts allAcc = new LoginAllAccounts();
             * allAcc.acc.Add (acc);
             * CoroutineFactory.NewCoroutine(GameMasterManager.NofifyAllAccounts, (ulong)0, allAcc).MoveNext ();
             */
        }
Example #24
0
        public IEnumerator GMRank(Coroutine co, RankCharacterProxy charProxy, GMRankInMessage msg)
        {
            var proxy = charProxy;

            var command = msg.Request.Commond;

            PlayerLog.WriteLog(proxy.CharacterId, "----------Rank----------GMRank----------{0}", command);

            var err = new AsyncReturnValue <ErrorCodes>();
            var co1 = CoroutineFactory.NewSubroutine(GameMaster.GmCommand, co, command, err);

            if (co1.MoveNext())
            {
                yield return(co1);
            }
            msg.Reply((int)err.Value);
            err.Dispose();
        }
Example #25
0
        public IEnumerator GMCommand(Coroutine co, ChatService _this, GMCommandInMessage msg)
        {
            var cmds = msg.Request.Commonds.Items;
            var errs = msg.Response.Items;
            var err  = new AsyncReturnValue <ErrorCodes>();

            foreach (var cmd in cmds)
            {
                var co1 = CoroutineFactory.NewSubroutine(GameMaster.GmCommand, co, cmd, err);
                if (co1.MoveNext())
                {
                    yield return(co1);
                }
                errs.Add((int)err.Value);
            }
            err.Dispose();
            msg.Reply();
        }
Example #26
0
        //调玩家位置
        public IEnumerator GmGoto(Coroutine coroutine,
                                  ObjCharacter Character,
                                  int targetSceneId,
                                  int x,
                                  int y,
                                  AsyncReturnValue <ErrorCodes> error)
        {
            var co = CoroutineFactory.NewSubroutine(SceneServer.Instance.ServerControl.CreateAndEnterScene, coroutine,
                                                    Character.ObjId,
                                                    Character.ServerId,
                                                    targetSceneId,
                                                    0ul,
                                                    eScnenChangeType.Normal,
                                                    new SceneParam());

            if (co.MoveNext())
            {
                yield return(co);
            }
        }
Example #27
0
        public IEnumerator GmCommand(Coroutine co, string command, AsyncReturnValue <ErrorCodes> err)
        {
            err.Value = ErrorCodes.OK;

            var strs = command.Split(',');

            if (strs.Length < 1)
            {
                err.Value = ErrorCodes.ParamError;
                yield break;
            }

            if (String.Compare(strs[0], "!!ReloadTable", StringComparison.OrdinalIgnoreCase) == 0)
            {
                if (strs.Length < 2)
                {
                    err.Value = ErrorCodes.ParamError;
                    yield break;
                }
                GameMaster.ReloadTable(strs[1]);
                yield break;
            }
            else if (String.Compare(strs[0], "!!SystemChat", StringComparison.OrdinalIgnoreCase) == 0)
            {
                if (strs.Length != 2)
                {
                    err.Value = ErrorCodes.ParamError;
                    yield break;
                }
                var gmCo = CoroutineFactory.NewSubroutine(GameMaster.SystemChat, co, strs[1]);
                if (gmCo.MoveNext())
                {
                    yield return(gmCo);
                }
            }
            else if (String.Compare(strs[0], "!!UpdateAnchor", StringComparison.OrdinalIgnoreCase) == 0)
            {
                AnchorManager.Instance.LoadConfig();
                yield break;
            }
        }
Example #28
0
        /// <summary>
        ///     执行多条SQL语句,实现数据库事务。
        /// </summary>
        /// sql2000数据库
        /// <param name="sqls">多条SQL语句</param>
        public AsyncReturnValue <int> ExecuteSqlTranAsync(Coroutine co, IEnumerable <string> sqls, ClientAgentBase agent)
        {
            AsyncReturnValue <int> ret = AsyncReturnValue <int> .Create();

            ret.Value = 0;

            Task.Run(() =>
            {
                MySqlConnection conn = null;
                try
                {
                    conn = CheckConnection();
                    using (var cmd = conn.CreateCommand())
                    {
                        foreach (var sql in sqls)
                        {
                            cmd.CommandText += sql;
                        }
                        ret.Value = cmd.ExecuteNonQuery();
                    }
                }
                catch (Exception ex)
                {
                    Logger.Error("RunProcedure error !! storedProcName: {0} ,ex{1}", UpdateStateProcedureName, ex);
                }
                finally
                {
                    if (conn != null)
                    {
                        mConnections.Push(conn);
                    }
                    if (!agent.mWaitingEvents.IsAddingCompleted)
                    {
                        agent.mWaitingEvents.Add(new ContinueEvent(co));
                    }
                }
            });

            return(ret);
        }
Example #29
0
        public static bool AddCollider(Coroutine co,
                                       SceneObstacle obstacle,
                                       ObjCharacter obj,
                                       float radius,
                                       AsyncReturnValue <uint> result)
        {
            if (!mWaitingPathToFind.IsAddingCompleted)
            {
                mWaitingPathToFind.Add(() =>
                {
                    var b        = obstacle.AddCollider(obj.GetPosition(), radius);
                    result.Value = b;

                    if (!SceneServer.Instance.ServerControl.mWaitingEvents.IsAddingCompleted)
                    {
                        SceneServer.Instance.ServerControl.mWaitingEvents.Add(new ContinueEvent(co));
                    }
                });
            }

            return(true);
        }
Example #30
0
        public IEnumerator PrepareDataForEnterGame(Coroutine coroutine,
                                                   ChatService _this,
                                                   PrepareDataForEnterGameInMessage msg)
        {
            Logger.Info("Enter Game {0} - PrepareDataForEnterGame - 1 - {1}", msg.CharacterId,
                        TimeManager.Timer.ElapsedMilliseconds);
            //var result = AsyncReturnValue<CharacterController>.Create();
            //var co1 =CoroutineFactory.NewSubroutine(CharacterManager.Instance.GetOrCreateCharacterController, co,msg.CharacterId, new object[] { }, false, result);
            //if (co1.MoveNext())
            //{
            //    yield return co1;
            //}

            //if (result.Value == null)
            //{
            //    msg.Reply((int)ErrorCodes.Error_PrepareEnterGameFailed);
            //    yield break;
            //}

            var characterId = msg.CharacterId;
            var result      = AsyncReturnValue <ChatCharacterController> .Create();

            var co = CoroutineFactory.NewSubroutine(CharacterManager.Instance.GetOrCreateCharacterController, coroutine,
                                                    characterId, new object[] {}, false, result);

            if (co.MoveNext())
            {
                yield return(co);
            }
            var obj = result.Value;

            result.Dispose();
            if (obj == null)
            {
                msg.Reply((int)ErrorCodes.Error_PrepareEnterGameFailed);
                yield break;
            }
            msg.Reply();
        }