1.编写buffer工厂创建
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Google.protobuf;
namespace Game.Net
{
public class BufferFactory
{
enum MessageType
{
ACK = 0; //确认报文
Login = 1; //业务逻辑的报文
}
//创建并发送报文
//构造函数,创建BufferFactory的
//IMessage 导入谷歌的命名空间using Google.protobuf;
public static BufferEntity CreateAndSendPackage(int messageID,IMessage message)
{
//第一个0表示序号,发送的时候改变序号
//第二个0表示模块定位号,现在暂时定为0
BufferEntity buffer = new BufferEntity(
USocket.local.endPoint,
USocket.local.sessionID,
0,
0,
MessageType.Login.GetHashCode(),
messageID,
ProtobufHelper.ToBytes(message) //将message对象序列化一下
);
USocket.local.Send(buffer);
return buffer;
}
}
}
2.编写proto测试用类
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using ProtoMsg; //所有protobuf转化为cs的文件都在这个命名空间下面
public class ProtoTest : MonoBehaviour
{
//Start is called befored the first frame update
void Start()
{
/*UserInfo userInfo = new UserInfo();
//模拟一下
userInfo.Account = "11111";//通过用户界面框动态的获取
userInfo.Password = "kkkkk";
//注册的协议
//这些类都是继承IMessage这个接口
UserRegisterC2S userRegisterC2S = new UserRegisterC2S();
userRegisterC2S.UserInfo = userInfo;
//客户端和服务器定义的1001,用于识别具体左什么业务的
//通过下面的这个接口序列化成字节数组,构造BufferEntity成可以发送的数据
BufferEntity bufferEntity = BufferFactory.CreateAndSendPackage(1001,userInfo);
//反序列化 举例
//收到 byte [ ] 字节数组.将字节数组转化成实体对象
//反序列化成UserRegisterC2S这个类
UserRegisterC2S userRegisterC2S1 = ProtobufHelper.FromBytes<UserRegisterC2S>(bufferEntity.proto);*/
}
void Update()
{
}
}