Hibok
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.
 
 
 
 
 
 

1577 lines
52 KiB

  1. import 'dart:async';
  2. import 'dart:convert';
  3. import 'dart:typed_data';
  4. import 'package:chat/chat/group_chat_view.dart';
  5. import 'package:chat/data/UserData.dart';
  6. import 'package:chat/data/chat_data_mgr.dart';
  7. import 'package:chat/data/constants.dart';
  8. import 'package:chat/data/group_data_mgr.dart';
  9. import 'package:chat/data/translate_hk_data_mgr.dart';
  10. import 'package:chat/generated/i18n.dart';
  11. import 'package:chat/home/IndexPage.dart';
  12. import 'package:chat/models/ChatMsg.dart';
  13. import 'package:chat/models/group_info_model.dart';
  14. import 'package:chat/proto/all.pbserver.dart';
  15. import 'package:chat/proto/transhousekeeper.pb.dart';
  16. import 'package:chat/utils/NetUtil.dart';
  17. import 'package:chat/utils/blacklist_mgr.dart';
  18. import 'package:chat/utils/friend_list_mgr.dart';
  19. import 'package:chat/utils/group_member_model.dart';
  20. import 'package:chat/utils/local_notification_util.dart';
  21. import 'package:chat/utils/sound_util.dart';
  22. import 'package:chat/utils/sql_util.dart';
  23. import 'package:chat/utils/upload_util.dart';
  24. import 'package:flutter/material.dart';
  25. import 'package:oktoast/oktoast.dart';
  26. import 'package:fixnum/fixnum.dart';
  27. import 'MessageMgr.dart';
  28. const MaxMsgContentSize = 1024 * 1024 * 3;
  29. class MsgHandler {
  30. //当前会话ID
  31. static int curActiveSession;
  32. static bool isTranslate = false;
  33. static bool isAudioConnect = false;
  34. static BuildContext context = Constants.getCurrentContext();
  35. static List<MsgModel> sendCache = [];
  36. static Timer ringTimer;
  37. static int audioChatRequestFriendId = 0;
  38. static Function createGroupComplete;
  39. static updateActiveSesstion(int session, {bool isGroup = false}) {
  40. curActiveSession = session;
  41. getUnreadMsgDetail(isGroup);
  42. ChatDataMgr().signRead(curActiveSession, isGroup: isGroup);
  43. }
  44. static getActiveSesstion(List<int> memberList) {
  45. var seq = CreateSessionReq();
  46. var member = seq.memberIds;
  47. member.addAll(memberList);
  48. NetWork().sendMsg(ComId.Chat, 101, seq);
  49. }
  50. //根据会话获取会话成员信息
  51. static getSessionInfo(int sessionId) {
  52. var seq = QuerySessionReq();
  53. seq.sessionId = sessionId;
  54. NetWork().sendMsg(ComId.Chat, 102, seq);
  55. }
  56. //创建群
  57. static createGroup(List<int> members, Function complete) {
  58. var seq = CreateChatGroupReq.create();
  59. seq.members.addAll(members);
  60. createGroupComplete = complete;
  61. var curTime = DateTime.now();
  62. print('发送建群消息 $curTime');
  63. NetWork().sendMsg(ComId.Chat, 201, seq);
  64. }
  65. //创建群结果
  66. static handleCreateGroup(List<int> content) async {
  67. var res = CreateChatGroupRes.fromBuffer(content);
  68. if (res.errorCode == 0) {
  69. var curTime = DateTime.now();
  70. print('建群成功 $curTime');
  71. GroupInfoModel infoModel = GroupInfoModel.fromInfo(res.group);
  72. GroupInfoMgr().addGroup(infoModel);
  73. if (createGroupComplete != null) {
  74. createGroupComplete(infoModel);
  75. createGroupComplete = null;
  76. }
  77. MessageMgr().emit('Update Group List');
  78. } else {
  79. print('建群失败');
  80. }
  81. }
  82. static createCoinBagMsg(Map args) {
  83. MsgModel msg;
  84. Int64 time = Int64((DateTime.now()).millisecondsSinceEpoch);
  85. var friendId = args['friendId'];
  86. RedWallet wallet = RedWallet.create();
  87. wallet.amount = args['amount'];
  88. wallet.title = args['title'];
  89. wallet.orderId = args['redNo'];
  90. wallet.tuId = friendId;
  91. wallet.suId = UserData().basicInfo.userId;
  92. wallet.state = RedWalletState.Uncollected;
  93. var myId = UserData().basicInfo.userId;
  94. msg = MsgModel(myId, friendId, ChatType.RedWalletChatType.value,
  95. wallet.writeToBuffer(), time.toInt(), curActiveSession);
  96. return msg;
  97. }
  98. static createSendMsg(ChatType chatType, content,
  99. {int extra,
  100. int friendId,
  101. String localFile,
  102. MsgModel refMsg,
  103. String refShortTxt,
  104. List<int> altUsers,
  105. ChatChannelType channelType = ChatChannelType.Session}) {
  106. MsgModel msg;
  107. if (content is String) {
  108. content = utf8.encode(content);
  109. }
  110. Int64 time = Int64((DateTime.now()).millisecondsSinceEpoch);
  111. var myId = UserData().basicInfo.userId;
  112. if (channelType == ChatChannelType.Group) {
  113. msg = MsgModel(
  114. myId, 0, chatType.value, content, time.toInt(), curActiveSession,
  115. channelType: channelType.value);
  116. } else {
  117. msg = MsgModel(myId, friendId, chatType.value, content, time.toInt(),
  118. curActiveSession,
  119. channelType: channelType.value);
  120. }
  121. if (localFile != null) {
  122. var fileId = curActiveSession.toString() + time.toString();
  123. msg.localFile = localFile;
  124. msg.extraFile = fileId;
  125. }
  126. if (extra != null) {
  127. msg.extraInfo = extra;
  128. }
  129. if (refMsg != null) {
  130. QuoteMsg quoteMsg = QuoteMsg.create();
  131. quoteMsg.sendUserId = refMsg.from;
  132. quoteMsg.sendTime = Int64(refMsg.time);
  133. quoteMsg.targetId = refMsg.sessionId;
  134. quoteMsg.content = refShortTxt;
  135. quoteMsg.channelType = ChatChannelType.valueOf(refMsg.channelType);
  136. msg.refMsgContent = quoteMsg.writeToBuffer();
  137. }
  138. if (altUsers != null && altUsers.length > 0) {
  139. msg.altUsers = altUsers;
  140. }
  141. return msg;
  142. }
  143. static insertMsgToDB(MsgModel msg) {
  144. //缓存消息,发送成功之后清理
  145. if (!sendCache.contains(msg)) {
  146. sendCache.add(msg);
  147. ChatDataMgr().saveMsg(msg);
  148. }
  149. }
  150. //登录成功之后重新发送缓存的消息
  151. static flushCacheMsg() {
  152. for (var i = 0; i < sendCache.length; i++) {
  153. sendChatMsg(sendCache[i]);
  154. }
  155. }
  156. static sendChatMsg(MsgModel msg) {
  157. var seq = ChatSendReq.create();
  158. seq.targetId = msg.sessionId;
  159. seq.sendTime = Int64(msg.time);
  160. seq.cType = ChatType.valueOf(msg.msgType);
  161. seq.channelType = ChatChannelType.valueOf(msg.channelType);
  162. if (msg.extraFile != null) {
  163. seq.enclosureUrl = msg.extraFile;
  164. }
  165. if (msg.extraInfo != null) {
  166. seq.contentSzie = msg.extraInfo;
  167. }
  168. if (msg.refMsgContent != null && msg.refMsgContent.length > 0) {
  169. seq.quoteMsg = msg.refMsgContent;
  170. }
  171. if (msg.altUsers != null && msg.altUsers.length > 0) {
  172. print('设置@信息 ${msg.altUsers.toString()}');
  173. seq.altUserIds.addAll(msg.altUsers);
  174. }
  175. seq.contentBuff = msg.msgContent;
  176. if (msg.msgContent.length > MaxMsgContentSize) {
  177. showToast(I18n.of(context).server_error_tips);
  178. print('消息包大小超过3M');
  179. }
  180. //本地文件为空或者等发送成功之后才可以发送
  181. if (msg.localFile == null || msg.state >= MsgState.Uploaded) {
  182. Future.delayed(Duration(seconds: 60), () {
  183. if (msg.state != MsgState.SendingSuccess) {
  184. msg.state = MsgState.SendingFailed;
  185. ChatDataMgr().updateMsgState(
  186. msg.sessionId, msg.time, msg.channelType, msg.state);
  187. }
  188. });
  189. NetWork().sendMsg(ComId.Chat, 1, seq);
  190. msg.state = MsgState.Sending;
  191. }
  192. }
  193. //获取会话未读消息
  194. static getUnreadMsgDetail(bool isGroup) {
  195. print('获取未读消息 群$isGroup');
  196. // showToast('获取未读消息 群$isGroup');
  197. var seq = RequestTargetUnreadReq.create();
  198. seq.targetId = curActiveSession;
  199. if (curActiveSession == 10000) {
  200. seq.channelType = ChatChannelType.CSD;
  201. } else {
  202. seq.channelType =
  203. isGroup ? ChatChannelType.Group : ChatChannelType.Session;
  204. }
  205. NetWork().sendMsg(ComId.Chat, 5, seq);
  206. }
  207. static int tempGroupId = 0;
  208. static int mLastClickTime = 0;
  209. static int timeInterval = 2500;
  210. // static int receivedCount=0;
  211. static handlerReceiveMsg(PushChat chat) async {
  212. bool isGroup = false;
  213. bool isTranslateHK = false;
  214. if (chat.channelType == ChatChannelType.Group) {
  215. print('群聊消息');
  216. isGroup = true;
  217. } else if (chat.channelType == ChatChannelType.TransHK) {
  218. print('聊天管家消息');
  219. isTranslateHK = true;
  220. }
  221. MsgModel msgModel;
  222. if (chat.sendUserId == 1) {
  223. //更新消息
  224. print('服务器更新消息');
  225. MsgModel findMsg;
  226. var msgList;
  227. if (isGroup) {
  228. msgList = ChatDataMgr().getGroupRecord();
  229. } else {
  230. msgList = ChatDataMgr().getRecord();
  231. }
  232. for (var i = 0; i < msgList.length; i++) {
  233. var msg = msgList[i];
  234. if (msg.time == chat.sendTime.toInt()) {
  235. findMsg = msg;
  236. }
  237. }
  238. //更新翻译
  239. if (findMsg != null) {
  240. findMsg.transTag = chat.translateState;
  241. if (chat.translateState == 4) {
  242. print('人工翻译结果更新${chat.targetId},${chat.translateState}');
  243. findMsg.translateContent = chat.humanTranslate;
  244. findMsg.enTranslateContent = chat.googleTranslate ?? Uint8List(0);
  245. ChatDataMgr().updateLastMsgWithTranslateMsg(chat);
  246. SqlUtil().updateUserTranslateContent(chat.targetId,
  247. chat.sendTime.toInt(), chat.humanTranslate, chat.translateState);
  248. } else if (chat.translateState == 3 || chat.translateState == 2) {
  249. print('机器翻译结果更新');
  250. ChatDataMgr().updateLastMsgWithTranslateMsg(chat);
  251. findMsg.translateContent = chat.tencentTranslate;
  252. findMsg.enTranslateContent = chat.googleTranslate;
  253. SqlUtil().updateMachineTranslateContent(
  254. chat.targetId,
  255. chat.sendTime.toInt(),
  256. chat.tencentTranslate,
  257. chat.googleTranslate,
  258. chat.translateState);
  259. }
  260. MessageMgr().emit('Update Translate Message', findMsg);
  261. }
  262. } else {
  263. if (chat.sendUserId == 0) {
  264. print('服务器通知消息 ${chat.sendTime.toInt()} 是否是翻译管家 $isTranslateHK');
  265. if (isGroup) {
  266. if (chat.cType == ChatType.GroupChatNoticeType) {
  267. //检查是否存在群信息
  268. var info = await GroupInfoMgr().getGroupInfo(chat.targetId);
  269. if (info == null) {
  270. print('群不存在');
  271. return;
  272. }
  273. var myId = UserData().basicInfo.userId;
  274. var notice = GroupChatNotice.fromBuffer(chat.contentBuff);
  275. print('群改变消息 changeType ${notice.changeType.toString()}');
  276. bool isShow = true;
  277. switch (notice.changeType) {
  278. case GroupChangeType.AddMember:
  279. GroupInfoMgr().addMembers(chat.targetId, notice.operateduId);
  280. break;
  281. case GroupChangeType.RemoveMember:
  282. var isMeIn = isContainMe(notice.operateduId);
  283. if (!isMeIn) {
  284. //别人,这个自己有群信息
  285. GroupInfoMgr()
  286. .removeMembers(chat.targetId, notice.operateduId);
  287. } else {
  288. //自己
  289. GroupInfoMgr().removeSelf(chat.targetId);
  290. print('已被移出该群,不能发消息了');
  291. }
  292. break;
  293. case GroupChangeType.GroupNameChange:
  294. print('更改群名 ${notice.changeStr}');
  295. GroupInfoMgr().updateGroupName(chat.targetId, notice.changeStr);
  296. break;
  297. case GroupChangeType.GroupNoticeChange:
  298. print('更改群公告 ${notice.changeStr}');
  299. GroupInfoMgr()
  300. .updateGroupDescription(chat.targetId, notice.changeStr);
  301. break;
  302. case GroupChangeType.GroupMemberAliasChange:
  303. isShow = false;
  304. print('修改别名 ${notice.operatuId.id} ${notice.changeStr}');
  305. GroupInfoMgr().updateMemberRefName(
  306. chat.targetId, notice.operatuId.id, notice.changeStr);
  307. //该消息不用显示和保存
  308. break;
  309. case GroupChangeType.MasterTrans:
  310. print(
  311. '转让群主 转让人${notice.operatuId.id},被转让人${notice.operateduId[0].id}');
  312. GroupInfoMgr().updateGroupMaster(chat.targetId,
  313. notice.operatuId.id, notice.operateduId[0].id);
  314. break;
  315. case GroupChangeType.QRCodeAddMemberNotice:
  316. if (notice.operatuId.id != myId) {
  317. //别人在此处理,自己走回应消息
  318. GroupInfoMgr().addMembers(chat.targetId, [notice.operatuId]);
  319. } else {}
  320. break;
  321. case GroupChangeType.GroupIsOpenMemberCheckChange:
  322. print('群主开启了群验证: ${notice.changeBool}');
  323. GroupInfoMgr()
  324. .updateAskSwitch(chat.targetId, notice.changeBool);
  325. break;
  326. case GroupChangeType.GroupMemberCheckAddMemberNotice:
  327. print('群主确认进群: ${notice.operateduId.length}');
  328. GroupInfoMgr().addMembers(chat.targetId, notice.operateduId);
  329. break;
  330. case GroupChangeType.GroupMemberLeave:
  331. print('有人离开群: ${notice.operatuId}');
  332. isShow = false;
  333. GroupInfoMgr().removeMembers(chat.targetId, [notice.operatuId]);
  334. break;
  335. default:
  336. }
  337. //不需要展示给用户看
  338. if (!isShow) {
  339. print('该消息不用展示');
  340. return;
  341. }
  342. msgModel = MsgModel(0, chat.sendUserId, chat.cType.value,
  343. chat.contentBuff, chat.sendTime.toInt(), chat.targetId,
  344. channelType: ChatChannelType.Group.value);
  345. }
  346. } else if (isTranslateHK) {
  347. var myId = UserData().basicInfo.userId;
  348. print('chat.contentBuff:${chat.contentBuff.length}');
  349. TransHKChatNotice notice = TransHKChatNotice.fromBuffer(chat.contentBuff);
  350. BaseUserInfo friendId ;
  351. print('chat.contentBuff AAAA');
  352. TranslateHKMgr().isUser = myId== notice.employer.id; ///判断自己是翻译官还是用户
  353. print('chat.contentBuff BBBB');
  354. if(myId== notice.employer.id){
  355. friendId =notice.inter;
  356. }else{
  357. friendId = notice.employer;
  358. }
  359. print('friend id: ${friendId.id} ');
  360. int sessionId = chat.targetId;
  361. if (chat.cType == ChatType.GroupChatNoticeType) {
  362. msgModel = MsgModel(0, friendId.id, chat.cType.value,
  363. chat.contentBuff, chat.sendTime.toInt(), sessionId,
  364. channelType: ChatChannelType.Session.value);
  365. }
  366. ///接到开始翻译管家消息-打开翻译管家聊天页面
  367. if(notice.noticeType==TransHKChatNoticeType.StartChat){
  368. Future.delayed(Duration(seconds: 1),(){
  369. TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_EMPTY;
  370. MessageMgr().emit(MessageMgr.TRANSLATE_HK_REFRESH_ORDER );
  371. curActiveSession = sessionId;
  372. print('curActiveSession:$curActiveSession');
  373. MessageMgr().emit(MessageMgr.TRANSLATE_HK_START_CHAT, friendId.id);
  374. });
  375. }else if(notice.noticeType==TransHKChatNoticeType.EndChat){
  376. print('chat.contentBuff cccc');
  377. MessageMgr().emit(MessageMgr.TRANSLATE_HK_END_CHAT, friendId.id);
  378. }
  379. } else {
  380. //私聊通知消息
  381. if (chat.cType == ChatType.RedWalletChatType) {
  382. //系统红包通知消息
  383. RedWallet wallet = RedWallet.fromBuffer(chat.contentBuff);
  384. var myId = UserData().basicInfo.userId;
  385. var friendId;
  386. if (myId == wallet.suId) {
  387. friendId = wallet.tuId;
  388. } else {
  389. friendId = wallet.suId;
  390. }
  391. int sessionId = chat.targetId;
  392. msgModel = MsgModel(0, friendId, chat.cType.value, chat.contentBuff,
  393. chat.sendTime.toInt(), sessionId,
  394. channelType: ChatChannelType.Session.value);
  395. //更新红包信息
  396. ChatDataMgr()
  397. .updateRedWalletMsg(sessionId, wallet.orderId, wallet.state);
  398. } else {
  399. print('未知私聊通知消息');
  400. }
  401. }
  402. } else {
  403. //聊天消息
  404. int sessionId = chat.targetId;
  405. print('sessionId $sessionId');
  406. if (isGroup) {
  407. GroupInfoMgr()
  408. .getGroupInfo(sessionId)
  409. .then((GroupInfoModel groupInfo) {
  410. bool showGroup = false;
  411. if (groupInfo != null) {
  412. showGroup = groupInfo.messageFree == 0;
  413. }
  414. if (showGroup) {
  415. int nowTime = DateTime.now().millisecondsSinceEpoch;
  416. if (nowTime - mLastClickTime < timeInterval &&
  417. tempGroupId == sessionId) {
  418. //2秒内同一群不重复弹出
  419. return;
  420. }
  421. tempGroupId = sessionId;
  422. LocalNotificationUtil.instance.show(
  423. I18n.of(context).notice, I18n.of(context).new_chat_msg,
  424. id: sessionId > 1000
  425. ? int.parse(sessionId.toString().substring(0, 3))
  426. : sessionId);
  427. mLastClickTime = nowTime;
  428. }
  429. });
  430. } else {
  431. LocalNotificationUtil.instance
  432. .show(I18n.of(context).notice, I18n.of(context).new_chat_msg);
  433. }
  434. msgModel = MsgModel(chat.sendUserId, chat.sendUserId, chat.cType.value,
  435. chat.contentBuff, chat.sendTime.toInt(), chat.targetId,
  436. channelType: chat.channelType.value);
  437. // if (chat.cType == ChatType.TextChatType){
  438. // String content =utf8.decode(msgModel.msgContent);
  439. // print('当前收到消息条数$receivedCount $content');
  440. // }
  441. if (chat.hasTencentTranslate()) {
  442. msgModel.translateContent = chat.tencentTranslate;
  443. }
  444. if (chat.hasGoogleTranslate()) {
  445. msgModel.enTranslateContent = chat.googleTranslate;
  446. }
  447. if (chat.hasContentSzie()) {
  448. msgModel.extraInfo = chat.contentSzie;
  449. }
  450. if (chat.targetId != curActiveSession) {
  451. msgModel.readState = 1; //未读标记
  452. }
  453. //视频附件
  454. if (chat.hasEnclosureUrl()) {
  455. msgModel.extraFile = chat.enclosureUrl;
  456. }
  457. if (chat.hasQuoteMsg()) {
  458. print('存在引用消息');
  459. msgModel.refMsgContent = chat.quoteMsg;
  460. }
  461. if (chat.altUserIds.length > 0) {
  462. print('存在@消息');
  463. msgModel.altUsers = chat.altUserIds;
  464. var myId = UserData().basicInfo.userId;
  465. for (var i = 0; i < msgModel.altUsers.length; i++) {
  466. if (msgModel.altUsers[i] == myId && curActiveSession != sessionId) {
  467. print('有人@了你');
  468. ChatDataMgr()
  469. .groupUnreadProvider
  470. .setAlterMe(sessionId, msgModel.time);
  471. //to do
  472. }
  473. }
  474. print(chat.altUserIds.toString());
  475. }
  476. if (chat.cType == ChatType.TextChatType ||
  477. chat.cType == ChatType.ShortVoiceChatType ||
  478. chat.cType == ChatType.RedWalletChatType) {
  479. if (chat.hasTranslateState()) {
  480. //是否有人工翻译
  481. msgModel.transTag = chat.translateState;
  482. print('翻译标记:${chat.translateState}');
  483. }
  484. } else {
  485. msgModel.transTag = 0;
  486. }
  487. }
  488. if (msgModel == null) {
  489. print('消息为空,无法保存');
  490. return;
  491. }
  492. print(
  493. '收到消息,准备保存 会话Id:${msgModel.sessionId} friendId: ${msgModel.friendId} ChatType: ${msgModel.channelType}');
  494. ChatDataMgr().saveMsg(msgModel);
  495. if (msgModel.msgType == ChatType.ShortVoiceChatType.value) {
  496. //如果是语音消息,自动下载
  497. msgModel.state = MsgState.Downloading;
  498. var filePath = await UploadUtil().downloadFile(msgModel);
  499. if (filePath != null) {
  500. msgModel.localFile = filePath;
  501. SqlUtil().updateLocalFile(msgModel.extraFile, filePath,
  502. isGroup: msgModel.channelType == ChatChannelType.Group.value);
  503. msgModel.state = MsgState.DownloadSuccess;
  504. } else {
  505. print('下载文件失败');
  506. msgModel.state = MsgState.DownloadFailed;
  507. }
  508. }
  509. if (msgModel.sessionId == 10000) {
  510. print('收到反馈小助手消息');
  511. }
  512. if (msgModel.sessionId == curActiveSession) {
  513. MessageMgr().emit('New Chat Message', msgModel.sessionId);
  514. }
  515. }
  516. }
  517. static isContainMe(List<BaseUserInfo> members) {
  518. var myId = UserData().basicInfo.userId;
  519. for (var i = 0; i < members.length; i++) {
  520. if (myId == members[i].id) {
  521. print('我在其中');
  522. return true;
  523. }
  524. }
  525. return false;
  526. }
  527. static getGroupNoticeMsg(
  528. GroupChatNotice notice, GroupInfoModel groupInfoModel) {
  529. var showStr = '';
  530. if (groupInfoModel == null) {
  531. print('群不存在');
  532. return '';
  533. }
  534. var myId = UserData().basicInfo.userId;
  535. var optId = notice.operatuId;
  536. List<BaseUserInfo> optedIds = notice.operateduId;
  537. switch (notice.changeType) {
  538. case GroupChangeType.AddMember:
  539. if (optId.id == myId) {
  540. var otherNames = '';
  541. for (var i = 0; i < optedIds.length; i++) {
  542. //获取用户名
  543. var nickName = _getUserName(optedIds[i].id, groupInfoModel.members);
  544. if (otherNames.length == 0) {
  545. otherNames = nickName;
  546. } else {
  547. otherNames = '$otherNames、$nickName';
  548. }
  549. }
  550. showStr = I18n.of(context).you_invite.replaceFirst('/s1', otherNames);
  551. } else {
  552. bool isMySelf = false;
  553. var otherNames = '';
  554. for (var i = 0; i < optedIds.length; i++) {
  555. //获取用户名
  556. isMySelf = myId == optedIds[i].id;
  557. var nickName = _getUserName(optedIds[i].id, groupInfoModel.members);
  558. if (otherNames.length == 0) {
  559. otherNames = nickName;
  560. } else {
  561. otherNames = '$otherNames、$nickName';
  562. }
  563. }
  564. var optName = _getUserName(optId.id, groupInfoModel.members);
  565. if (isMySelf) {
  566. showStr = I18n.of(context).invite_you.replaceFirst('/s1', optName);
  567. } else {
  568. showStr = I18n.of(context)
  569. .invite_someone
  570. .replaceFirst('/s1', optName)
  571. .replaceFirst('/s2', otherNames);
  572. }
  573. }
  574. break;
  575. case GroupChangeType.RemoveMember:
  576. var optName = _getUserName(optId.id, groupInfoModel.members);
  577. if (optId.id == myId) {
  578. optName = I18n.of(context).you;
  579. }
  580. var otherNames = '';
  581. for (var i = 0; i < optedIds.length; i++) {
  582. if (optedIds[i].id == myId) {
  583. otherNames = I18n.of(context).you;
  584. } else {
  585. //获取用户名
  586. var nickName = _getUserName(optedIds[i].id, groupInfoModel.members);
  587. if (otherNames.length == 0) {
  588. otherNames = nickName;
  589. } else {
  590. otherNames = '$otherNames,$nickName';
  591. }
  592. }
  593. }
  594. showStr = I18n.of(context)
  595. .delete_group
  596. .replaceFirst('/s1', optName)
  597. .replaceFirst('/s2', otherNames);
  598. break;
  599. case GroupChangeType.MasterTrans:
  600. var optedName = _getUserName(optedIds.first.id, groupInfoModel.members);
  601. if (optedIds.first.id == myId) {
  602. showStr = I18n.of(context).you_group_owner;
  603. } else {
  604. showStr = I18n.of(context)
  605. .someone_group_owner
  606. .replaceFirst('/s1', optedName);
  607. }
  608. break;
  609. case GroupChangeType.GroupNameChange:
  610. var groupName = notice.changeStr;
  611. var optName = _getUserName(notice.operatuId.id, groupInfoModel.members);
  612. if (notice.operatuId.id == myId) {
  613. showStr = '你 更改群名为 $groupName';
  614. } else {
  615. showStr = '$optName 更改群名为 $groupName';
  616. }
  617. // I18n.of(context).change_group_owner1.replaceFirst('/s1', groupName);
  618. break;
  619. case GroupChangeType.GroupNoticeChange:
  620. print('optId.id ${optId.id}');
  621. showStr = I18n.of(context).update_group_announce;
  622. break;
  623. case GroupChangeType.QRCodeAddMemberNotice:
  624. var optName = _getUserName(optId.id, groupInfoModel.members);
  625. print('optId.id ${optId.id}');
  626. showStr = optId.id == UserData().basicInfo.userId
  627. ? I18n.of(context).you_qr
  628. : I18n.of(context).others_qr.replaceFirst('/s1', optName);
  629. break;
  630. case GroupChangeType.GroupMemberCheckNotice:
  631. var optedName = _getUserName(optId.id, groupInfoModel.members);
  632. print('groupInfoModel.hosterId:${groupInfoModel.hosterId}');
  633. if (myId == groupInfoModel.hosterId) {
  634. showStr = I18n.of(context)
  635. .invite_confirm
  636. .replaceFirst('/s1', optedName)
  637. .replaceFirst('/s2', optedIds.length.toString());
  638. } else {
  639. //获取用户名
  640. var otherNames = '';
  641. for (var i = 0; i < optedIds.length; i++) {
  642. //获取用户名
  643. var nickName = optedIds[i].niceName;
  644. if (otherNames.length == 0) {
  645. otherNames = nickName;
  646. } else {
  647. otherNames = '$otherNames、$nickName';
  648. }
  649. }
  650. showStr = I18n.of(context)
  651. .want_invite_confirm
  652. .replaceFirst('/s1', optedName)
  653. .replaceFirst('/s2', otherNames);
  654. }
  655. break;
  656. case GroupChangeType.GroupMemberCheckAddMemberNotice:
  657. // var optedName = _getUserName(optId.id, groupInfoModel.members);
  658. bool isMy = false;
  659. var otherNames = '';
  660. for (var i = 0; i < optedIds.length; i++) {
  661. if (optedIds[i].id == myId) {
  662. isMy = true;
  663. }
  664. //获取用户名
  665. var nickName = optedIds[i].niceName;
  666. if (otherNames.length == 0) {
  667. otherNames = nickName;
  668. } else {
  669. otherNames = '$otherNames、$nickName';
  670. }
  671. }
  672. if (myId == groupInfoModel.hosterId) {
  673. showStr = I18n.of(context)
  674. .join_group_confirm
  675. .replaceFirst('/s1', otherNames);
  676. } else {
  677. if (isMy) {
  678. showStr = I18n.of(context)
  679. .you_invite_gourp
  680. .replaceFirst('/s1', optId.niceName);
  681. } else {
  682. showStr = I18n.of(context)
  683. .someone_join_group
  684. .replaceFirst('/s1', otherNames);
  685. }
  686. }
  687. break;
  688. case GroupChangeType.GroupIsOpenMemberCheckChange:
  689. showStr = notice.changeBool
  690. ? I18n.of(context).group_setting_tips1
  691. : I18n.of(context).group_setting_tips2;
  692. break;
  693. default:
  694. }
  695. return showStr;
  696. }
  697. static _getUserName(int uId, List<GroupMemberModel> members) {
  698. for (var uItem in members) {
  699. if (uItem.memberId == uId) {
  700. print('用户$uId 的名字 是 ${uItem.refName}');
  701. return uItem.refName;
  702. }
  703. }
  704. return '';
  705. }
  706. static void handlerUnreadMsg(msg) {
  707. var msgContent = PushUserUnreadMsgNotice.fromBuffer(msg);
  708. var noticeList = msgContent.notices;
  709. ChatDataMgr().updateRecordWithUnreadMsg(noticeList);
  710. }
  711. static handlerServerMsg(int comId, int msgId, List<int> content) {
  712. switch (comId) {
  713. case ComId.Chat:
  714. if (msgId == 2) {
  715. //发送消息成功回应
  716. var msgContent = ChatSendRes.fromBuffer(content);
  717. if (msgContent.errorCode == 0 ||
  718. msgContent.errorCode == 17 ||
  719. msgContent.errorCode == 16) {
  720. print('发送聊天消息成功');
  721. ChatDataMgr().updateMsgState(
  722. msgContent.targetId,
  723. msgContent.sendTime.toInt(),
  724. msgContent.channelType.value,
  725. MsgState.SendingSuccess);
  726. //去除缓存
  727. for (var i = 0; i < sendCache.length; i++) {
  728. MsgModel msg = sendCache[i];
  729. if (msgContent.targetId == msg.sessionId &&
  730. msgContent.sendTime.toInt() == msg.time) {
  731. msg.state = MsgState.SendingSuccess;
  732. sendCache.remove(msg);
  733. break;
  734. }
  735. }
  736. } else {
  737. if (msgContent.errorCode == 3001) {
  738. print('用户没有登录,重新登录');
  739. NetWork().reLogin();
  740. } else {
  741. ChatDataMgr().updateMsgState(
  742. msgContent.targetId,
  743. msgContent.sendTime.toInt(),
  744. msgContent.channelType.value,
  745. MsgState.SendingFailed);
  746. for (var i = 0; i < sendCache.length; i++) {
  747. MsgModel msg = sendCache[i];
  748. if (msgContent.targetId == msg.sessionId &&
  749. msgContent.sendTime.toInt() == msg.time) {
  750. msg.state = MsgState.SendingFailed;
  751. break;
  752. }
  753. }
  754. }
  755. }
  756. } else if (msgId == 3) {
  757. print('收到聊天消息');
  758. var msgContent = PushChat.fromBuffer(content);
  759. print('收到聊天消息BBBBB');
  760. ackServerMsg(msgContent.sendTime);
  761. handlerReceiveMsg(msgContent);
  762. } else if (msgId == 4) {
  763. print('处理未读消息汇总');
  764. handlerUnreadMsg(content);
  765. } else if (msgId == 9) {
  766. print('切换人工翻译状态通知');
  767. receiveTranslateState(content);
  768. } else if (msgId == 11) {
  769. //
  770. var msgContent = RequestRealtimeCallRes.fromBuffer(content);
  771. if (msgContent.errorCode == 0) {
  772. print('发送连麦消息成功');
  773. // showToast('发送连麦消息成功');
  774. } else {
  775. print('发送连麦消息失败');
  776. MessageMgr().emit('AudioChat Failed');
  777. }
  778. } else if (msgId == 12) {
  779. var msgContent = PushRealtimeCall.fromBuffer(content);
  780. var friendId = msgContent.sUserId;
  781. print('收到连麦消息 $friendId');
  782. //只能一次接收一个人的连麦
  783. if (!isAudioConnect) {
  784. LocalNotificationUtil.instance
  785. .show(I18n.of(context).notice, I18n.of(context).new_video_msg);
  786. playAudioRing();
  787. MessageMgr().emit('Receive AudioChat Request', friendId);
  788. }
  789. } else if (msgId == 14) {
  790. var msgContent = PushRealtimeCallRespond.fromBuffer(content);
  791. var friendId = msgContent.tUserId;
  792. print('收到连麦消息 $friendId');
  793. bool isAnswer = msgContent.isAnswer;
  794. stopAudioRing();
  795. if (!isAnswer) {
  796. audioChatRequestFriendId = 0;
  797. }
  798. MessageMgr().emit(
  799. 'AudioChat State', {'fdId': friendId, 'isAnswer': isAnswer});
  800. } else if (msgId == 18) {
  801. var res = PushGiftGiving.fromBuffer(content);
  802. print('收到礼物:${res.sendUserId} , ${res.giftId} ,${res.giftAmount}');
  803. MessageMgr().emit("Receive Gift", res);
  804. } else if (msgId == 103) {
  805. print('收到会话成员信息');
  806. } else if (msgId == 202) {
  807. handleCreateGroup(content);
  808. } else if (msgId == 204) {
  809. handlerQuitGroup(content);
  810. } else if (msgId == 206) {
  811. handelerQueryGroupInfoRes(content);
  812. } else if (msgId == 208) {
  813. handlerAddGroupMemberRes(content);
  814. } else if (msgId == 210) {
  815. handlerRemoveGroupMemberRes(content);
  816. } else if (msgId == 212) {
  817. handlerUpdateGroupNoticeRes(content);
  818. } else if (msgId == 214) {
  819. handlerUpdateGroupNameRes(content);
  820. } else if (msgId == 216) {
  821. handlerUpdateMemberRefName(content);
  822. } else if (msgId == 218) {
  823. handlerGetGroupListRes(content);
  824. } else if (msgId == 220) {
  825. handlerSetGroupSwitch(content);
  826. } else if (msgId == 222) {
  827. handlerJoinGroupRes(content);
  828. } else if (msgId == 224) {
  829. handlerUpdateGroupHoster(content);
  830. } else if (msgId == 226) {
  831. handlerAgreeMember(content);
  832. } else if (msgId == 228) {
  833. handlerUpdateMemberMsgFree(content);
  834. } else if (msgId == 230) {
  835. handlerGroupIsShowMenberNiceName(content);
  836. }
  837. break;
  838. case ComId.TranslateOrder:
  839. if (msgId == 2) {
  840. handlerCreateTranslateOrder(content);
  841. } else if (msgId == 4) {
  842. handlerReceiveOrder(content);
  843. } else if (msgId == 6) {
  844. handlerCancelTranslateOrder(content);
  845. } else if (msgId == 20) {
  846. handlerDeliveryInterpreterOrderPush(content);
  847. }else if(msgId==21){
  848. handlerCancellationTransHKOrderPush(content);
  849. }else if(msgId==8){
  850. handlerEndTransHKOrderRes(content);
  851. }
  852. break;
  853. case ComId.PushMsg:
  854. String msg = PushNetRelay.fromBuffer(content).msg;
  855. print('接受的推送消息:msg $msg');
  856. Map map = json.decode(msg);
  857. String type = map['type'];
  858. switch (type) {
  859. case 'notice':
  860. ///由于极光本地推送点击事件无反应,暂时不走这,由远端推
  861. String messageJson = map['message'];
  862. Map messageMap = json.decode(messageJson);
  863. Map ext = json.decode(messageMap['extparameters']);
  864. print('ext $ext}');
  865. LocalNotificationUtil.instance.showOtherNotification(
  866. ext, messageMap['title'], messageMap['content']);
  867. break;
  868. case 'friends':
  869. FriendListMgr().getFriendListFromServer();
  870. MessageMgr().emit('Add friend');
  871. break;
  872. case 'deletedata':
  873. print('收到清空用户聊天记录通知');
  874. GroupInfoMgr().deleteAllGroup();
  875. ChatDataMgr().deleteAllRecord();
  876. FriendListMgr().deleteAllFriend();
  877. Navigator.of(context).pushAndRemoveUntil(new MaterialPageRoute(
  878. builder: (context) {
  879. return IndexPage();
  880. },
  881. ), (route) => route == null);
  882. NetWork().singOut();
  883. UserData().reset();
  884. break;
  885. case 'blacklist':
  886. String messageJson = map['message'];
  887. Map messageMap = json.decode(messageJson);
  888. if (messageMap['Status'] == 0) {
  889. BlacklistMgr.addBlackListMe(messageMap['UserId']);
  890. } else {
  891. BlacklistMgr.removeBalckListMe(messageMap['UserId']);
  892. }
  893. break;
  894. }
  895. break;
  896. default:
  897. }
  898. }
  899. //设置群验证开关
  900. static setGroupSwitch(int groupId, bool isCheck) {
  901. print('设置群验证开关 $isCheck');
  902. var seq = SettingGroupReq.create();
  903. seq.groupId = groupId;
  904. seq.isOpenMemberCheck = isCheck;
  905. NetWork().sendMsg(ComId.Chat, 219, seq);
  906. }
  907. //设置群验证开关结果
  908. static handlerSetGroupSwitch(List<int> msgContent) {
  909. print('设置群验证开关结果');
  910. var res = SettingGroupRes.fromBuffer(msgContent);
  911. if (res.errorCode == 0) {
  912. print('设置群验证开关结果成功');
  913. } else {
  914. print('设置群验证开关结果失败${res.errorCode}');
  915. }
  916. }
  917. //退出群
  918. static quitGroup(int groupId) {
  919. print('退出群');
  920. var seq = QuitChatGroupReq.create();
  921. seq.groupId = groupId;
  922. NetWork().sendMsg(ComId.Chat, 203, seq);
  923. }
  924. static handlerQuitGroup(List<int> msgContent) {
  925. print('退出群结果');
  926. var res = QuitChatGroupRes.fromBuffer(msgContent);
  927. if (res.errorCode == 0) {
  928. print('退出群结果成功 ${res.groupId}');
  929. } else {
  930. print('退出群结果失败${res.errorCode}');
  931. }
  932. }
  933. //添加群成员
  934. static addGroupMember(int groupId, List<int> uIdList) {
  935. print('##发送207 添加群成员------');
  936. var seq = AddGroupMemberReq.create();
  937. seq.groupId = groupId;
  938. seq.userIds.addAll(uIdList);
  939. NetWork().sendMsg(ComId.Chat, 207, seq);
  940. }
  941. //添加群成员结果
  942. static handlerAddGroupMemberRes(List<int> msgContent) {
  943. var res = AddGroupMemberRes.fromBuffer(msgContent);
  944. print('##发送返回 添加群成员 res.errorCode:${res.errorCode}');
  945. if (res.errorCode == 0) {
  946. MessageMgr().emit('Update Group Info');
  947. print('添加群成员成功');
  948. } else {
  949. switch (res.errorCode) {
  950. case 3007:
  951. showToast(I18n.of(context).members_max);
  952. break;
  953. default:
  954. }
  955. print('添加群成员失败');
  956. }
  957. }
  958. //扫码加入群
  959. static joinGroup(int groupId) {
  960. print('添加群成员');
  961. var seq = GroupQRcodeAddMemberReq.create();
  962. seq.groupId = groupId;
  963. NetWork().sendMsg(ComId.Chat, 221, seq);
  964. }
  965. //扫码加入群结果
  966. static handlerJoinGroupRes(List<int> msgContent) async {
  967. print('扫码加入群结果');
  968. var res = GroupQRcodeAddMemberRes.fromBuffer(msgContent);
  969. if (res.errorCode == 0) {
  970. print('扫码加入群结果成功');
  971. var groupInfoModel = GroupInfoModel.fromInfo(res.group);
  972. GroupInfoMgr().addGroup(groupInfoModel);
  973. Navigator.pushReplacement(context,
  974. MaterialPageRoute<void>(builder: (BuildContext context) {
  975. return GroupChatPage(
  976. key: Key('GroupChat'), groupInfoModel: groupInfoModel);
  977. }));
  978. } else {
  979. switch (res.errorCode) {
  980. case 3007:
  981. showToast(I18n.of(context).members_max);
  982. break;
  983. default:
  984. }
  985. print('扫码加入群结果失败${res.errorCode}');
  986. }
  987. }
  988. //移出群成员
  989. static removeGroupMember(int groupId, List<int> uIdList) {
  990. print('添加群成员');
  991. var seq = RemoveGroupMemberReq.create();
  992. seq.groupId = groupId;
  993. seq.userIds.addAll(uIdList);
  994. NetWork().sendMsg(ComId.Chat, 209, seq);
  995. }
  996. //移出群成员结果
  997. static handlerRemoveGroupMemberRes(List<int> msgContent) {
  998. print('移出群成员结果');
  999. var res = RemoveGroupMemberRes.fromBuffer(msgContent);
  1000. if (res.errorCode == 0) {
  1001. MessageMgr().emit('Update Group Info');
  1002. print('移出群成员结果成功');
  1003. } else {
  1004. print('移出群成员结果失败${res.errorCode}');
  1005. }
  1006. }
  1007. //修改群公告
  1008. static updateGroupNotice(int groupId, String notice) {
  1009. print('修改群公告');
  1010. var seq = ModifyGroupNoticeReq.create();
  1011. seq.groupId = groupId;
  1012. seq.notice = notice;
  1013. NetWork().sendMsg(ComId.Chat, 211, seq);
  1014. }
  1015. //修改群公告结果
  1016. static handlerUpdateGroupNoticeRes(List<int> msgContent) {
  1017. print('修改群公告结果');
  1018. var res = ModifyGroupNoticeRes.fromBuffer(msgContent);
  1019. if (res.errorCode == 0) {
  1020. print('修改群公告结果成功');
  1021. } else {
  1022. print('修改群公告结果失败${res.errorCode}');
  1023. }
  1024. }
  1025. //修改群名称请求
  1026. static updateGroupName(int groupId, String name) {
  1027. print('修改群名称请求');
  1028. var seq = ModifyGroupNameReq.create();
  1029. seq.groupId = groupId;
  1030. seq.name = name;
  1031. NetWork().sendMsg(ComId.Chat, 213, seq);
  1032. }
  1033. //修改群名称请求结果
  1034. static handlerUpdateGroupNameRes(List<int> msgContent) {
  1035. print('修改群名称请求结果');
  1036. var res = ModifyGroupNameRes.fromBuffer(msgContent);
  1037. if (res.errorCode == 0) {
  1038. print('修改群名称请求成功');
  1039. } else {
  1040. showToast(I18n.of(context).fail);
  1041. print('修改群名称请求失败${res.errorCode}');
  1042. }
  1043. }
  1044. //修改群个人别名请求
  1045. static updateMemberRefName(int groupId, String refName) {
  1046. print('修改群个人别名请求$groupId');
  1047. var seq = GroupMemberModifyAliasReq.create();
  1048. seq.groupId = groupId;
  1049. seq.name = refName;
  1050. NetWork().sendMsg(ComId.Chat, 215, seq);
  1051. }
  1052. //修改群个人别名请求结果
  1053. static handlerUpdateMemberRefName(List<int> msgContent) {
  1054. print('修改群个人别名请求结果');
  1055. var res = GroupMemberModifyAliasRes.fromBuffer(msgContent);
  1056. if (res.errorCode == 0) {
  1057. print('修改群个人别名请求结果成功');
  1058. } else {
  1059. print('修改群个人别名请求结果失败${res.errorCode}');
  1060. }
  1061. }
  1062. //群主转让其他人
  1063. static updateGroupHoster(int groupId, int uId) {
  1064. print('群主转让其他人');
  1065. var seq = GroupMasterTransReq.create();
  1066. seq.groupId = groupId;
  1067. seq.userId = uId;
  1068. NetWork().sendMsg(ComId.Chat, 223, seq);
  1069. }
  1070. //群主转让其他人结果
  1071. static handlerUpdateGroupHoster(List<int> msgContent) {
  1072. print('群主转让其他人结果');
  1073. var res = GroupMasterTransRes.fromBuffer(msgContent);
  1074. if (res.errorCode == 0) {
  1075. MessageMgr().emit('Update Group Info');
  1076. print('群主转让其他人结果成功');
  1077. } else {
  1078. print('群主转让其他人结果失败${res.errorCode}');
  1079. }
  1080. }
  1081. //群主批准其他人加入群
  1082. static agreeMember(int groupId, List<int> uId) {
  1083. print('群主批准其他人加入群 groupId:$groupId uId: $uId}');
  1084. var seq = GroupMasterCheckAddMemberReq.create();
  1085. seq.groupId = groupId;
  1086. seq.userIds.addAll(uId);
  1087. NetWork().sendMsg(ComId.Chat, 225, seq);
  1088. }
  1089. //是否显示群昵称
  1090. static setGroupIsShowMenberNiceNameReq(int groupId, bool isShow) {
  1091. print('设置是否显示群昵称 groupId:$groupId isShow: $isShow');
  1092. var seq = SetGroupIsShowMenberNiceNameReq.create();
  1093. seq.groupId = groupId;
  1094. seq.isShowMenberNiceName = isShow;
  1095. NetWork().sendMsg(ComId.Chat, 229, seq);
  1096. }
  1097. //发布翻译管家帮助订单
  1098. static sendCreateTranslateOrder(int fromLanguage,int toLanguage,int scences,String extraDesc) {
  1099. TranslateHKMgr().isUser=true;
  1100. debugPrint('发布翻译管家帮助订单 fromLanguage:$fromLanguage toLanguage: $toLanguage | ${fromLanguage|toLanguage}' );
  1101. var seq = IssueTransHKOrderReq.create();
  1102. seq.tLanguage = fromLanguage | toLanguage;
  1103. seq.scenes = scences;
  1104. seq.desc = extraDesc;
  1105. NetWork().sendMsg(ComId.TranslateOrder, 1, seq);
  1106. }
  1107. //发布翻译管家帮助订单回应
  1108. static handlerCreateTranslateOrder(List<int> msgContent) {
  1109. debugPrint('发布翻译管家帮助订单回应');
  1110. // LoadingManage().closeLoading();
  1111. var res = IssueTransHKOrderRes.fromBuffer(msgContent);
  1112. if (res.errorCode == 0) {
  1113. TranslateHKMgr().orderId = res.orderId;
  1114. TranslateHKMgr().waitNum = res.waitNum;
  1115. TranslateHKMgr().orderStatus = TranslateHKMgr.ORDER_STATUS_WAITING;
  1116. MessageMgr().emit(MessageMgr.TRANSLATE_HK_REFRESH_ORDER);
  1117. // GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree);
  1118. debugPrint('发布翻译管家帮助订单回应-订单号: ${res.orderId} 等待人数 ${res.waitNum}');
  1119. } else {
  1120. debugPrint('发布翻译管家帮助订单失败 ${res.errorCode}');
  1121. }
  1122. }
  1123. //撤销订单消息
  1124. static sendCancelTranslateOrder() {
  1125. debugPrint('取消订单 orderid:${TranslateHKMgr().orderId}');
  1126. var seq = CancellationTransHKOrderReq.create();
  1127. seq.orderId = TranslateHKMgr().orderId;
  1128. NetWork().sendMsg(ComId.TranslateOrder, 5, seq);
  1129. }
  1130. //撤销订单消息回应
  1131. static handlerCancelTranslateOrder(List<int> msgContent) {
  1132. debugPrint('撤销订单消息回应');
  1133. var res = CancellationTransHKOrderRes.fromBuffer(msgContent);
  1134. if (res.errorCode == 0) {
  1135. debugPrint('撤销订单消息回应成功: ${res.orderId}');
  1136. } else {
  1137. debugPrint('撤销订单消息回应成功失败${res.errorCode}');
  1138. }
  1139. }
  1140. //派送订单推送
  1141. static handlerDeliveryInterpreterOrderPush(List<int> msgContent) {
  1142. debugPrint('派送订单推送');
  1143. var res = DeliveryTransHKOrderPush.fromBuffer(msgContent);
  1144. print(
  1145. 'OrderId: ${res.orderId} createTime: ${res.createTime} tLanguage:${res.tLanguage} scenes:${res.scenes} desc${res.desc}');
  1146. TranslateOrder order = new TranslateOrder();
  1147. order.orderId=res.orderId;
  1148. order.desc=res.desc;
  1149. order.createTime=res.createTime.toInt();
  1150. order.tLanguage=res.tLanguage.toInt();
  1151. order.scenes=res.scenes.toInt();
  1152. order.userName = res.employer.niceName;
  1153. TranslateHKMgr().order = order;
  1154. MessageMgr().emit(MessageMgr.TRANSLATE_HK_RECEIVE_ORDER, order);
  1155. }
  1156. //派送订单已被取消
  1157. static handlerCancellationTransHKOrderPush(List<int> msgContent) {
  1158. var res = CancellationTransHKOrderPush.fromBuffer(msgContent);
  1159. debugPrint('派送订单已被取消: orderId${res.orderId}');
  1160. // print('OrderId: ${res.orderId} createTime: ${res.createTime} tLanguage:${res.tLanguage} scenes:${res.scenes} desc${res.desc}');
  1161. TranslateHKMgr().order = null;
  1162. MessageMgr().emit(MessageMgr.TRANSLATE_HK_CANCEL_ORDER);
  1163. showToast(I18n.of(context).translation_butler_order_time_out);
  1164. }
  1165. //接收订单请求
  1166. static sendReceiveOrder() {
  1167. TranslateOrder order = TranslateHKMgr().order;
  1168. debugPrint('接收订单消息请求 orderId:${order.orderId}');
  1169. var seq = ReceivingTransHKOrderReq.create();
  1170. seq.orderId = order.orderId;
  1171. NetWork().sendMsg(ComId.TranslateOrder, 3, seq);
  1172. }
  1173. //接收订单消息回应
  1174. static handlerReceiveOrder(List<int> msgContent) {
  1175. debugPrint('接收订单消息回应');
  1176. var res = ReceivingTransHKOrderRes.fromBuffer(msgContent);
  1177. if (res.errorCode == 0) {
  1178. // GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree);
  1179. debugPrint('接收订单消息回应成功: ');
  1180. } else {
  1181. debugPrint('接收订单消息回应失败${res.errorCode}');
  1182. }
  1183. }
  1184. //用户主动结束翻译管家服务
  1185. static sendEndTransHKOrderReq() {
  1186. debugPrint('用户主动结束翻译管家服务 ${TranslateHKMgr().orderId}' );
  1187. var seq = EndTransHKOrderReq.create();
  1188. seq.orderId = TranslateHKMgr().orderId;
  1189. NetWork().sendMsg(ComId.TranslateOrder, 7, seq);
  1190. }
  1191. //用户主动结束翻译管家服务回应
  1192. static handlerEndTransHKOrderRes(List<int> msgContent) {
  1193. debugPrint('用户主动结束翻译管家服务');
  1194. var res = EndTransHKOrderRes.fromBuffer(msgContent);
  1195. if (res.errorCode == 0) {
  1196. // GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree);
  1197. debugPrint('用户主动结束翻译管家服务 成功: ');
  1198. } else {
  1199. debugPrint('用户主动结束翻译管家服务 失败${res.errorCode}');
  1200. }
  1201. }
  1202. //消息免打扰请求结果
  1203. static handlerGroupIsShowMenberNiceName(List<int> msgContent) {
  1204. print('设置是否显示群昵称');
  1205. var res = SetGroupIsShowMenberNiceNameRes.fromBuffer(msgContent);
  1206. if (res.errorCode == 0) {
  1207. // GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree);
  1208. print('设置是否显示群昵称成功');
  1209. } else {
  1210. print('消息免打扰请求结果失败${res.errorCode}');
  1211. }
  1212. }
  1213. //消息免打扰请求结果
  1214. static handlerUpdateMemberMsgFree(List<int> msgContent) {
  1215. print('消息免打扰请求结果');
  1216. var res = SetGroupMasterMessageFreeRes.fromBuffer(msgContent);
  1217. if (res.errorCode == 0) {
  1218. GroupInfoMgr().updateMemberMsgFree(res.groupId, res.messageFree);
  1219. print('消息免打扰请求结果成功');
  1220. } else {
  1221. print('消息免打扰请求结果失败${res.errorCode}');
  1222. }
  1223. }
  1224. //群主批准其他人加入群结果
  1225. static handlerAgreeMember(List<int> msgContent) {
  1226. print('群主批准其他人加入群结果');
  1227. var res = GroupMasterCheckAddMemberRes.fromBuffer(msgContent);
  1228. if (res.errorCode == 0) {
  1229. print('群主批准其他人加入群结果成功');
  1230. } else {
  1231. switch (res.errorCode) {
  1232. case 3007:
  1233. showToast('群成员已满');
  1234. break;
  1235. default:
  1236. }
  1237. }
  1238. }
  1239. //消息免打扰请求
  1240. static updateMemberMsgFreeReq(int groupId, bool isAvoid) {
  1241. print('消息免打扰请求');
  1242. var seq = SetGroupMasterMessageFreeReq.create();
  1243. seq.groupId = groupId;
  1244. seq.messageFree = isAvoid;
  1245. NetWork().sendMsg(ComId.Chat, 227, seq);
  1246. }
  1247. //请求群列表求结果
  1248. static handlerGetGroupListRes(List<int> msgContent) async {
  1249. var res = QueryUserRelationGroupRes.fromBuffer(msgContent);
  1250. if (res.relationGroup == null) {
  1251. print('服务器也没有群存在');
  1252. return;
  1253. }
  1254. for (var i = 0; i < res.relationGroup.length; i++) {
  1255. var group = GroupInfoModel.fromInfo(res.relationGroup[i]);
  1256. print('群id ${group.sessionId}');
  1257. GroupInfoMgr().addGroup(group);
  1258. }
  1259. MessageMgr().emit('Update Group List');
  1260. }
  1261. //查询聊天群信息
  1262. static queryGroupInfo(int groupId) {
  1263. print('查询聊天群信息');
  1264. var seq = QueryChatGroupReq.create();
  1265. seq.groupId = groupId;
  1266. NetWork().sendMsg(ComId.Chat, 205, seq);
  1267. }
  1268. //查询聊天群信息结果
  1269. static handelerQueryGroupInfoRes(List<int> msgContent) async {
  1270. print('处理查询聊天群信息结果');
  1271. var res = QueryChatGroupRes.fromBuffer(msgContent);
  1272. if (res.errorCode == 0) {
  1273. print('获取群信息成功');
  1274. var groupInfo = GroupInfoModel.fromInfo(res.group);
  1275. print('开始创建群头像');
  1276. GroupInfoMgr().addGroup(groupInfo);
  1277. } else {
  1278. print('获取群信息失败');
  1279. switch (res.errorCode) {
  1280. case 3006:
  1281. showToast(I18n.of(context).group_max);
  1282. break;
  1283. default:
  1284. showToast(I18n.of(context).fail);
  1285. }
  1286. }
  1287. }
  1288. static playAudioRing() {
  1289. ringTimer = Timer.periodic(Duration(milliseconds: 2200), (timer) {
  1290. SoundUtils().play(
  1291. 'http://testcyhd.chengyouhd.com/Upload/Audio/even_wheat_sound.mp3',
  1292. isLocal: false);
  1293. });
  1294. }
  1295. static stopAudioRing() {
  1296. ringTimer?.cancel();
  1297. }
  1298. static ackServerMsg(Int64 msgId) {
  1299. var seq = AnswerPushChat.create();
  1300. seq.msgId = msgId;
  1301. NetWork().sendMsg(ComId.Chat, 100, seq);
  1302. }
  1303. ///服务端已作废
  1304. // static swtichTranslateState(TranslateState transState) {
  1305. // print('请求切换人工翻译状态');
  1306. // var seq = RequestSetHTranslReq.create();
  1307. // seq.sessionId = curActiveSession;
  1308. // seq.hTransl = transState;
  1309. //
  1310. // NetWork().sendMsg(ComId.Chat, 7, seq);
  1311. // }
  1312. static void receiveTranslateState(msg) {
  1313. var res = PushHTranslState.fromBuffer(msg);
  1314. if (res.sessionId == curActiveSession) {
  1315. MessageMgr().emit("Update Translate State", res);
  1316. }
  1317. }
  1318. static void sendAudioChatReq(int friendId) {
  1319. var seq = RequestRealtimeCallReq.create();
  1320. seq.tUserId = friendId;
  1321. seq.cType = ChatType.RealtimeCallVoiceType;
  1322. NetWork().sendMsg(ComId.Chat, 10, seq);
  1323. }
  1324. static void sendReplyAudioChatReq(int friendId, bool isReply) {
  1325. var seq = RespondRealtimeCallReq.create();
  1326. seq.sUserId = friendId;
  1327. seq.isAnswer = isReply;
  1328. NetWork().sendMsg(ComId.Chat, 13, seq);
  1329. }
  1330. //打赏礼物
  1331. static sendGiftTo(int friendId, int giftId, int giftAmount, int total) {
  1332. var seq = RequestGiftGivingReq.create();
  1333. seq.targetUserId = friendId;
  1334. seq.giftId = giftId;
  1335. seq.giftAmount = giftAmount;
  1336. seq.money = total;
  1337. NetWork().sendMsg(ComId.Chat, 17, seq);
  1338. }
  1339. static clear() {
  1340. curActiveSession = 0;
  1341. isTranslate = false;
  1342. isAudioConnect = false;
  1343. sendCache.clear();
  1344. }
  1345. }