完善NetMsgCenter
- 创建每个模块对应模块类
- 取出消息队列中的消息
- 分发到各个模块进行处理
- 封装Client中发送消息的方法
- 制作单例模式,在发送数据时以后直接调用NetMsgCenter
using Protocol.Code;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NetMsgCenter : MonoBehaviour
{
private ClientPeer clientSocket;
public static NetMsgCenter Instance;
private void Awake()
{
Instance = this;
clientSocket = new ClientPeer();
clientSocket.Connect("127.0.0.1", 6666);
}
private void FixedUpdate()
{
if (clientSocket == null)
{
return;
}
//如果消息队列的数量大于0,就一直调用处理消息的方法
while (clientSocket.NetMsgsQueue.Count > 0)
{
NetMsg msg = clientSocket.NetMsgsQueue.Dequeue();
ProcessServerToMsg(msg);
}
}
#region 处理服务器发来的消息
//各个模块类
AccountHandler accountHandler = new AccountHandler();
ChatHandler chatHandler = new ChatHandler();
MatchHandler matchHandler = new MatchHandler();
FightHandler fightHandler = new FightHandler();
/// <summary>
/// 处理服务器发送来的消息
/// 分发到各个模块进行处理
/// </summary>
private void ProcessServerToMsg(NetMsg msg)
{
switch (msg.opCode)
{
case OpCode.Account:
accountHandler.OnReceive(msg.subCode, msg.value);
break;
case OpCode.Chat:
chatHandler.OnReceive(msg.subCode, msg.value);
break;
case OpCode.Match:
matchHandler.OnReceive(msg.subCode, msg.value);
break;
case OpCode.Fight:
fightHandler.OnReceive(msg.subCode, msg.value);
break;
}
}
#endregion
#region 发送消息
public void SendMsg(int opCode,int subCode,object value)
{
clientSocket.SendMsg(opCode,subCode,value);
}
public void SendMsg(NetMsg msg)
{
clientSocket.SendMsg(msg);
}
#endregion
}
注意事项:需要引用Server端的协议模块,把Server端的Protocol项目打包成dll文件,生成在Unity项目中。
模块类基类以及各个模块类
//基类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public abstract class BaseHandler
{
public abstract void OnReceive(int subCode,object value);
}
//模块类
//账号模块,其他模块和账号模块一样
public class AccountHandler : BaseHandler
{
public override void OnReceive(int subCode, object value)
{
}
}
有需要学习视频的欢迎关注微信公众号: