/// <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; } }
/// <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 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="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); }
/// <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 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]}%"; } } }
public static void Run(Session session, PacketInfo packetInfo) { ushort opcode = packetInfo.Opcode; Type t = Hotfix.Scene.GetComponent <OpcodeTypeComponent>().GetType(opcode); object message = ProtobufHelper.FromBytes(t, packetInfo.Bytes, packetInfo.Index, packetInfo.Length); Hotfix.Scene.GetComponent <MessageDispatherComponent>().Handle(session, new MessageInfo(packetInfo.RpcId, packetInfo.Opcode, message)); }
/// <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); }
public void Run(Session session, PacketInfo packetInfo) { ushort opcode = packetInfo.Opcode; Type t = SessionHelper.GetMessageType(opcode); object aa = ProtobufHelper.FromBytes(t, packetInfo.Bytes, packetInfo.Index, packetInfo.Length); IMessage message = (IMessage)aa; Hotfix.Scene.GetComponent <MessageDispatherComponent>().Handle(session, opcode, message); }
/// <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); } }
public void FromBytes(int iteration) { #pragma warning disable CS0618 var binaryBytes = BinaryHelper.ToBytes(_testModel); #pragma warning restore CS0618 var dataContractBytes = DataContractHelper.ToBytes <TestModel>(_testModel); var jilBytes = JilHelper.ToBytes <TestModel>(_testModel); var messagePackBytes = MessagePackHelper.ToBytes <TestModel>(_testModel); var msgPackBytes = MsgPackHelper.ToBytes <TestModel>(_testModel); var newtonsoftJsonBytes = NewtonsoftJsonHelper.ToBytes <TestModel>(_testModel); var protobufBytes = ProtobufHelper.ToBytes <TestModel>(_testModel); var sharpYamlBytes = SharpYamlHelper.ToBytes <TestModel>(_testModel); var systemTextJsonBytes = SystemTextJsonHelper.ToBytes <TestModel>(_testModel); var utf8JsonBytes = Utf8JsonHelper.ToBytes <TestModel>(_testModel); var xmlBytes = XmlHelper.ToBytes <TestModel>(_testModel); var yamlDotNetBytes = YamlDotNetHelper.ToBytes(_testModel); var zeroFormatterBytes = ZeroFormatterHelper.ToBytes <TestModel>(_testModel); Console.WriteLine("FromBytes go!"); Runner.Initialize(); Console.WriteLine(Runner.Time("BinaryHelper FromBytes", iteration, #pragma warning disable CS0618 () => BinaryHelper.FromBytes <TestModel>(binaryBytes))); #pragma warning restore CS0618 Console.WriteLine(Runner.Time("DataContractHelper FromBytes", iteration, () => DataContractHelper.FromBytes <TestModel>(dataContractBytes))); Console.WriteLine(Runner.Time("JilHelper FromBytes", iteration, () => JilHelper.FromBytes <TestModel>(jilBytes))); Console.WriteLine(Runner.Time("MessagePackHelper FromBytes", iteration, () => MessagePackHelper.FromBytes <TestModel>(messagePackBytes))); Console.WriteLine(Runner.Time("MsgPackHelper FromBytes", iteration, () => MsgPackHelper.FromBytes <TestModel>(msgPackBytes))); Console.WriteLine(Runner.Time("NewtonsoftJsonHelper FromBytes", iteration, () => NewtonsoftJsonHelper.FromBytes <TestModel>(newtonsoftJsonBytes))); Console.WriteLine(Runner.Time("ProtobufHelper FromBytes", iteration, () => ProtobufHelper.FromBytes <TestModel>(protobufBytes))); Console.WriteLine(Runner.Time("SharpYamlHelper FromBytes", iteration, () => SharpYamlHelper.FromBytes <TestModel>(sharpYamlBytes))); Console.WriteLine(Runner.Time("SystemTextJsonHelper FromBytes", iteration, () => SystemTextJsonHelper.FromBytes <TestModel>(systemTextJsonBytes))); Console.WriteLine(Runner.Time("Utf8JsonHelper FromBytes", iteration, () => Utf8JsonHelper.FromBytes <TestModel>(utf8JsonBytes))); Console.WriteLine(Runner.Time("XmlHelper FromBytes", iteration, () => XmlHelper.FromBytes <TestModel>(xmlBytes))); Console.WriteLine(Runner.Time("YamlDotNetHelper FromBytes", iteration, () => YamlDotNetHelper.FromBytes <TestModel>(yamlDotNetBytes))); Console.WriteLine(Runner.Time("ZeroFormatterHelper FromBytes", iteration, () => ZeroFormatterHelper.FromBytes <TestModel>(zeroFormatterBytes))); Console.WriteLine("\r\nFromBytes complete!\r\n"); }
/// <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 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 } }
public static async Task <IResponse> Call(this Session session, IRequest request) { byte[] bytes = ProtobufHelper.ToBytes(request); ushort opcode = GetOpcode(request.GetType()); PacketInfo packetInfo = await session.Call(opcode, bytes); ushort responseOpcode = packetInfo.Opcode; Type t = GetMessageType(responseOpcode); object aa = ProtobufHelper.FromBytes(t, packetInfo.Bytes, packetInfo.Index, packetInfo.Length); IResponse response = (IResponse)aa; return(response); }
/// <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="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="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="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 { //无法进行匹配 可能是被惩罚 需要等待 } }
public static object ToActorMessage(this MemoryStream memoryStream) { ushort opcode = BitConverter.ToUInt16(memoryStream.GetBuffer(), 8); Type type = OpcodeTypeComponent.Instance.GetType(opcode); if (opcode < OpcodeRangeDefine.PbMaxOpcode) { return(ProtobufHelper.FromBytes(type, memoryStream.GetBuffer(), 10, (int)memoryStream.Length - 10)); } if (opcode >= OpcodeRangeDefine.JsonMinOpcode) { return(JsonHelper.FromJson(type, memoryStream.GetBuffer().ToStr(10, (int)(memoryStream.Length - 10)))); } return(MongoHelper.FromBson(type, memoryStream.GetBuffer(), 10, (int)memoryStream.Length - 10)); }
/// <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); }
public async Task <SMSG_Realm_List> Handle_SMSG_Realm_List() { var result = await this.MessageChannel.RecvMessage(); ushort opcode = result.Item1; byte[] message = result.Item2; if (opcode != MessageOpcode.SMSG_REALM_LIST) { throw new BossException(string.Format( "session: {0}, error opcode: {1}", this.ID, opcode)); } var smsgRealmList = ProtobufHelper.FromBytes <SMSG_Realm_List>(message); return(smsgRealmList); }
public async Task <SMSG_Auth_Logon_Proof_M2> Handle_SMSG_Auth_Logon_Proof_M2() { var result = await this.MessageChannel.RecvMessage(); ushort opcode = result.Item1; byte[] message = result.Item2; if (opcode != MessageOpcode.SMSG_AUTH_LOGON_PROOF_M2) { throw new BossException(string.Format( "session: {0}, error opcode: {1}", this.ID, opcode)); } var smsgAuthLogonProofM2 = ProtobufHelper.FromBytes <SMSG_Auth_Logon_Proof_M2>(message); return(smsgAuthLogonProofM2); }
public async Task <SMSG_Auth_Response> Handle_SMSG_Auth_Response() { var result = await this.IMessageChannel.RecvMessage(); ushort opcode = result.Item1; byte[] message = result.Item2; if (opcode != MessageOpcode.SMSG_AUTH_RESPONSE) { throw new BossException(string.Format( "session: {0}, opcode: {1}", this.ID, opcode)); } var smsgAuthResponse = ProtobufHelper.FromBytes <SMSG_Auth_Response>(message); return(smsgAuthResponse); }
public async Task <SMSG_Auth_Challenge> Handle_SMSG_Auth_Challenge() { var result = await this.IMessageChannel.RecvMessage(); ushort opcode = result.Item1; byte[] message = result.Item2; Logger.Debug("message: {0}", message.ToHex()); if (opcode != MessageOpcode.SMSG_AUTH_CHALLENGE) { throw new BossException(string.Format( "session: {0}, opcode: {1}", this.ID, opcode)); } var smsgAuthChallenge = ProtobufHelper.FromBytes <SMSG_Auth_Challenge>(message); return(smsgAuthChallenge); }
/// <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); } }
public async Task <SMSG_Password_Protect_Type> Handle_SMSG_Password_Protect_Type() { var result = await this.MessageChannel.RecvMessage(); ushort opcode = result.Item1; byte[] message = result.Item2; if (opcode != MessageOpcode.SMSG_PASSWORD_PROTECT_TYPE) { throw new BossException(string.Format( "session: {0}, opcode: {1}", this.ID, opcode)); } var smsgPasswordProtectType = ProtobufHelper.FromBytes <SMSG_Password_Protect_Type>(message); return(smsgPasswordProtectType); }
protected async Task <T> RecvMessage <T>() { var result = await this.IMessageChannel.RecvMessage(); ushort opcode = result.Item1; byte[] content = result.Item2; try { var message = ProtobufHelper.FromBytes <T>(content); return(message); } catch (Exception) { Logger.Trace("parse message fail, opcode: {0}", opcode); throw; } }
public void Open(string file) { this.rootList.Clear(); this.treeViewModelsDict.Clear(); var treeDict = new Dictionary <int, List <TreeNodeData> >(); byte[] bytes = File.ReadAllBytes(file); var allTreeData = ProtobufHelper.FromBytes <AllTreeData>(bytes); this.MaxNodeId = 0; this.MaxTreeId = 0; foreach (TreeNodeData treeNodeData in allTreeData.TreeNodeDatas) { List <TreeNodeData> tree; treeDict.TryGetValue(treeNodeData.TreeId, out tree); if (tree == null) { tree = new List <TreeNodeData>(); treeDict[treeNodeData.TreeId] = tree; } tree.Add(treeNodeData); if (treeNodeData.Id > this.MaxNodeId) { this.MaxNodeId = treeNodeData.Id; } if (treeNodeData.TreeId > this.MaxTreeId) { this.MaxTreeId = treeNodeData.TreeId; } } foreach (KeyValuePair <int, List <TreeNodeData> > pair in treeDict) { var treeViewModel = new TreeViewModel(pair.Value) { AllTreeViewModel = this, TreeId = pair.Key }; this.treeViewModelsDict[pair.Key] = treeViewModel; this.RootList.Add(treeViewModel.Root); } }