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

        PECommonTool.Log("NetSvc Init Done");
    }
Exemplo n.º 2
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);
        }
Exemplo 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]);
        }
Exemplo n.º 4
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);
    }
Exemplo 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));
    }
Exemplo 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);
    }
Exemplo n.º 7
0
 private void UpdateData(PlayerData data)
 {
     SetText(txtName, string.Format(Language.GetString(115), data.Name, data.Level));
     SetText(txtExpValue, string.Format(Language.GetString(114), "E03683", data.Experience, PECommonTool.GetExpUpvalue(data.Level)));
     expFillImg.fillAmount = data.Experience * 1.0f / PECommonTool.GetExpUpvalue(data.Level);
     SetText(txtPowerValue, string.Format(Language.GetString(114), "E03683", data.Power, PECommonTool.GetPowerLimit(data.Level)));
     powerFillImg.fillAmount = data.Power * 1.0f / PECommonTool.GetPowerLimit(data.Level);
     SetText(txtJob, string.Format(Language.GetString(109), Language.GetString(20)));
     SetText(txtFight, string.Format(Language.GetString(110), PECommonTool.GetFight(data)));
     SetText(txtHp, string.Format(Language.GetString(111), data.Hp));
     SetText(txtA, string.Format(Language.GetString(112), data.Ad + data.Ap));
     SetText(txtDef, string.Format(Language.GetString(113), data.Addef + data.Apdef));
 }
Exemplo n.º 8
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;
        }
    }
Exemplo n.º 9
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;
        }
    }
Exemplo n.º 10
0
    /// <summary>
    /// 通知玩家体力恢复
    /// </summary>
    /// <param name="id"></param>
    private void NtfAddPowerTask(int id)
    {
        NetMsg newMsg = new NetMsg
        {
            cmd = (int)MsgType.NtfPowerChg,
        };

        newMsg.NtfPowerChg = new NtfPowerChg();
        #region  通知在线玩家
        List <ServerSession> _list = CacheSvc.Instance.GetOnlineServerSes();
        for (int i = 0; i < _list.Count; i++)
        {
            PlayerData pd = CacheSvc.Instance.GetPlayerDataBySession(_list[i]);
            if (pd.Power < PECommonTool.GetPowerLimit(pd.Level))
            {
                int leftValue = PECommonTool.GetPowerLimit(pd.Level) - pd.Power;
                if (leftValue > PECommonTool.AddPowerPerTimes)
                {
                    pd.Power += PECommonTool.AddPowerPerTimes;
                }
                else
                {
                    pd.Power += leftValue;
                }

                if (!CacheSvc.Instance.UpdatePlayerDataToDB(pd.ID, pd))
                {
                    newMsg.err = (int)ErrorCode.UpdateDBFailed;
                }
                else
                {
                    newMsg.NtfPowerChg.data = pd;
                }
            }
            else
            {
                continue;
            }

            byte[] btys = PENet.PETool.PackNetMsg(newMsg);
            _list[i].SendMsg(btys);
        }
        #endregion

        //离线玩家的体力恢复通过增加time字段去计算
    }
Exemplo n.º 11
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);
    }
Exemplo n.º 12
0
    public void UpdateData(PlayerData data)
    {
        if (data != null && hadGetComponent)
        {
            //更新角色属性的显示
            SetText(txtName, data.Name);
            SetText(txtFight, PECommonTool.GetFight(data));
            SetText(txtPower, string.Format(Language.GetString(5), data.Power, PECommonTool.GetPowerLimit(data.Level)));
            SetText(txtLevel, data.Level);
            float percent = (float)data.Experience / PECommonTool.GetExpUpvalue(data.Level);
            SetText(txtExpPercent, Mathf.CeilToInt(percent * 100) + "%");
            imgExpFill.fillAmount = percent;

            //更新引导数据
            curGuideData = mCfgSvc.GetCfgGuide(data.GuideID);
            UpateGuideData();
        }
    }
Exemplo n.º 13
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);
    }
Exemplo n.º 14
0
    public void HandleReqGuide(MsgPack pack)
    {
        ReqGuide reqData = pack.msg.ReqGuide;

        NetMsg newMsg = new NetMsg
        {
            cmd = (int)MsgType.RspGuide,
        };

        PlayerData pd = CacheSvc.Instance.GetPlayerDataBySession(pack.session);

        if (pd == null || pd.GuideID != reqData.guideId)
        {
            //数据异常
            newMsg.err = (int)ErrorCode.ServerDataError;
        }
        else
        {
            CfgGuide cfg = CfgSvc.Instance.GetGuideCfg(reqData.guideId);
            if (cfg != null)
            {
                //更新数据(缓存和数据库)
                pd.GuideID += 1;
                PECommonTool.AddExp(ref pd, cfg.exp);

                //更新到数据库 todo
                if (!CacheSvc.Instance.UpdatePlayerDataToDB(pd.ID, pd))
                {
                    newMsg.err = (int)ErrorCode.UpdateDBFailed;
                }
                else
                {
                    newMsg.RspGuide = new RspGuide
                    {
                        guideId = pd.GuideID,
                        data    = pd,
                    };
                }
            }
        }
        pack.session.SendMsg(newMsg);
    }
Exemplo n.º 15
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);
        }
    }
Exemplo n.º 16
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);
    }
Exemplo n.º 17
0
 protected override void OnConnected()
 {
     PECommonTool.Log("New Client Connected");
     SessionID = ServerRoot.Instance.GetSessionID();
 }
Exemplo n.º 18
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);
    }