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; }
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); } }
public static IEnumerator GmCommand(Coroutine co, ulong characterId, string command, AsyncReturnValue <ErrorCodes> err) { return(mImpl.GmCommand(co, characterId, command, err)); }
//开始创建副本 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))); }
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); }
public static IEnumerator LoadGM(Coroutine co, string name, AsyncReturnValue <ulong> gmId, AsyncReturnValue <int> ret) { return(mStaticImpl.LoadGM(co, name, gmId, ret)); }
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(); }
public static IEnumerator CreateGmAccount(Coroutine co, string name, string pwd, int priority, AsyncReturnValue <int> status) { return(mStaticImpl.CreateGmAccount(co, name, pwd, priority, status)); }
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; }
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)); }
//开始创建副本 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)); }
//调玩家位置 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)); }
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)); }
public IEnumerator OnConnected(Coroutine coroutine, ActivityCharacterProxy characterProxy, AsyncReturnValue <bool> ret) { ret.Value = true; var proxy = (ActivityProxy)characterProxy; proxy.Connected = true; yield break; }
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; }
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; }
// 修改玩家反馈消息状态 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); }
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); }
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; }
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; }
// 查看当前礼品码是否可以使用 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); }
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 (); */ }
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(); }
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(); }
//调玩家位置 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); } }
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; } }
/// <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); }
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); }
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(); }