public override void Init() { socket = new PESocket <ServerSession, NetMsg>(); socket.StartAsServer(ServerCfg.IP, ServerCfg.Port); PECommonTool.Log("NetSvc Init Done"); }
/// <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); }
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]); }
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); }
protected override void OnReciveMsg(NetMsg msg) { //受到消息时,打包给网络服务层处理 string str = ((MsgType)msg.cmd).ToString(); PECommonTool.Log(str); NetSvc.Instance.AddMsgPack(new MsgPack(this, msg)); }
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); }
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; } }
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; } }
/// <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); }
/// <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); }
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); } }
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); }
protected override void OnConnected() { PECommonTool.Log("New Client Connected"); SessionID = ServerRoot.Instance.GetSessionID(); }
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); }