4.2 KiB
JXSoftTools
Unity版本2018.4.32f
JXsoft是由github作者jkpete编写的一款基于Qframework实现的Unity信息管理工具。
信息采集过滤,外接插件,用于信息拦截,网络通讯,本地化存储等等信息管理工具。
该项目使用了QFramework作为框架基础依赖,该套件也可以脱离QFramework单独使用。
最近更新:增加了HttpServer,可以使用Unity搭建Http服务器了。
消息转换工具MsgTransmitTools
目前支持的通讯方式一览,后续会增加更多的通讯方式
Client | Server |
---|---|
TCP | TCP |
UDP | |
Http |
对应的接口命名为 I + Name + Type (e.g. ITCPClient,ITCPServer)
UDP虽然是无连接协议,但通讯包是基于UDPClient这个类编写的,故归为Client那一栏
详情参考 UdpClient 类官方说明
目前支持的协议格式一览,后续会增加更多协议格式转换
Protocol |
---|
Hex |
Json |
String |
协议转换方案后续由协议API提供参考跟封装(此处用了litjson作为协议转换方案)。
使用方法
1.定义响应&请求消息结构
使用模板创建消息结构(好处是省去具体消息筛选规则,也可以覆写对应的接口方法来重构消息筛选规则,方便对程序原型进行开发跟测试,但并不推荐这么做,实际有些模板类用到了反射,会严重影响程序性能,而且判断方式也不会很严谨,推荐使用相关库函数进行判断与赋值)
//此时筛选{"msg":"message test"}格式的json信息
public class YourResponse: AbstractJsonResponse
{
public string msg;
public YourResponse() {
this.msg = "";
}
}
使用接口创建消息结构(可以自行定义消息筛选规则,可以用类或者结构体,下面例子筛选数字信息,推荐使用接口)
public struct YourNumberFilterResponse : IResponse
{
public int codeNum;
public string toProtocolData()
{
return "你想要打印的调试信息,无需打印返回空字符串即可";
}
public bool trySetData(string protocolData)
{
bool isNumber = int.TryParse(protocolData, out codeNum);
if (!isNumber)
{
exceptionMsg = "这不是数字";
}
return isNumber;
}
}
请求消息结构更为简单
public class YourRequest:IRequest {
public string toProtocolData()
{
return "要发的请求内容";
}
}
2.注册消息事件,以TCPClient为例
引用包JXSoft,实现接口ITCPClient
using UnityEngine;
using JXSoft;
public class TCPClientExample : MonoBehaviour,ITCPClient
{
// Start is called before the first frame update
void Start()
{
//注册接收到数据类型事件监听
this.RegisterMessageEvent<YourResponse>(e => {
Debug.Log("TestGetMsg:"+e.msg);
//发送数据
this.sendRequest(new StringRequest("Received!"));
//取消接收该数据
this.offReceive<YourResponse>();
});
//开启开数据类型接收
this.onReceive<YourResponse>();
}
}
3.配置场景
把MsgTransmitTools -> ExtendLinkModel-> TCPClient -> Preferb目录下的TCPClientInstance拖拽至场景中的Canvas下面
填写好要链接的IP地址,端口号,程序运行前服务必须是开启状态
运行前先使用SSCOM,或者其他TCP调试助手,开启为127.0.0.1:20000的本机TCP服务
发送{"msg":"Ok"}即可
此时第二次发送同类数据已经不会再返回收到信息也不会打印对应数据,因为我们在第一次收到的时候已经关闭了该类数据的接收。如果想继续响应该数据的接收,仅需重新调用一次onReceive<对应的数据类型>即可