Quellcode durchsuchen

添加流式消息 fix #140

imndx vor 4 Monaten
Ursprung
Commit
0558958282

+ 4 - 0
imclient/lib/imclient.dart

@@ -39,6 +39,8 @@ import 'message/pclogin_request_message_content.dart';
 import 'message/ptext_message_content.dart';
 import 'message/sound_message_content.dart';
 import 'message/sticker_message_content.dart';
+import 'message/streaming_text_generating_message_content.dart';
+import 'message/streaming_text_generated_message_content.dart';
 import 'message/text_message_content.dart';
 import 'message/typing_message_content.dart';
 import 'message/video_message_content.dart';
@@ -487,6 +489,8 @@ class Imclient {
     registerMessageContent(ptextContentMeta);
     registerMessageContent(soundContentMeta);
     registerMessageContent(stickerContentMeta);
+    registerMessageContent(streamingTextGeneratingContentMeta);
+    registerMessageContent(streamingTextGeneratedContentMeta);
     registerMessageContent(textContentMeta);
     registerMessageContent(typingContentMeta);
     registerMessageContent(videoContentMeta);

+ 4 - 0
imclient/lib/message/message_content.dart

@@ -35,6 +35,10 @@ const int MESSAGE_CONTENT_TYPE_P_TEXT = 9;
 const int MESSAGE_CONTENT_TYPE_CARD = 10;
 //组合消息
 const int MESSAGE_CONTENT_TYPE_COMPOSITE_MESSAGE = 11;
+//流式文本正在生成消息
+const int MESSAGE_CONTENT_TYPE_STREAMING_TEXT_GENERATING = 14;
+//流式文本消息
+const int MESSAGE_CONTENT_TYPE_STREAMING_TEXT_GENERATED = 15;
 
 //撤回消息
 const int MESSAGE_CONTENT_TYPE_RECALL = 80;

+ 62 - 0
imclient/lib/message/streaming_text_generated_message_content.dart

@@ -0,0 +1,62 @@
+import '../model/message_payload.dart';
+import 'message.dart';
+import 'message_content.dart';
+
+// ignore: non_constant_identifier_names
+MessageContent StreamingTextGeneratedMessageContentCreator() {
+  return StreamingTextGeneratedMessageContent();
+}
+
+const streamingTextGeneratedContentMeta = MessageContentMeta(
+    MESSAGE_CONTENT_TYPE_STREAMING_TEXT_GENERATED,
+    MessageFlag.PERSIST_AND_COUNT,
+    StreamingTextGeneratedMessageContentCreator);
+
+class StreamingTextGeneratedMessageContent extends MessageContent {
+  StreamingTextGeneratedMessageContent({this.text = "", this.streamId = ""});
+
+  String text;
+  String streamId;
+
+  @override
+  void decode(MessagePayload payload) {
+    super.decode(payload);
+    if (payload.searchableContent != null) {
+      text = payload.searchableContent!;
+    } else {
+      text = "";
+    }
+    if (payload.content != null) {
+      streamId = payload.content!;
+    } else {
+      streamId = "";
+    }
+  }
+
+  @override
+  MessagePayload encode() {
+    MessagePayload payload = super.encode();
+    payload.searchableContent = text;
+    payload.content = streamId;
+    return payload;
+  }
+
+  @override
+  Future<String> digest(Message message) async {
+    return text;
+  }
+
+  @override
+  MessageContentMeta get meta => streamingTextGeneratedContentMeta;
+
+  @override
+  bool operator ==(Object other) =>
+      identical(this, other) ||
+      other is StreamingTextGeneratedMessageContent &&
+          runtimeType == other.runtimeType &&
+          text == other.text &&
+          streamId == other.streamId;
+
+  @override
+  int get hashCode => text.hashCode ^ streamId.hashCode;
+}

+ 62 - 0
imclient/lib/message/streaming_text_generating_message_content.dart

@@ -0,0 +1,62 @@
+import '../model/message_payload.dart';
+import 'message.dart';
+import 'message_content.dart';
+
+// ignore: non_constant_identifier_names
+MessageContent StreamingTextGeneratingMessageContentCreator() {
+  return StreamingTextGeneratingMessageContent();
+}
+
+const streamingTextGeneratingContentMeta = MessageContentMeta(
+    MESSAGE_CONTENT_TYPE_STREAMING_TEXT_GENERATING,
+    MessageFlag.TRANSPARENT,
+    StreamingTextGeneratingMessageContentCreator);
+
+class StreamingTextGeneratingMessageContent extends MessageContent {
+  StreamingTextGeneratingMessageContent({this.text = "", this.streamId = ""});
+  
+  String text;
+  String streamId;
+
+  @override
+  void decode(MessagePayload payload) {
+    super.decode(payload);
+    if (payload.searchableContent != null) {
+      text = payload.searchableContent!;
+    } else {
+      text = "";
+    }
+    if (payload.content != null) {
+      streamId = payload.content!;
+    } else {
+      streamId = "";
+    }
+  }
+
+  @override
+  MessagePayload encode() {
+    MessagePayload payload = super.encode();
+    payload.searchableContent = text;
+    payload.content = streamId;
+    return payload;
+  }
+
+  @override
+  Future<String> digest(Message message) async {
+    return text;
+  }
+
+  @override
+  MessageContentMeta get meta => streamingTextGeneratingContentMeta;
+
+  @override
+  bool operator ==(Object other) =>
+      identical(this, other) ||
+      other is StreamingTextGeneratingMessageContent &&
+          runtimeType == other.runtimeType &&
+          text == other.text &&
+          streamId == other.streamId;
+
+  @override
+  int get hashCode => text.hashCode ^ streamId.hashCode;
+}