在我们的使用场景中,服务器会向客户端下发系统消息,系统消息的 _lctype 会是一个正整数,从而与默认的文字消息区分开。
在文档中只说明了如何重用文字消息接收自定义消息:https://leancloud.cn/docs/realtime-unity.html#类型编码
请问如何在 Unity SDK 中定义一个 自定义的消息,并接收 _lctype 大于0的消息呢?
/// <summary> /// 自定义表情消息 /// </summary> [AVIMMessageClassName("MyMessage")] public class MyMessage: AVIMTypedMessage { [AVIMMessageFieldName("_lctype")] public int LCType { get; set; } }
然后在用的时候可以这样设置就可以了:
MyMessage message = new MyMessage() { LCType = 99 };
另外你可以参照我们源代码里面的 AVIMTextMessage 的实现(你没看错,我们的 Unity 聊天是开源的):AVIMTextMessage.cs
那么在使用的时候,相似的消息,不同的 LCType 怎样区分开呢?
例如
{ "_lctype" : 3, "msg" : 控制消息1}
{ "_lctype" : 4, "msg" : 地图消息}
这两种消息怎样区分开呢?
我们尝试了使用不同的 Field,比如
{ "_lctype" : 3, "controlMsg" : 控制消息1}
{ "_lctype" : 4, "mapMsg" : 地图消息}
解析的时候也不能正确解析出消息类型,消息总是解析到最后一个注册的消息类型。
我看了一下源码,是在
public override bool Validate(string msgStr);
这个函数中进行判断的吧。
对,你需要实现这个 validate 就行了。