服务端如何监听接收到客户端自定义的消息

HarrySun 1月前 256

服务端如何监听接收到客户端自定义的消息

例如 WFCCStickerMessageContent,服务端如何在接收到此类消息时解析并使用该消息中的字段(例如 x 和 y)



- (WFCCMessagePayload *)encode {
    WFCCMediaMessagePayload *payload = (WFCCMediaMessagePayload *)[super encode];
    payload.searchableContent = @"[动态表情]";
    payload.mediaType = Media_Type_STICKER;
    payload.remoteMediaUrl = self.remoteUrl;
    payload.localMediaPath = self.localPath;

    NSMutableDictionary *dataDict = [NSMutableDictionary dictionary];
    [dataDict setObject:@(self.size.width) forKey:@"x"];
    [dataDict setObject:@(self.size.height) forKey:@"y"];

    payload.binaryContent = [NSJSONSerialization dataWithJSONObject:dataDict
                                                            options:kNilOptions
                                                              error:nil];

    return payload;
}

``
最新回复 (11)
  • x86 1月前
    引用 2
    请看这儿:https://bbs.wildfirechat.cn/thread-2421.htm
  • HarrySun 1月前
    引用 3
    如何在接收消息的回调中处理,这个是从数据库中拿消息
  • HeavyRain 1月前
    引用 4
    从回调中收到的消息是统一的MessagePayload,需要再转换为对应的消息,可以跟你们客户端统一一下,看一下消息的转换方法(客户端的decode方法)
  • HarrySun 1月前
    引用 5
    我们目前遇到的问题是,客户端正常自定义消息,客户端之间正常,但是服务端收到对应类型的消息没有解析出消息的 payload.binaryContent 中自定义的值
  • x86 1月前
    引用 6
    1. im-server 配置消息转发,将消息转发到具体的业务服务
      ##消息转发地址
      ##注意回调是单线程回调,接收服务必须在同一内网,且异步处理快速返回,否则会有延迟问题!!
      #message.forward.url http://localhost:8888/im_event/message
    2. 业务服务会收到消息转发请求,请求 body 为OutputMessageData,具体请参考:app-server:/im_event/message
    3. OutputMessageData里面有个payload字段,其类型是MessagePayload,里面有个base64edData字段。这个base64edData对应的就是客户端MessagePayload里面的binaryContent的 base64 格式的数据
    4. 参考客户端消息encode时,生成binaryContent的逻辑,将base64edDatadecode 之后,进行解析。

    补充一下: 客户端消息的binaryContent对应 IM-Server 里面的(WFCMessage.MessageContentdata字段

  • mazhj 1月前
    引用 7
    【客户端消息的binaryContent对应 IM-Server 里面的(WFCMessage.MessageContent的 data字段】 现在问题,在IM-server中如何解析data属性 类型是com.google.protobuf.ByteString?
  • x86 1月前
    引用 8
    mazhj 【客户端消息的binaryContent对应 IM-Server 里面的(WFCMessage.MessageContent的 data字段】 现在问题,在IM-server中如何解析data属性 类 ...
    是的
  • mazhj 1月前
    引用 9
    【客户端消息的binaryContent对应 IM-Server 里面的(WFCMessage.MessageContent的 data字段】 现在问题,在IM-server中如何把com.google.protobuf.ByteString data属性 解析成对象?
  • x86 1月前
    引用 10

    这个无法明确回答你

    WFCMessage.MessageContent#data其实就是些字节,具体是什么意义,需要根据当前这个消息是什么,以及客户端的这个消息的encode方法是如何生成binaryContent的才能知道,并且解析的时候,要和客户端的这个消息的decode方法对应。

    比如Android 端文本消息,encode方法中binaryContent是如下逻辑:

     JSONObject object = new JSONObject();
    // ...
    payload.binaryContent = object.toString().getBytes();
    

    文本消息的decode方法,对binaryContent的处理如下:

    JSONObject object = new JSONObject(new String(payload.binaryContent));
    //....

    那服务端就可以这样解析

    JSONObject object = new JSONObject(new String(wfcMessageContet.getData().toByteArray()));
  • mazhj 1月前
    引用 11
    终极方案,测试有效,不容反驳
                    OutputMessageData outputMessageData = OutputMessageData.fromProtoMessage(message, null);
                    byte[] base64 = Base64Utils.decodeFromString(outputMessageData.getPayload().getBase64edData());
                    System.err.println("parse base64 ==> "+ new String(base64));

  • mazhj 1月前
    引用 12
    终极方案,测试有效,不容反驳
     OutputMessageData outputMessageData = OutputMessageData.fromProtoMessage(message, null);
     byte[] base64 = Base64Utils.decodeFromString(outputMessageData.getPayload().getBase64edData());
     System.err.println("parse base64 ==> "+ new String(base64));
返回