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);
            }
        }
示例#2
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);
        }
示例#3
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();
        }
示例#4
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;
        }
示例#5
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;
        }
示例#6
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);
        }
示例#7
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);
        }
示例#8
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);
        }
示例#9
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();
        }
示例#10
0
        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;
        }
示例#11
0
        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);
        }
示例#12
0
        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();
        }
示例#13
0
        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);
            }
        }
示例#14
0
        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);
        }
示例#15
0
        // 返回玩家反馈消息
        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);
        }