/// <summary> /// 返回了注册结果 /// </summary> /// <param name="obj"></param> private void HandleUserRegisterS2C(BufferEntity p) { UserRegisterS2C s2cMSG = ProtobufHelper.FromBytes <UserRegisterS2C>(p.proto); switch (s2cMSG.Result) { case 0: Debug.Log("注册成功!"); //打开提示窗体 提示 WindowManager.Instance.ShowTips("注册成功!"); break; case 1: break; case 2: break; case 3: Debug.Log("帐号已被注册!"); WindowManager.Instance.ShowTips("帐号已被注册!"); //打开提示窗体 break; default: break; } }
/// <summary> /// 选择召唤师技能的协议 /// </summary> /// <param name="response"></param> private void HandleRoomSelectHeroSkillS2C(BufferEntity response) { RoomSelectHeroSkillS2C s2cMSG = ProtobufHelper.FromBytes <RoomSelectHeroSkillS2C>(response.proto); if (s2cMSG.GridID == 0) { rolesDIC[s2cMSG.RolesID].transform.Find("Hero_SkillA").GetComponent <Image>().sprite = ResManager.Instance.LoadGeneralSkill(s2cMSG.SkillID); if (RoomCtrl.Instance.CheckIsSelfRoles(s2cMSG.RolesID)) { SkillA.sprite = ResManager.Instance.LoadGeneralSkill(s2cMSG.SkillID); SkillInfo.gameObject.SetActive(false); } } else { rolesDIC[s2cMSG.RolesID].transform.Find("Hero_SkillB").GetComponent <Image>().sprite = ResManager.Instance.LoadGeneralSkill(s2cMSG.SkillID); if (RoomCtrl.Instance.CheckIsSelfRoles(s2cMSG.RolesID)) { SkillB.sprite = ResManager.Instance.LoadGeneralSkill(s2cMSG.SkillID); //关闭技能选择面板 SkillInfo.gameObject.SetActive(false); } } }
/// <summary> /// 发送聊天信息 /// </summary> /// <param name="response"></param> private void HandleRoomSendMsgS2C(BufferEntity response) { RoomSendMsgS2C s2cMSG = ProtobufHelper.FromBytes <RoomSendMsgS2C>(response.proto); ChatText.text += $"{RoomCtrl.Instance.GetNickName(s2cMSG.RolesID)}:{s2cMSG.Text}\n"; ChatVertical.value = 0; }
/// <summary> /// 加载进度 /// </summary> /// <param name="response"></param> private void HandleRoomLoadProgressS2C(BufferEntity response) { RoomLoadProgressS2C s2cMSG = ProtobufHelper.FromBytes <RoomLoadProgressS2C>(response.proto); //更新界面 if (s2cMSG.IsBattleStart == true) { ct.Cancel(); for (int i = 0; i < s2cMSG.RolesID.Count; i++) { playerLoadDIC[s2cMSG.RolesID[i]].transform.Find("Progress") .GetComponent <Text>().text = "100%"; } async.allowSceneActivation = true; Close(); } else { //如果还不能进入战斗场景 for (int i = 0; i < s2cMSG.RolesID.Count; i++) { playerLoadDIC[s2cMSG.RolesID[i]].transform.Find("Progress") .GetComponent <Text>().text = $"{s2cMSG.LoadProgress[i]}%"; } } }
/// <summary> /// 注册功能 /// </summary> /// <param name="request"></param> private void HandleUserRegisterC2S(BufferEntity request) { UserRegisterC2S c2sMSG = ProtobufHelper.FromBytes <UserRegisterC2S>(request.proto); UserRegisterS2C s2cMSG = new UserRegisterS2C(); if (DBUserInfo.Instance.Select(MySqlCMD.Where("Account", c2sMSG.UserInfo.Account)) != null) { Debug.Log("帐号已被注册"); s2cMSG.Result = 3; } else { bool result = DBUserInfo.Instance.Insert(c2sMSG.UserInfo); if (result == true) { s2cMSG.Result = 0;//注册成功 } else { s2cMSG.Result = 4;//未知原因导致的失败 } } //返回结果 BufferFactory.CreqateAndSendPackage(request, s2cMSG); }
/////////////////////////////////////////////有效時間性Buffer//////////////////////////////////////////////////////// /// <summary> /// 腳色取得Buffer,傳入Buffer /// </summary> public virtual void ReceiveBuffer(Buffer _buffer) { if (BufferDic == null) { Debug.LogWarning("BufferDic為null"); return; } //尚未擁有此BufferID if (!BufferDic.ContainsKey(_buffer.ID)) { Go_BufferEntity = Instantiate(Prefab_BufferEntity, Vector2.zero, Quaternion.identity) as GameObject; Go_BufferEntity.transform.parent = Trans_BufferList; Com_BufferEntity = Go_BufferEntity.GetComponent <BufferEntity>(); Com_BufferEntity.IniBuffer(_buffer, this); List <BufferEntity> TmpBufferEntityList = new List <BufferEntity>(); TmpBufferEntityList.Add(Com_BufferEntity); BufferDic.Add(_buffer.ID, TmpBufferEntityList);//加入BufferDIc字典 } else//已經擁有此BufferID { //如果此狀態是可疊加的 if (_buffer.Stackable) { Go_BufferEntity = Instantiate(Prefab_BufferEntity, Vector2.zero, Quaternion.identity) as GameObject; Go_BufferEntity.transform.parent = Trans_BufferList; Com_BufferEntity = Go_BufferEntity.GetComponent <BufferEntity>(); Com_BufferEntity.IniBuffer(_buffer, this); BufferDic[_buffer.ID].Add(Com_BufferEntity); } else//如果此狀態不可疊加 { BufferDic[_buffer.ID][0].IniBuffer(_buffer, this); } } }
/// <summary> /// 返回了登录的结果 /// </summary> /// <param name="obj"></param> private void HandleUserLoginS2C(BufferEntity p) { UserLoginS2C s2cMSG = ProtobufHelper.FromBytes <UserLoginS2C>(p.proto); switch (s2cMSG.Result) { case 0: Debug.Log("登录成功!"); //保存数据 if (s2cMSG.RolesInfo != null) { //保存数据 LoginCtrl.Instance.SaveRolesInfo(s2cMSG.RolesInfo); //打开大厅界面 WindowManager.Instance.OpenWindow(WindowType.LobbyWindow); } else { //跳转到角色界面 WindowManager.Instance.OpenWindow(WindowType.RolesWindow); } Close(); //关闭自己 break; case 2: Debug.Log("帐号密码不匹配!"); WindowManager.Instance.ShowTips("帐号密码不匹配!"); //打开提示窗体 break; default: break; } }
/////////////////////////////////////////////有效時間性Buffer//////////////////////////////////////////////////////// /// <summary> /// 腳色取得Buffer,傳入Buffer /// </summary> public virtual void ReceiveBuffer(Buffer _buffer) { if (BufferDic == null) { Debug.LogWarning("BufferDic為null"); return; } //尚未擁有此BufferID if (!BufferDic.ContainsKey(_buffer.ID)) { Go_BufferEntity = Instantiate(Prefab_BufferEntity, Vector2.zero, Quaternion.identity) as GameObject; Go_BufferEntity.transform.parent = Trans_BufferList; Com_BufferEntity = Go_BufferEntity.GetComponent<BufferEntity>(); Com_BufferEntity.IniBuffer(_buffer, this); List<BufferEntity> TmpBufferEntityList = new List<BufferEntity>(); TmpBufferEntityList.Add(Com_BufferEntity); BufferDic.Add(_buffer.ID, TmpBufferEntityList);//加入BufferDIc字典 } else//已經擁有此BufferID { //如果此狀態是可疊加的 if (_buffer.Stackable) { Go_BufferEntity = Instantiate(Prefab_BufferEntity, Vector2.zero, Quaternion.identity) as GameObject; Go_BufferEntity.transform.parent = Trans_BufferList; Com_BufferEntity = Go_BufferEntity.GetComponent<BufferEntity>(); Com_BufferEntity.IniBuffer(_buffer, this); BufferDic[_buffer.ID].Add(Com_BufferEntity); } else//如果此狀態不可疊加 { BufferDic[_buffer.ID][0].IniBuffer(_buffer, this); } } }
protected override void OnConvert(BufferEntity cEntity, BaseLogicEntity <BaseEntity> lEntity) { var msg = OnConvert(lEntity.Entity);//lEntity.Entity; var caches = ProtoBufSerialize.Serialize(msg); // 创建通信实体 InitilizeBuffer(cEntity, caches); }
/// <summary> /// 解散房间 /// </summary> /// <param name="response"></param> private void HandleRoomCloseS2C(BufferEntity response) { RoomCloseS2C s2cMSG = ProtobufHelper.FromBytes <RoomCloseS2C>(response.proto); Close(); RoomCtrl.Instance.RemoveRoomInfo(); WindowManager.Instance.OpenWindow(WindowType.LobbyWindow); }
protected override void OnConvert(BufferEntity cEntity, BaseLogicEntity <FromIncomBufferEntity> lEntity) { // 转换字节数据 var msg = OnConvert(lEntity.Entity); //var caches = ProtoBufSerialize.Serialize(msg); // 创建通信实体 InitilizeBuffer(cEntity, msg); }
/// <summary> /// 处理用户传输过来的输入 /// </summary> /// <param name="obj"></param> private void HandleBattleUserInputC2S(BufferEntity request) { BattleUserInputC2S c2sMSG = ProtobufHelper.FromBytes <BattleUserInputC2S>(request.proto); RoomEntity roomEntity = RoomManager.Instance.Get(c2sMSG.RoomID); if (roomEntity != null) { roomEntity.HandleBattleUserInputC2S(c2sMSG); } }
/// <summary> /// 锁定英雄 /// </summary> /// <param name="response"></param> private void HandleRoomLockHeroS2C(BufferEntity response) { RoomLockHeroS2C s2cMSG = ProtobufHelper.FromBytes <RoomLockHeroS2C>(response.proto); rolesDIC[s2cMSG.RolesID].transform.Find("Hero_State").GetComponent <Text>().text = "已锁定"; if (RoomCtrl.Instance.CheckIsSelfRoles(s2cMSG.RolesID)) { isLock = true;//已锁定英雄 shift+f12 } }
private static void TestSend() { UserInfo userInfo = new UserInfo(); userInfo.Account = "11111"; userInfo.Password = "******"; UserRegisterC2S userRegisterC2S = new UserRegisterC2S(); userRegisterC2S.UserInfo = userInfo; BufferEntity bufferEntity = BufferFactory.CreateAndSendPackage(1001, userInfo); }
/// <summary> /// 用户选择英雄 /// </summary> /// <param name="request"></param> private void HandleRoomSelectHeroC2S(BufferEntity request) { RoomSelectHeroC2S c2sMSG = ProtobufHelper.FromBytes <RoomSelectHeroC2S>(request.proto); RoomSelectHeroS2C s2cMSG = new RoomSelectHeroS2C(); s2cMSG.HeroID = c2sMSG.HeroID; PlayerEntity p = PlayerManager.GetPlayerEntityFromSession(request.session); s2cMSG.RolesID = p.rolesInfo.RolesID; p.roomEntity.Broadcast(request.messageID, s2cMSG); }
/// <summary> /// 选择了英雄,更新头像 /// </summary> /// <param name="response"></param> private void HandleRoomSelectHeroS2C(BufferEntity response) { RoomSelectHeroS2C s2cMSG = ProtobufHelper.FromBytes <RoomSelectHeroS2C>(response.proto); rolesDIC[s2cMSG.RolesID].transform.Find("Hero_Head").GetComponent <Image>().sprite = ResManager.Instance.LoadRoundHead(s2cMSG.HeroID.ToString()); if (RoomCtrl.Instance.CheckIsSelfRoles(s2cMSG.RolesID)) { //lockHeroID 缓存当前选择的英雄ID lockHeroID = s2cMSG.HeroID; } }
/// <summary> /// 退出匹配的结果 /// </summary> /// <param name="obj"></param> private void HandleLobbyQuitMatchS2C(BufferEntity response) { LobbyQuitMatchS2C s2cMSG = ProtobufHelper.FromBytes <LobbyQuitMatchS2C>(response.proto); if (s2cMSG.Result == 0) { //匹配和排位 激活 MatchModeBtn.gameObject.SetActive(true); QualifyingBtn.gameObject.SetActive(true); //停止匹配和匹配提示的物体隐藏掉 StopMatchBtn.gameObject.SetActive(false); MatchTips.gameObject.SetActive(false); } }
/// <summary> /// 发送聊天信息 /// </summary> /// <param name="request"></param> private void HandleRoomSendMsgC2S(BufferEntity request) { RoomSendMsgC2S c2sMSG = ProtobufHelper.FromBytes <RoomSendMsgC2S>(request.proto); RoomSendMsgS2C s2cMSG = new RoomSendMsgS2C(); PlayerEntity p = PlayerManager.GetPlayerEntityFromSession(request.session); s2cMSG.RolesID = p.rolesInfo.RolesID; s2cMSG.Text = c2sMSG.Text; //指向广播给同个阵营的玩家 //p.roomEntity.Broadcast(p.TeamID, request.messageID, s2cMSG); p.roomEntity.Broadcast(request.messageID, s2cMSG); }
/// <summary> /// 加载进入战斗 /// </summary> /// <param name="response"></param> private void HandleRoomToBattleS2C(BufferEntity response) { RoomToBattleS2C s2cMSG = ProtobufHelper.FromBytes <RoomToBattleS2C>(response.proto); RoomCtrl.Instance.SavePlayerList(s2cMSG.PlayerList); transform.Find("LoadBG").gameObject.SetActive(true); HeroA_item = transform.Find("LoadBG/L_TeamA/HeroA_item"); HeroB_item = transform.Find("LoadBG/L_TeamB/HeroB_item"); for (int i = 0; i < s2cMSG.PlayerList.Count; i++) { GameObject go; //A队伍 if (s2cMSG.PlayerList[i].TeamID == 0) { go = GameObject.Instantiate(HeroA_item.gameObject, HeroA_item.parent, false); } //B队伍 else { go = GameObject.Instantiate(HeroB_item.gameObject, HeroB_item.parent, false); } go.transform.GetComponent <Image>().sprite = ResManager.Instance.LoadHeroTexture(s2cMSG.PlayerList[i].HeroID); go.transform.Find("NickName").GetComponent <Text>().text = s2cMSG.PlayerList[i].RolesInfo.NickName; go.transform.Find("SkillA").GetComponent <Image>().sprite = ResManager.Instance.LoadGeneralSkill(s2cMSG.PlayerList[i].SkillA); go.transform.Find("SkillB").GetComponent <Image>().sprite = ResManager.Instance.LoadGeneralSkill(s2cMSG.PlayerList[i].SkillB); go.transform.Find("Progress").GetComponent <Text>().text = "0%"; go.gameObject.SetActive(true); //缓存克隆出来的游戏物体 更新进度 playerLoadDIC[s2cMSG.PlayerList[i].RolesInfo.RolesID] = go; } async = SceneManager.LoadSceneAsync("Level01"); async.allowSceneActivation = false;//不要激活场景 //定时的去发送加载进度 SendProgeress(); }
/// <summary> /// 选择英雄 /// </summary> /// <param name="request"></param> private void HandleRoomSelectHeroSkillC2S(BufferEntity request) { RoomSelectHeroSkillC2S c2sMSG = ProtobufHelper.FromBytes <RoomSelectHeroSkillC2S>(request.proto); RoomSelectHeroSkillS2C s2cMSG = new RoomSelectHeroSkillS2C(); s2cMSG.SkillID = c2sMSG.SkillID; s2cMSG.GridID = c2sMSG.GridID; PlayerEntity p = PlayerManager.GetPlayerEntityFromSession(request.session); s2cMSG.RolesID = p.rolesInfo.RolesID; //缓存角色技能 p.roomEntity.UpdateSKill(s2cMSG.RolesID, s2cMSG.SkillID, s2cMSG.GridID); p.roomEntity.Broadcast(request.messageID, s2cMSG); }
/// <summary> /// 进入匹配的结果 /// </summary> /// <param name="obj"></param> private void HandleLobbyToMatchS2C(BufferEntity response) { LobbyToMatchS2C s2cMSG = ProtobufHelper.FromBytes <LobbyToMatchS2C>(response.proto); if (s2cMSG.Result == 0) { MatchModeBtn.gameObject.SetActive(false); QualifyingBtn.gameObject.SetActive(false); StopMatchBtn.gameObject.SetActive(true); MatchTips.gameObject.SetActive(true); } else { //无法进行匹配 可能是被惩罚 需要等待 } }
/// <summary> /// 登录功能 /// </summary> /// <param name="request"></param> private void HandleUserLoginC2S(BufferEntity request) { //反序列化 得到客户端 发送的数据 UserLoginC2S c2sMSG = ProtobufHelper.FromBytes <UserLoginC2S>(request.proto); //主要是看反序列化的功能 是否正常 //Debug.Log("登录:"+ JsonHelper.SerializeObject(c2sMSG)); //匹配记录:相同的账号 相同的密码 string sqlCMD = MySqlCMD.Where("Account", c2sMSG.UserInfo.Account) + MySqlCMD.And("Password", c2sMSG.UserInfo.Password); UserLoginS2C s2cMSG = new UserLoginS2C(); UserInfo userInfo = DBUserInfo.Instance.Select(sqlCMD); if (userInfo != null) { s2cMSG.UserInfo = userInfo; s2cMSG.Result = 0;//登录成功 //保存角色信息到服务器本地 PlayerManager.Add(request.session, s2cMSG.UserInfo.ID, new PlayerEntity() { userInfo = s2cMSG.UserInfo, session = request.session, }); RolesInfo rolesInfo = DBRolesInfo.Instance.Select(MySqlCMD.Where("ID", s2cMSG.UserInfo.ID)); if (rolesInfo != null) { s2cMSG.RolesInfo = rolesInfo; //获取到了角色信息 缓存起来 PlayerEntity playerEntity = PlayerManager.GetPlayerEntityFromSession(request.session); playerEntity.rolesInfo = rolesInfo; } } else { s2cMSG.Result = 2;//帐号和密码不匹配 } //返回结果 BufferFactory.CreqateAndSendPackage(request, s2cMSG); }
/// <summary> /// 更新匹配的状态 /// </summary> /// <param name="obj"></param> private void HandleLobbyUpdateMatchStateS2C(BufferEntity response) { LobbyUpdateMatchStateS2C s2cMSG = ProtobufHelper.FromBytes <LobbyUpdateMatchStateS2C>(response.proto); if (s2cMSG.Result == 0) { MatchModeBtn.gameObject.SetActive(true); QualifyingBtn.gameObject.SetActive(true); StopMatchBtn.gameObject.SetActive(false); MatchTips.gameObject.SetActive(false); //房间信息 RolesCtrl.Instance.SaveRoomInfo(s2cMSG.RoomInfo); Close(); WindowManager.Instance.OpenWindow(WindowType.RoomWindow); } }
/// <summary> /// 发送了加载进度过来 /// </summary> /// <param name="request"></param> private void HandleRoomLoadProgressC2S(BufferEntity request) { RoomLoadProgressC2S c2sMSG = ProtobufHelper.FromBytes <RoomLoadProgressC2S>(request.proto); RoomLoadProgressS2C s2cMSG = new RoomLoadProgressS2C(); s2cMSG.IsBattleStart = false; PlayerEntity p = PlayerManager.GetPlayerEntityFromSession(request.session); bool result = p.roomEntity.UpdateLoadProgress(p.rolesInfo.RolesID, c2sMSG.LoadProgress); if (result == true) { //所有玩家都已经加载完成了 } else { p.roomEntity.GetLoadProgress(ref s2cMSG); BufferFactory.CreqateAndSendPackage(request, s2cMSG); } }
private void HandleRolesCreateS2C(BufferEntity response) { //处理角色是否创建成功的逻辑 RolesCreateS2C s2cMSG = ProtobufHelper.FromBytes <RolesCreateS2C>(response.proto); if (s2cMSG.Result == 0) { //缓存角色 RolesCtrl.Instance.SaveRolesInfo(s2cMSG.RolesInfo); //关闭掉当前这个窗口 Close(); //打开大厅窗口 WindowManager.Instance.OpenWindow(WindowType.LobbyWindow); } else { //角色已经存在 创建失败 Debug.Log("角色已经存在 创建失败"); WindowManager.Instance.ShowTips("已经存在相同的角色名,创建失败!"); } }
//进入匹配 private void HandleLobbyToMatchC2S(BufferEntity request) { LobbyToMatchC2S c2sMSG = ProtobufHelper.FromBytes <LobbyToMatchC2S>(request.proto); LobbyToMatchS2C s2cMSG = new LobbyToMatchS2C(); s2cMSG.Result = 0; MatchEntity matchEntity = new MatchEntity(); PlayerEntity player = PlayerManager.GetPlayerEntityFromSession(request.session); //缓存匹配信息 player.matchEntity = matchEntity; matchEntity.TeamID = player.rolesInfo.RolesID; matchEntity.player = player; BufferFactory.CreqateAndSendPackage(request, s2cMSG); //让角色进入匹配状态 MatchManager.Instance.Add(matchEntity); }
protected void InitilizeBuffer(BufferEntity buffer, byte[] caches) { if (buffer == null) { return; } buffer.FindKey = FindKey; if (buffer.Bytes == null) { buffer.Bytes = new byte[caches.Length]; } else if (buffer.Bytes.Length < caches.Length) { Array.Resize(ref buffer.Bytes, caches.Length); } Array.Copy(caches, 0, buffer.Bytes, 0, caches.Length); buffer.BytesLength = caches.Length; }
//退出匹配 private void HandleLobbyQuitMatchC2S(BufferEntity request) { LobbyQuitMatchC2S c2sMSG = ProtobufHelper.FromBytes <LobbyQuitMatchC2S>(request.proto); LobbyQuitMatchS2C s2cMSG = new LobbyQuitMatchS2C(); PlayerEntity player = PlayerManager.GetPlayerEntityFromSession(request.session); if (player != null) { bool result = MatchManager.Instance.Remove(player.matchEntity); if (result == true) { player.matchEntity = null; s2cMSG.Result = 0;//移除成功 } else { s2cMSG.Result = 1;//不在匹配状态 } } BufferFactory.CreqateAndSendPackage(request, s2cMSG); }
private void HandleRolesCreateC2S(BufferEntity request) { //去数据库查询下角色表有没有存在相同名称的 RolesCreateC2S c2sMSG = ProtobufHelper.FromBytes <RolesCreateC2S>(request.proto); RolesCreateS2C s2cMSG = new RolesCreateS2C(); //数据库查询 结果为空 说明没有存在该角色名称 if (DBRolesInfo.Instance.Select(MySqlCMD.Where("NickName", c2sMSG.NickName)) == null) { //用户ID PlayerEntity player = PlayerManager.GetPlayerEntityFromSession(request.session); RolesInfo rolesInfo = new RolesInfo(); rolesInfo.NickName = c2sMSG.NickName; rolesInfo.ID = player.userInfo.ID; rolesInfo.RolesID = player.userInfo.ID; bool result = DBRolesInfo.Instance.Insert(rolesInfo); if (result == true) { s2cMSG.Result = 0; s2cMSG.RolesInfo = rolesInfo; //缓存角色的信息到服务器本地 player.rolesInfo = rolesInfo; } else { s2cMSG.Result = 2;//未知的异常 等待排查 Debug.Log($"插入角色数据存在异常,昵称:{c2sMSG.NickName}!"); } } else { s2cMSG.Result = 1;//创建结果是1 } BufferFactory.CreqateAndSendPackage(request, s2cMSG); }
protected override void SetRouteing(BufferEntity cEntity, BaseLogicEntity <BaseEntity> lEntity) { var routeingString = GetRouteingString(lEntity.Entity); cEntity.SetRouteing(routeingString); }
void DispatchNetEvent(BufferEntity buffer) { //进行报文分发 NetEvent.Instance.Dispatch(buffer.messageID, buffer); }