Ejemplo n.º 1
0
    public override void Init()
    {
        socket = new PESocket <ServerSession, NetMsg>();
        socket.StartAsServer(ServerCfg.IP, ServerCfg.Port);

        PECommonTool.Log("NetSvc Init Done");
    }
Ejemplo n.º 2
0
    /// <summary>
    /// 由于编码问题,不能判断中文名称+
    /// </summary>
    /// <param name="name"></param>
    /// <returns></returns>
    public bool CheckName(string name)
    {
        bool            isExist = false;
        MySqlDataReader reader  = null;
        string          quest   = "select * from account";

        try
        {
            MySqlCommand cmd = new MySqlCommand(quest, conn);
            reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                string tmp = reader.GetString("name");
                if (string.Equals(tmp, name))
                {
                    isExist = true;
                }
            }
        }
        catch (Exception e)
        {
            PECommonTool.Log("CheckName: " + e.Message, LogType.Error);
        }
        finally {
            if (reader != null)
            {
                reader.Close();
            }
        }

        return(isExist);
    }
Ejemplo n.º 3
0
        public static byte[] BinarySerialize(System.Object obj)
        {
            MemoryStream ms = null;

            try
            {
                ms = new MemoryStream();
                BinaryFormatter bFormatter = new BinaryFormatter();
                bFormatter.Serialize(ms, obj);
                byte[] byteArr = ms.ToArray();

                PECommonTool.Log(">binary length >" + byteArr.Length.ToString());
                return(byteArr);
            }
            catch (System.Exception e)
            {
                PECommonTool.Log("class to binary failed :" + e.Message);
            }
            finally {
                if (ms != null)
                {
                    ms.Dispose();
                }
            }
            return(new byte[0]);
        }
Ejemplo n.º 4
0
        public static T[] DeserializeBinary <T>(byte[] rawData)
        {
            MemoryStream ms = null;

            T[] arr = null;
            PECommonTool.Log("===DeserializeBinary====  " + rawData.Length);
            try
            {
                BinaryFormatter bFormatter = new BinaryFormatter();
                ms          = new MemoryStream(rawData);
                ms.Position = 0;
                arr         = (T[])bFormatter.Deserialize(ms);
            }
            catch (System.Exception e)
            {
                PECommonTool.Log("deserialize failed :" + e.Message);
            }
            finally {
                if (ms != null)
                {
                    ms.Dispose();
                }
            }

            return(arr);
        }
Ejemplo n.º 5
0
    protected override void OnReciveMsg(NetMsg msg)
    {
        //受到消息时,打包给网络服务层处理
        string str = ((MsgType)msg.cmd).ToString();

        PECommonTool.Log(str);
        NetSvc.Instance.AddMsgPack(new MsgPack(this, msg));
    }
Ejemplo n.º 6
0
    public void HandleReqLogin(MsgPack pack)
    {
        //处理客户端登陆请求
        NetMsg newMsg = new NetMsg
        {
            cmd = (int)MsgType.RspLogin,
        };

        ReqLogin loginData = pack.msg.ReqLogin;
        string   acct      = loginData.account;
        string   password  = loginData.password;

        bool isOnline = CacheSvc.Instance.IsOnline(acct);

        if (isOnline)
        {
            newMsg.err = (int)ErrorCode.AlreadyOnline;
        }
        else
        {
            PlayerData pd = CacheSvc.Instance.GetPlayerData(acct, password);
            if (pd == null)
            {
                newMsg.err = (int)ErrorCode.InvalidPassword;
            }
            else
            {
                //计算玩家体力恢复
                long now          = TimerSvc.Instance.GetNowTime();
                int  timeInterval = (int)(now - pd.Time);

                int addPower = (timeInterval / (PECommonTool.AddPowerTimeSpan * 1000 * 60)) *
                               PECommonTool.AddPowerPerTimes;

                if (addPower > 0)
                {
                    pd.Power += (int)addPower;
                    if (pd.Power > PECommonTool.GetPowerLimit(pd.Level))
                    {
                        pd.Power = PECommonTool.GetPowerLimit(pd.Level);
                    }
                    if (!CacheSvc.Instance.UpdatePlayerDataToDB(pd.ID, pd))
                    {
                        PECommonTool.Log("update player time error when login", LogType.Error);
                    }
                }


                newMsg.RspLogin = new RspLogin
                {
                    data = pd,
                };

                CacheSvc.Instance.CachePlayerData(acct, pd, pack.session);
            }
        }
        pack.session.SendMsg(newMsg);
    }
Ejemplo n.º 7
0
    public void Init()
    {
        string conStr = "server=localhost;User Id=root;password=;Database=darkgod";

        conn = new MySqlConnection(conStr);
        try
        {
            conn.Open();
            PECommonTool.Log("数据库连接成功");
        }
        catch (Exception e)
        {
            PECommonTool.Log("数据库连接失败:" + e.Message, LogType.Error);
            return;
        }
    }
Ejemplo n.º 8
0
    public void HandleErrorCode(ErrorCode err)
    {
        switch (err)
        {
        case ErrorCode.AlreadyOnline:
            GameRoot.Instance.AddTips(Language.GetString(3));
            break;

        case ErrorCode.InvalidPassword:
            GameRoot.Instance.AddTips(Language.GetString(4));
            break;

        case ErrorCode.NameExisted:
            GameRoot.Instance.AddTips(Language.GetString(6));
            break;

        case ErrorCode.UpdateDBFailed:
            PECommonTool.Log("数据库更新失败");
            GameRoot.Instance.AddTips(Language.GetString(7));
            break;

        case ErrorCode.ServerDataError:
            PECommonTool.Log("数据库更新失败");
            GameRoot.Instance.AddTips(Language.GetString(8));
            break;

        case ErrorCode.LackCoin:
            GameRoot.Instance.AddTips(Language.GetString(62));
            break;

        case ErrorCode.LackCrystal:
            GameRoot.Instance.AddTips(Language.GetString(61));
            break;

        case ErrorCode.LackLevel:
            GameRoot.Instance.AddTips(Language.GetString(60));
            break;

        case ErrorCode.LackPower:
            GameRoot.Instance.AddTips(Language.GetString(58));
            break;

        case ErrorCode.ClientDataError:
            GameRoot.Instance.AddTips(Language.GetString(8));
            break;
        }
    }
Ejemplo n.º 9
0
    /// <summary>
    /// 插入一个新账号
    /// </summary>
    /// <param name="acct"></param>
    /// <param name="password"></param>
    /// <param name="data"></param>
    /// <returns>返回主键id</returns>
    public int InsertNewAccount(string acct, string password, PlayerData data)
    {
        string quest = "insert into account set acct = @acct,password = @password,name = " +
                       "@name,level = @level,exp = @exp,power = @power,coin = @coin,diamond = @diamond," +
                       "hp = @hp,ad = @ad,ap = @ap,addef = @addef,apdef = @apdef,dodge = @dodge," +
                       "pierce = @pierce,critical = @critical, guideid = @guideid, strong = @strong," +
                       "crystal = @crystal, time = @time, fubenid = @fubenid";
        int id = -1;

        try
        {
            MySqlCommand cmd = new MySqlCommand(quest, conn);
            cmd.Parameters.AddWithValue("acct", acct);
            cmd.Parameters.AddWithValue("password", password);
            cmd.Parameters.AddWithValue("name", data.Name);
            cmd.Parameters.AddWithValue("level", data.Level);
            cmd.Parameters.AddWithValue("exp", data.Experience);
            cmd.Parameters.AddWithValue("power", data.Power);
            cmd.Parameters.AddWithValue("coin", data.Coin);
            cmd.Parameters.AddWithValue("diamond", data.Diamond);
            cmd.Parameters.AddWithValue("hp", data.Hp);
            cmd.Parameters.AddWithValue("ad", data.Ad);
            cmd.Parameters.AddWithValue("ap", data.Ap);
            cmd.Parameters.AddWithValue("addef", data.Addef);
            cmd.Parameters.AddWithValue("apdef", data.Apdef);
            cmd.Parameters.AddWithValue("dodge", data.Dodge);
            cmd.Parameters.AddWithValue("pierce", data.Pierce);
            cmd.Parameters.AddWithValue("critical", data.Critical);
            cmd.Parameters.AddWithValue("guideid", data.GuideID);
            string str = PECommonTool.GetJointString(data.Strong, '#');
            cmd.Parameters.AddWithValue("strong", str);
            cmd.Parameters.AddWithValue("crystal", data.Crystal);
            cmd.Parameters.AddWithValue("time", data.Time);
            cmd.Parameters.AddWithValue("fubenid", data.FuBenId);

            cmd.ExecuteNonQuery();
            id = (int)cmd.LastInsertedId;
            PECommonTool.Log(id.ToString(), LogType.Info);
        }
        catch (Exception e)
        {
            PECommonTool.Log("InsertNewAccount: " + e.Message, LogType.Error);
        }
        return(id);
    }
Ejemplo n.º 10
0
    /// <summary>
    /// 修改数据
    /// </summary>
    public bool UpdatePlayerData(int id, PlayerData data)
    {
        bool updateSuc = true;

        string quest = "update account set name = @name,level = @level,exp = @exp,power = @power,coin = @coin,diamond = @diamond," +
                       "hp = @hp,ad = @ad,ap = @ap,addef = @addef,apdef = @apdef,dodge = @dodge," +
                       "pierce = @pierce,critical = @critical, guideid = @guideid,strong = @strong," +
                       "crystal = @crystal, time = @time, fubenid = @fubenid where id=@id ";

        try
        {
            MySqlCommand cmd = new MySqlCommand(quest, conn);
            cmd.Parameters.AddWithValue("id", id);
            cmd.Parameters.AddWithValue("name", data.Name);
            cmd.Parameters.AddWithValue("level", data.Level);
            cmd.Parameters.AddWithValue("exp", data.Experience);
            cmd.Parameters.AddWithValue("power", data.Power);
            cmd.Parameters.AddWithValue("coin", data.Coin);
            cmd.Parameters.AddWithValue("diamond", data.Diamond);
            cmd.Parameters.AddWithValue("hp", data.Hp);
            cmd.Parameters.AddWithValue("ad", data.Ad);
            cmd.Parameters.AddWithValue("ap", data.Ap);
            cmd.Parameters.AddWithValue("addef", data.Addef);
            cmd.Parameters.AddWithValue("apdef", data.Apdef);
            cmd.Parameters.AddWithValue("dodge", data.Dodge);
            cmd.Parameters.AddWithValue("pierce", data.Pierce);
            cmd.Parameters.AddWithValue("critical", data.Critical);
            cmd.Parameters.AddWithValue("guideid", data.GuideID);
            string str = PECommonTool.GetJointString(data.Strong, '#');
            cmd.Parameters.AddWithValue("strong", str);
            cmd.Parameters.AddWithValue("crystal", data.Crystal);
            cmd.Parameters.AddWithValue("time", data.Time);
            cmd.Parameters.AddWithValue("fubenid", data.FuBenId);

            cmd.ExecuteNonQuery();
        }
        catch (Exception e)
        {
            updateSuc = false;
            PECommonTool.Log("UpdatePlayerData: " + e.Message, LogType.Error);
        }
        return(updateSuc);
    }
Ejemplo n.º 11
0
    public void Offline(ServerSession ses, int sesID)
    {
        //下线时,先更新下线时间
        PlayerData pd = CacheSvc.Instance.GetPlayerDataBySession(ses);

        if (pd != null)
        {
            pd.Time = TimerSvc.Instance.GetNowTime();
            if (!CacheSvc.Instance.UpdatePlayerDataToDB(pd.ID, pd))
            {
                PECommonTool.Log("update player time error when offline", LogType.Error);
            }
        }
        bool offlienSuc = CacheSvc.Instance.Offline(ses);

        if (offlienSuc)
        {
            PECommonTool.Log("客户端下线成功: " + sesID);
        }
        else
        {
            PECommonTool.Log("客户端下线失败: " + sesID);
        }
    }
Ejemplo n.º 12
0
    public void HandleReqStrong(MsgPack pack)
    {
        ReqStrong reqData = pack.msg.ReqStrong;
        NetMsg    newMsg  = new NetMsg
        {
            cmd = (int)MsgType.RspStrong,
        };

        int        pos       = reqData.pos;
        PlayerData pd        = CacheSvc.Instance.GetPlayerDataBySession(pack.session);
        int        curStarLv = pd.Strong[pos];

        CfgStrong nextCfg = CfgSvc.Instance.GetStrongCfg(pos, curStarLv + 1);

        if (nextCfg != null)
        {
            if (pd.Coin < nextCfg.coin)
            {
                newMsg.err = (int)ErrorCode.LackCoin;
            }
            else if (pd.Level < nextCfg.minLv)
            {
                newMsg.err = (int)ErrorCode.LackLevel;
            }
            else if (pd.Crystal < nextCfg.crystal)
            {
                newMsg.err = (int)ErrorCode.LackCrystal;
            }
            else
            {
                //修改缓存,更新数据库
                pd.Strong[pos] += 1;
                pd.Hp          += nextCfg.addHp;
                pd.Ad          += nextCfg.addHurt;
                pd.Ap          += nextCfg.addHurt;
                pd.Addef       += nextCfg.addDef;
                pd.Apdef       += nextCfg.addDef;
                pd.Coin        -= nextCfg.coin;
                pd.Crystal     -= nextCfg.crystal;

                if (CacheSvc.Instance.UpdatePlayerDataToDB(pd.ID, pd))
                {
                    newMsg.RspStrong = new RspStrong
                    {
                        data = pd,
                    };
                }
                else
                {
                    newMsg.err = (int)ErrorCode.UpdateDBFailed;
                }
            }
        }
        else
        {
            //这里防止客户端在已经升满级的情况下发起强化请求
            PECommonTool.Log("获取强化配置错误", LogType.Error);
            return;
        }

        pack.session.SendMsg(newMsg);
    }
Ejemplo n.º 13
0
 protected override void OnConnected()
 {
     PECommonTool.Log("New Client Connected");
     SessionID = ServerRoot.Instance.GetSessionID();
 }
Ejemplo n.º 14
0
    public PlayerData QueryPlayerData(string acct, string password)
    {
        bool            isNewAcct  = true;
        PlayerData      playerData = null;
        MySqlDataReader reader     = null;
        string          quest      = "select * from account where acct=@acct";

        try
        {
            MySqlCommand cmd = new MySqlCommand(quest, conn);
            cmd.Parameters.AddWithValue("acct", acct);
            reader = cmd.ExecuteReader();

            if (reader.Read())
            {
                isNewAcct = false;
                string tmpPassword = reader.GetString("password");
                if (string.Equals(password, tmpPassword))
                {
                    int    id        = reader.GetInt32("id");
                    string name      = reader.GetString("name");
                    int    level     = reader.GetInt32("level");
                    int    exp       = reader.GetInt32("exp");
                    int    power     = reader.GetInt32("power");
                    int    coin      = reader.GetInt32("coin");
                    int    diamond   = reader.GetInt32("diamond");
                    int    hp        = reader.GetInt32("hp");
                    int    ad        = reader.GetInt32("ad");
                    int    ap        = reader.GetInt32("ap");
                    int    addef     = reader.GetInt32("addef");
                    int    apdef     = reader.GetInt32("apdef");
                    int    dodge     = reader.GetInt32("dodge");
                    int    pierce    = reader.GetInt32("pierce");
                    int    critical  = reader.GetInt32("critical");
                    int    guideid   = reader.GetInt32("guideid");
                    string strongStr = reader.GetString("strong");
                    int    crystal   = reader.GetInt32("crystal");
                    long   time      = reader.GetInt64("time");
                    int    fbid      = reader.GetInt32("fubenid");


                    #region  读取拼接的强化数据
                    string[] tmp    = strongStr.Split('#');
                    int[]    strong = new int[6];
                    for (int i = 0; i < tmp.Length; i++)
                    {
                        if (string.IsNullOrEmpty(tmp[i]))
                        {
                            continue;
                        }
                        strong[i] = int.Parse(tmp[i]);
                    }
                    #endregion


                    playerData = new PlayerData(id, name, level, exp, power, coin, diamond,
                                                hp, ad, ap, addef, apdef, dodge, pierce, critical, guideid, strong, crystal,
                                                time, fbid);



                    #region  测试代码
                    //byte[] btArr = new byte[124];
                    //reader.GetBytes(reader.GetOrdinal("taskrewardstate"), 0, btArr, 0, 124);
                    //TaskRewardState[] arr = SerializeMgr.DeserializeBinary<TaskRewardState>(btArr);
                    //playerData.RewardStateArr = arr;

                    #endregion
                }
                else
                {
                    //密码错误
                }
            }
        }
        catch (Exception e)
        {
            PECommonTool.Log("QueryPlayerData: " + e.Message, LogType.Error);
        }
        finally {
            if (reader != null)
            {
                reader.Close();
            }
            if (isNewAcct)
            {
                //创建新账号
                long time = TimerSvc.Instance.GetNowTime();
                playerData = new PlayerData(time);

                //插入新账号时,一定要把返回的主键id赋值给playerdata,不然会导致所有的新账号的id都是默认值-1
                playerData.ID = InsertNewAccount(acct, password, playerData);
            }
        }

        return(playerData);
    }