金铉Unity插件库 Unity版本2018.4.32f 目前包含本地化存储功能(根据类名存储读写),TCP客户端监听类型功能
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

4.2 KiB

JXSoftTools

Unity版本2018.4.32f

JXsoft是由github作者jkpete编写的一款基于Qframework实现的Unity信息管理工具。

信息采集过滤,外接插件,用于信息拦截,网络通讯,本地化存储等等信息管理工具。

该项目使用了QFramework作为框架基础依赖,该套件也可以脱离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<对应的数据类型>即可