2023-10-05 16:57:51 +08:00

131 lines
4.8 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'dart:convert';
import 'dart:io';
import 'package:dio/dio.dart';
import 'package:example/const.dart';
import 'package:wukongimfluttersdk/entity/conversation.dart';
import 'package:wukongimfluttersdk/entity/msg.dart';
class HttpUtils {
static String apiURL = "https://api.githubim.com";
static Future<int> login(String uid, String token) async {
final dio = Dio();
final response = await dio.post("$apiURL/user/token", data: {
'uid': uid,
'token': token,
'device_flag': 0,
'device_level': 1
});
return response.statusCode!;
}
static Future<String> getIP() async {
final dio = Dio();
String ip = '';
final response = await dio.get('$apiURL/route');
if (response.statusCode == HttpStatus.ok) {
ip = response.data['tcp_addr'];
}
return ip;
}
static syncConversation(String lastSsgSeqs, int msgCount, int version,
Function(WKSyncConversation) back) async {
final dio = Dio();
final response = await dio.post('$apiURL/conversation/sync', data: {
"uid": UserInfo.uid, // 当前登录用户uid
"version": version, // 当前客户端的会话最大版本号(从保存的结果里取最大的version如果本地没有数据则传0)
"last_msg_seqs":
lastSsgSeqs, // 客户端所有频道会话的最后一条消息序列号拼接出来的同步串 格式: channelID:channelType:last_msg_seq|channelID:channelType:last_msg_seq (此字段非必填,如果不填就获取全量数据,填写了获取增量数据,看你自己的需求。)
"msg_count": 10 // 每个会话获取最大的消息数量一般为app点进去第一屏的数据
});
print(response.data);
WKSyncConversation conversation = WKSyncConversation();
conversation.conversations = [];
if (response.statusCode == HttpStatus.ok) {
var list = response.data as List<dynamic>;
for (int i = 0; i < list.length; i++) {
var json = list[i];
WKSyncConvMsg convMsg = WKSyncConvMsg();
convMsg.channelID = json['channel_id'];
convMsg.channelType = json['channel_type'];
convMsg.unread = json['unread'];
convMsg.timestamp = json['timestamp'];
convMsg.lastMsgSeq = json['last_msg_seq'];
convMsg.lastClientMsgNO = json['last_client_msg_no'];
convMsg.version = json['version'];
var msgListJson = json['recents'] as List<dynamic>;
List<WKSyncMsg> msgList = [];
if (msgListJson.isNotEmpty) {
for (int j = 0; j < msgListJson.length; j++) {
var msgJson = msgListJson[j];
msgList.add(getWKSyncMsg(msgJson));
}
}
convMsg.recents = msgList;
conversation.conversations!.add(convMsg);
}
}
back(conversation);
}
static syncChannelMsg(
String channelID,
int channelType,
int startMsgSeq,
int endMsgSeq,
int limit,
int pullMode,
Function(WKSyncChannelMsg) back) async {
final dio = Dio();
print('请求参数${startMsgSeq},$endMsgSeq');
final response = await dio.post('$apiURL/channel/messagesync', data: {
"login_uid": UserInfo.uid, // 当前登录用户uid
"channel_id": channelID, // 频道ID
"channel_type": channelType, // 频道类型
"start_message_seq": startMsgSeq, // 开始消息列号结果包含start_message_seq的消息
"end_message_seq": endMsgSeq, // 结束消息列号结果不包含end_message_seq的消息
"limit": limit, // 消息数量限制
"pull_mode": pullMode // 拉取模式 0:向下拉取 1:向上拉取
});
if (response.statusCode == HttpStatus.ok) {
var data = response.data;
WKSyncChannelMsg msg = WKSyncChannelMsg();
msg.startMessageSeq = data['start_message_seq'];
msg.endMessageSeq = data['end_message_seq'];
msg.more = data['more'];
var messages = data['messages'] as List<dynamic>;
List<WKSyncMsg> msgList = [];
for (int i = 0; i < messages.length; i++) {
dynamic json = messages[i];
msgList.add(getWKSyncMsg(json));
}
msg.messages = msgList;
back(msg);
}
}
static WKSyncMsg getWKSyncMsg(dynamic json) {
WKSyncMsg msg = WKSyncMsg();
msg.channelID = json['channel_id'];
msg.messageID = json['message_id'].toString();
msg.channelType = json['channel_type'];
msg.clientMsgNO = json['client_msg_no'];
msg.messageSeq = json['message_seq'];
msg.fromUID = json['from_uid'];
msg.timestamp = json['timestamp'];
msg.channelID = json['channel_id'];
// msg.payload = json['payload'];
String payload = json['payload'];
try {
msg.payload = jsonDecode(utf8.decode(base64Decode(payload)));
// print('查询的消息${msg.payload}');
} catch (e) {
// print('异常了');
}
return msg;
}
}