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 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 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 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 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 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 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); }
/// <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 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(); }
public IEnumerator ModifyGmAccount(Coroutine co, GMAccountController gmController, AsyncReturnValue <int> status) { status.Value = 0; var returnValue = AsyncReturnValue <int> .Create(); var 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; } AddGM(gmController.DbData.Id, gmController); returnValue.Dispose(); status.Value = 1; }
public AsyncReturnValue <int, int, int> GetUngetPlayerLevel(Coroutine co, string userid, ClientAgentBase agent) { AsyncReturnValue <int, int, int> ret = AsyncReturnValue <int, int, int> .Create(); ret.Value1 = -1; ret.Value2 = -1; ret.Value3 = -1; Task.Run(() => { MySqlConnection conn = null; try { var iData = new MySqlParameter[4]; iData[0] = new MySqlParameter("@incode", userid) { MySqlDbType = MySqlDbType.VarChar }; iData[1] = new MySqlParameter("@returnLevel", MySqlDbType.Int16); iData[2] = new MySqlParameter("@returnRecharge", MySqlDbType.Int32); iData[3] = new MySqlParameter("@returnVipExp", MySqlDbType.Int32); iData[1].Direction = ParameterDirection.Output; iData[2].Direction = ParameterDirection.Output; iData[3].Direction = ParameterDirection.Output; conn = CheckConnection(); using (var command = conn.CreateCommand()) { command.CommandText = GetLevelProcedureName; command.CommandType = CommandType.StoredProcedure; command.Parameters.AddRange(iData); using (var reader = command.ExecuteReader()) { if (!reader.Read()) { ret.Value1 = -1; ret.Value2 = -1; ret.Value3 = -1; } else { if (reader.FieldCount < 3) { reader.Close(); } else { ret.Value1 = reader.GetInt16("returnLevel"); ret.Value2 = reader.GetInt16("returnRecharge"); ret.Value3 = reader.GetInt16("returnVipExp"); 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 IEnumerator ApplyOrderSerial(Coroutine coroutine, ActivityService _this, ApplyOrderSerialInMessage msg) { var inMsg = msg.Request.Msg; var table = Table.GetRecharge(inMsg.GoodId); RechargeLogger.Info("ApplyOrderSerial Request GoodId:{0} Channel:{1} ExtInfo:{2} CharacterId:{3},step 1 ", inMsg.GoodId, inMsg.Channel, inMsg.ExtInfo, msg.CharacterId); if (table == null) { Logger.Error("ApplyOrderSerial tableid : {0} does not exists in RechargeTable!!!", inMsg.GoodId); msg.Reply((int)ErrorCodes.Error_GoodId_Not_Exist); yield break; } var __this = (ActivityServerControl)_this; var infos = inMsg.Channel.Split('.'); if (infos.Length <= 1) { msg.Reply((int)ErrorCodes.Unknow); yield break; } var platform = infos[0]; var channel = infos[1]; string guid; string extinfo = inMsg.ExtInfo; if (channel.Equals("moe")) { const string apikey = "mayakey"; var extInfos = inMsg.ExtInfo.Split('.'); //var bytes = BitConverter.GetBytes(++__this.udidSeed); //guid = Convert.ToBase64String(bytes); guid = (++__this.udidSeed).ToString(); var sb = new StringBuilder(); sb.Append(guid); sb.Append('|'); sb.Append("nouse"); sb.Append('|'); sb.Append(apikey); var sign = Shared.RequestManager.Encrypt_MD5_UTF8(sb.ToString()); var dic = new Dictionary <string, string>(); dic.Add("cporder", guid); dic.Add("data", "nouse"); dic.Add("notifyurl", __this.PayServerNotifyAddress); dic.Add("verifyurl", __this.PayServerVerifyAddress); dic.Add("sign", sign); var url = string.Format(@"http://sdk.uborm.com:40000/{0}/{1}/SaveOrder/", extInfos[0], extInfos[1]); var result = AsyncReturnValue <string> .Create(); yield return(((ActivityServerControl)_this).WebRequestManager.DoRequest(coroutine, url, dic, result)); if (string.IsNullOrEmpty(result.Value)) { Logger.Error("ApplyOrderSerial get webResponse is null."); msg.Reply((int)ErrorCodes.Error_GoodId_Not_Exist); yield break; } var jsonResult = (JObject)JsonConvert.DeserializeObject(result.Value); var resultCode = jsonResult["code"].ToString(); var resultDesc = jsonResult["msg"].ToString(); if (!resultCode.Equals("0")) { Logger.Error("ApplyOrderSerial resultCode is." + resultCode + "Desc:" + resultDesc); msg.Reply((int)ErrorCodes.Error_GoodId_Not_Exist); yield break; } JObject joObject = new JObject(); joObject["code"] = 0; joObject["msg"] = "OK"; joObject["id"] = extInfos[2]; joObject["cporder"] = guid; joObject["order"] = jsonResult["cporder"]; var price = table.Price * 100; joObject["amount"] = price.ToString(); joObject["createtime"] = jsonResult["orderdate"]; joObject["Itemid"] = ""; joObject["Itemquantity"] = 1; joObject["status"] = 1; joObject["info"] = ""; var bytes = System.Text.Encoding.Default.GetBytes(joObject.ToString()); extinfo = Convert.ToBase64String(bytes); } else { guid = Guid.NewGuid().ToString("N"); } var tempType = table.Type; if (tempType == 3) { tempType = tempType * 1000 + table.Id; } var order = new PreOrder { Amount = table.Price, Channel = inMsg.Channel, OrderId = guid, ExtInfo = extinfo, PayType = (short)tempType, Uid = msg.ClientId, PlayerId = msg.CharacterId }; // var ret = InAppPurchase.PayDbConnection.NewPreOrder(order); var orderData = new ConnectData { preOrder = order, connect = InAppPurchase.PayDbConnection, returnValue = ePayDbReturn.Exception, mType = ConnectDataType.PushData }; yield return(__this.payDbManagerManager.DoOrder(coroutine, orderData)); var ret = orderData.returnValue; if (ret != ePayDbReturn.Success) { RechargeLogger.Fatal("ApplyOrderSerial NewPreOrder to sql failed, ret :{0} guid:{1}", ret, guid); Logger.Fatal("ApplyOrderSerial NewPreOrder to sql failed, ret :{0}", Enum.GetName(typeof(ePayDbReturn), ret)); msg.Reply((int)ErrorCodes.Error_GoodId_Not_Exist); yield break; } RechargeLogger.Info("ApplyOrderSerial NewPreOrder to db success orderid:{0} CharacterId:{1},step 3 ", guid, msg.CharacterId); if (inMsg.Channel.Equals("ios.appstore")) { msg.Response = new OrderSerialData { OrderId = table.GoodsId }; } else { msg.Response = new OrderSerialData { OrderId = guid }; } msg.Reply(); }
public IEnumerator CreateCharacter(Coroutine coroutine, ulong clientId, int serverId, int type, string name, AsyncReturnValue <int, ulong> asyValue, PlayerManager _this) { asyValue.Value1 = (int)ErrorCodes.Error_Login_DBCreate; asyValue.Value2 = 0; var player = _this.GetPlayerController(clientId); var retDbId = LoginServer.Instance.DB.Set(coroutine, DataCategory.LoginCharacterName, name, 0ul.ToDBUlong(), SetOption.SetIfNotExist); yield return(null); if (retDbId.Status == DataStatus.DatabaseError) { asyValue.Value1 = (int)ErrorCodes.DataBase; PlayerLog.WriteLog((int)LogType.DataBase, "CreateCharacter DataBase Error! name={0}", name); yield break; } if (retDbId.Status != DataStatus.Ok) { asyValue.Value1 = (int)ErrorCodes.Error_NAME_IN_USE; PlayerLog.WriteLog((int)LogType.Error_NAME_IN_USE, "CreateCharacter Error_NAME_IN_USE name={0}", name); yield break; } var retNextId = LoginServer.Instance.DB.GetNextId(coroutine, (int)DataCategory.LoginCharacter); yield return(retNextId); if (retNextId.Status != DataStatus.Ok) { var cleanName = LoginServer.Instance.DB.Delete(coroutine, DataCategory.LoginCharacterName, name); yield return(null); if (cleanName.Status != DataStatus.Ok) { Logger.Fatal("CreateCharacter Failed delete name={0}", name); } asyValue.Value1 = (int)ErrorCodes.Error_CreateControllerFailed; yield break; } var nextId = retNextId.Data; asyValue.Value2 = nextId; var result = AsyncReturnValue <CharacterController> .Create(); var co = CoroutineFactory.NewSubroutine(CharacterManager.Instance.GetOrCreateCharacterController, coroutine, nextId, new object[] { nextId, name, type, serverId, player.DbData.Id }, true, result); if (co.MoveNext()) { yield return(co); } if (result.Value == null) { Logger.Error("CreateCharacter Failed id={0} name={1}", nextId, name); asyValue.Value1 = (int)ErrorCodes.Error_CreateControllerFailed; var cleanName = LoginServer.Instance.DB.Delete(coroutine, DataCategory.LoginCharacterName, name); yield return(null); if (cleanName.Status != DataStatus.Ok) { Logger.Fatal("CreateCharacter Failed delete name={0}", name); } yield break; } result.Dispose(); result.Value.SetLoginDays(1); result.Value.GetTodayOnlineTime(); player.DbData.Players.Add(nextId); player.CreateCharacter(serverId, nextId); var ret = LoginServer.Instance.DB.Set(coroutine, DataCategory.LoginCharacterName, name, nextId.ToDBUlong()); yield return(ret); if (ret.Status != DataStatus.Ok) { asyValue.Value1 = (int)ErrorCodes.Error_LoginCreateSetNameDB; Logger.Fatal("CreateCharacter ReSet Faild ,name={0}", name); yield break; } asyValue.Value1 = 0; //新增角色 //PlayerLog.StatisticsLogger("nc,{0},{1}", nextId, player.DbData.Id); PlayerLog.BackDataLogger((int)BackDataType.NewCharacter, "{0}|{1}|{2}", player.DbData.Id, nextId, serverId); try { var charCtrl = result.Value; if (charCtrl != null && charCtrl.GetData() != null && player != null && player.DbData != null) { string gameuserlog = string.Format("gameusers#{0}|{1}|{2}|{3}|{4}|{5}|{6}|{7}|{8}|{9}", charCtrl.GetData().Id, // charid player.DbData.Name, //acount charCtrl.GetData().ServerId, // serverid DateTime.FromBinary(charCtrl.GetData().FoundTime).ToString("yyyy/MM/dd HH:mm:ss"), // createtime player.Platform, // createplatform player.LoginChannel, // createspid DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss"), // logintime DateTime.MinValue, // logouttime player.Platform, // loginplatfomr charCtrl.GetLoginDays() // dayback ); Logger kafaLogger = LogManager.GetLogger(Shared.LoggerName.KafkaLog); kafaLogger.Info(gameuserlog); string userlevel = string.Format("userlevel#{0}|{1}|{2}", charCtrl.GetData().Id, // charid 1, //level DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") ); kafaLogger.Info(userlevel); } } catch (Exception e) { Logger.Error(e); } }
public IEnumerator CreatePlayer(Coroutine coroutine, ulong clientId, string name, string psw, string channelPid, AsyncReturnValue <PlayerController> status, PlayerManager _this) { status.Value = null; var playerGuid = LoginServer.Instance.DB.GetNextId(coroutine, (int)DataCategory.LoginPlayer); yield return(playerGuid); if (playerGuid.Status != DataStatus.Ok) { yield break; } int lastServerId = Table.GetServerConfig(2000).ToInt(); ChannelServerInfo info; if (StaticParam.ServerListWithPid.TryGetValue(channelPid, out info)) { if (info.NewServers.Count > 0) { var index = MyRandom.Random(0, info.NewServers.Count - 1); lastServerId = info.NewServers[index].Id; } else if (info.PrepareServers.Count > 0) { var index = MyRandom.Random(0, info.PrepareServers.Count - 1); lastServerId = info.PrepareServers[index].Id; } } if (StaticParam.ServerListWithPid.TryGetValue("all", out info)) { if (info.NewServers.Count > 0) { var index = MyRandom.Random(0, info.NewServers.Count - 1); lastServerId = info.NewServers[index].Id; } else if (info.PrepareServers.Count > 0) { var index = MyRandom.Random(0, info.PrepareServers.Count - 1); lastServerId = info.PrepareServers[index].Id; } } var player = new PlayerController { DbData = new DBPlayerLogin { Id = playerGuid.Data, Name = name, Pwd = psw, SelectChar = 0, FoundTime = DateTime.Now.ToBinary(), LoginDay = 0, LoginTotal = 0, IsLock = 0, LastServerId = lastServerId } }; var returnValue = AsyncReturnValue <int> .Create(); var co = CoroutineFactory.NewSubroutine(player.SaveDb, coroutine, returnValue); if (co.MoveNext()) { yield return(co); } returnValue.Dispose(); var accountValue = AsyncReturnValue <int> .Create(); co = CoroutineFactory.NewSubroutine(player.SaveAccountDb, coroutine, accountValue); if (co.MoveNext()) { yield return(co); } accountValue.Dispose(); status.Value = player; //_this.AddPlayer(clientId, player); //创建账户 //PlayerLog.StatisticsLogger("na,{0}", player.DbData.Id); PlayerLog.BackDataLogger((int)BackDataType.NewPlayer, "{0}", player.DbData.Id); }
// 返回玩家反馈消息 public AsyncReturnValue <GMGetFanKuiList> GetCharacterFanKuiAsync(Coroutine co, string TimeBegin, string TimeEnd, int StartIndex, int EndIndex, int State, ClientAgentBase agent) { var ret = AsyncReturnValue <GMGetFanKuiList> .Create(); ret.Value = new GMGetFanKuiList(); Task.Run(() => { var sql = string.Format( "SELECT * FROM giftcodedb.question where createtime >= '{0}' and createtime <= '{1}' and state = {2} limit {3},{4};", TimeBegin, TimeEnd, State, StartIndex, EndIndex); 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) { while (reader.Read()) { // result += " CharacterId: " + reader.GetUInt32("ById").ToString(); // result += " CharacterName: " + reader.GetString("ByName"); // result += " Title: " + reader.GetString("Title"); // result += " Content: " + reader.GetString("Text"); // result += " createTime: " + reader.GetString("createtime"); // result += " state " + reader.GetInt16("state") + "; "; var tmp = new GMGetFanKui(); tmp.Id = reader.GetUInt32("id"); tmp.CharacterId = reader.GetInt64("ById"); tmp.Name = reader.GetString("ByName"); tmp.Title = reader.GetString("Title"); tmp.Content = reader.GetString("Text"); tmp.CreateTime = reader.GetString("createtime"); tmp.State = reader.GetInt32("state"); ret.Value.FanKuiList.Add(tmp); } } } } } catch (Exception ex) { Logger.Error(ex, "GetCharacterFanKuiAsync error !! {0}"); } finally { if (conn != null) { mConnections.Push(conn); } if (!agent.mWaitingEvents.IsAddingCompleted) { agent.mWaitingEvents.Add(new Scorpion.ContinueEvent(co)); } } }); return(ret); }