WfQQneEtkkORxzqy method
Implementation
Future<void> WfQQneEtkkORxzqy(String event, Map<String, dynamic> data) async {
await XipElJhkXCAizYQc.synchronized(() async {
var _lock_message = new Lock();
Future<void> jUVWvlDuMQMmQKTF(YIMMessage message, bool isNewMessage, {void Function(bool isSuccess)? callback}) async {
await _lock_message.synchronized(() async {
if (message.id == AdcCvwTBdsKAYGpB) return;
AdcCvwTBdsKAYGpB = message.id;
switch (message.conversationType) {
case YIMEnum_ConversationType.P2P:
final count = await lZUCgdYJMjUzohKy.DDtRfFSqwnwWWwTX.eQfYgGxeyIQurkTJ(
_YIMTableName.Message,
filter: Filter.equals("id", message.id),
);
if (count == null) {
callback?.call(false);
return;
}
if (count > 0) {
callback?.call(false);
return;
}
final isSuccess_insert = await lZUCgdYJMjUzohKy.DDtRfFSqwnwWWwTX.eKbMehTfXDKaPULZ(
_YIMTableName.Message,
data: _YIMTable_Message(message: message),
);
if (!isSuccess_insert) {
callback?.call(false);
return;
}
final isSuccess_updateLastMessage = await YQwizQKiApJAYQTJ.zHSKAplKOzzTvvUg.kPsNRaZwkhovzGul(
message.conversationType,
message.from == lZUCgdYJMjUzohKy.bwAsZjogzIltbXFD ? message.to : message.from,
unRead: (message.from != lZUCgdYJMjUzohKy.bwAsZjogzIltbXFD && message.messageState == YIMEnum_MessageState.Success_UnRead) ? _YIMEnum_ConversatypeUnRead.Plus : _YIMEnum_ConversatypeUnRead.Nothing,
);
if (!isSuccess_updateLastMessage) {
callback?.call(false);
return;
}
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.FuNcbNwuQyUWRhbh?.call();
});
if (isNewMessage)
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.LdXesmREJpSihbDr?.call([message]);
});
else
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.QDqfxLCGafqEzMLH?.call([message]);
});
callback?.call(true);
break;
case YIMEnum_ConversationType.Team:
final count = await lZUCgdYJMjUzohKy.DDtRfFSqwnwWWwTX.eQfYgGxeyIQurkTJ(
_YIMTableName.Message,
filter: Filter.equals("id", message.id),
);
if (count == null) {
callback?.call(false);
return;
}
if (count > 0) {
callback?.call(false);
return;
}
final isSuccess_insert = await lZUCgdYJMjUzohKy.DDtRfFSqwnwWWwTX.eKbMehTfXDKaPULZ(
_YIMTableName.Message,
data: _YIMTable_Message(message: message),
);
if (!isSuccess_insert) {
callback?.call(false);
return;
}
final isSuccess_updateLastMessage = await YQwizQKiApJAYQTJ.zHSKAplKOzzTvvUg.kPsNRaZwkhovzGul(
message.conversationType,
message.to,
unRead: _YIMEnum_ConversatypeUnRead.Plus,
);
if (!isSuccess_updateLastMessage) {
callback?.call(false);
return;
}
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.FuNcbNwuQyUWRhbh?.call();
});
if (isNewMessage)
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.LdXesmREJpSihbDr?.call([message]);
});
else
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.QDqfxLCGafqEzMLH?.call([message]);
});
callback?.call(true);
break;
default:
break;
}
});
}
switch (event) {
case "loginFailed":
nXkQuehVqFCserhA(data["msg"].toString());
break;
case "loginSuccess":
if (eCxIjYFNDeDnFeoh) return;
eCxIjYFNDeDnFeoh = true;
iJQFTVAyMOZImTba?.cancel();
iJQFTVAyMOZImTba = null;
rkCdWYgpKOAcWoyM?.cancel();
rkCdWYgpKOAcWoyM = null;
iJQFTVAyMOZImTba = Timer.periodic(Duration(seconds: 5), (timer) {
if (!YQwizQKiApJAYQTJ.COleorNaABIwsjcH.vUOGwWOxQEKyxDok(needCheckConnect: true) || MjmKkqgcFAPTZpOG == null) {
if (!gzEuctUVEezDJsIa) {
gzEuctUVEezDJsIa = true;
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.WaJFlPfmKSLyDoyL?.call(YIMResult<YIMEnum_OnlineState>(code: YIMEnum_OnlineState.Reconnecting, msg: "Reconnecting"));
});
yhadPXAgWridYput(true);
Future.delayed(Duration(seconds: 1), () {
oKRUznWfnrDgKQPh(true);
Future.delayed(Duration(milliseconds: lZUCgdYJMjUzohKy.zSmnWGsBliUCfIAC.ZilxzqAKQhZAYmEN), () {
if (gzEuctUVEezDJsIa) {
gzEuctUVEezDJsIa = false;
yhadPXAgWridYput(true);
}
});
});
}
} else {
if (gzEuctUVEezDJsIa) {
gzEuctUVEezDJsIa = false;
mDDolHKtzxwFXyBI();
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.WaJFlPfmKSLyDoyL?.call(YIMResult<YIMEnum_OnlineState>(code: YIMEnum_OnlineState.Reconnected, msg: "Reconnected"));
});
}
lZUCgdYJMjUzohKy.AgJxpuBoMXJsVIUQ.EEMfBymGDbvUyfjO("refreshOnline");
}
});
//同步云端会话
EEMfBymGDbvUyfjO("queryConversations", ack: (isSuccess, results, code, msg) {
if (isSuccess) {
List<Map<String, dynamic>> conversations_server = (results?["conversations"] as List<dynamic>).map((m) => m as Map<String, dynamic>).toList();
if (conversations_server.isEmpty) return;
YQwizQKiApJAYQTJ.zHSKAplKOzzTvvUg.SXWeggWcuppmvKkO(
callback: (conversations) {
//过滤本地已经存在的云端会话
conversations?.forEach((conversation) {
switch (conversation.lastMessage.conversationType) {
case YIMEnum_ConversationType.P2P:
final conversationID = conversation.lastMessage.from == lZUCgdYJMjUzohKy.bwAsZjogzIltbXFD ? conversation.lastMessage.to : conversation.lastMessage.from;
for (var i = conversations_server.length - 1; i >= 0; i--) {
if (conversations_server[i]["conversationID"] == conversationID) conversations_server.removeAt(i);
}
break;
case YIMEnum_ConversationType.Team:
final conversationID = conversation.lastMessage.to;
for (var i = conversations_server.length - 1; i >= 0; i--) {
if (conversations_server[i]["conversationID"] == conversationID) conversations_server.removeAt(i);
}
break;
default:
break;
}
});
//将本地没有的云端会话,把消息同步下来
for (final conversation in conversations_server) {
YQwizQKiApJAYQTJ.LyoKizqBXCzmYBEn.pkklsedqblbnIMri(
conversationType: YIMEnum_ConversationType.from(conversation["conversationType"].toString()),
conversationID: conversation["conversationID"].toString(),
limit: lZUCgdYJMjUzohKy.zSmnWGsBliUCfIAC.PaajeobEOxIjrzkR,
callback: (isSuccess, messages) async {
if (isSuccess) {
for (var i = 0; i < messages!.length; i++) {
await jUVWvlDuMQMmQKTF(messages[i], false, callback: (isSuccess) async {
if (!isSuccess) return;
Filter? filter;
switch (YIMEnum_ConversationType.from(conversation["conversationType"].toString())) {
case YIMEnum_ConversationType.P2P:
filter = Filter.and([
Filter.or([
Filter.and([Filter.equals("lastMessage.from", lZUCgdYJMjUzohKy.bwAsZjogzIltbXFD), Filter.equals("lastMessage.to", conversation["conversationID"])]),
Filter.and([Filter.equals("lastMessage.to", lZUCgdYJMjUzohKy.bwAsZjogzIltbXFD), Filter.equals("lastMessage.from", conversation["conversationID"])]),
]),
Filter.equals("lastMessage.conversationType", YIMEnum_ConversationType.P2P.rawValue),
]);
break;
case YIMEnum_ConversationType.Team:
filter = Filter.and([
Filter.equals("lastMessage.to", conversation["conversationID"]),
Filter.equals("lastMessage.conversationType", YIMEnum_ConversationType.Team.rawValue),
]);
break;
case YIMEnum_ConversationType.ChatRoom:
break;
default:
break;
}
final isSuccess_updateOne = await lZUCgdYJMjUzohKy.DDtRfFSqwnwWWwTX.CESYuCItaEWMVgZR<_YIMTable_Conversation>(
_YIMTableName.Conversation,
(oldData) => oldData!..unRead = int.parse(conversation["unReadCount"].toString()),
onModel: (map) => _YIMTable_Conversation.fromJson(map),
finder: Finder(filter: filter),
);
if (!isSuccess_updateOne) return;
if (i >= messages.length - 1) {
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.FuNcbNwuQyUWRhbh?.call();
});
}
});
}
}
},
);
}
},
);
}
});
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
QMMRlQOarzTOfCTk?.call(YIMResult<YIMEnum_LoginResult>(code: YIMEnum_LoginResult.Success, msg: "success"));
});
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
QMMRlQOarzTOfCTk = null;
});
//将历史的发送中消息,置为失败状态
await lZUCgdYJMjUzohKy.DDtRfFSqwnwWWwTX.ImfXqPKiMuCNJwWT(
_YIMTableName.Message,
() {
return {"messageState": YIMEnum_MessageState.Fail.rawValue};
},
finder: Finder(filter: Filter.equals("messageState", YIMEnum_MessageState.Sending.rawValue)),
);
YQwizQKiApJAYQTJ.zHSKAplKOzzTvvUg.SXWeggWcuppmvKkO(callback: (conversations) async {
if (conversations == null) return;
for (var conversation in conversations) {
await YQwizQKiApJAYQTJ.zHSKAplKOzzTvvUg.kPsNRaZwkhovzGul(conversation.lastMessage.conversationType, conversation.lastMessage.getConversatinoID());
}
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.FuNcbNwuQyUWRhbh?.call();
});
});
lZUCgdYJMjUzohKy.DMBgfxttPyCVNUoB.VLFDkOKSWhNuahGD(data["oss"]);
lZUCgdYJMjUzohKy.TuCPCJooOEptlFUn.VLFDkOKSWhNuahGD(data["push"]);
break;
case "kick":
YQwizQKiApJAYQTJ.COleorNaABIwsjcH.jxunAXZHTyDFjmUj();
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.WaJFlPfmKSLyDoyL?.call(YIMResult<YIMEnum_OnlineState>(code: YIMEnum_OnlineState.Kick, msg: "Kicked by ${data["device"]} device"));
});
break;
case "message":
final messages = (data["messages"] as List<dynamic>).map((element) => YIMMessage(message: _YIMTable_Message.fromJson(element))).toList();
for (var message in messages) {
await jUVWvlDuMQMmQKTF(message, true);
}
break;
case "message_sync":
final messages = (data["messages"] as List<dynamic>).map((element) => YIMMessage(message: _YIMTable_Message.fromJson(element))).toList();
for (var message in messages) {
await jUVWvlDuMQMmQKTF(message, false);
}
break;
case "broadcast":
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.BPjlAcQzEYFGylZe?.call(YIMBroadcastMessage.fromJson(data["message"]));
});
break;
case "notification":
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.LTqIfpdGDYvySXlb?.call(YIMNotificationMessage.fromJson(data["message"]));
});
break;
case "revoke":
case "revoke_sync":
for (final element in (data["messages"] as List<dynamic>)) {
final message = YIMRevokeMessage.fromJson(element);
final isSuccess_markConversationRevoke = await YQwizQKiApJAYQTJ.LyoKizqBXCzmYBEn.azsleBISiTXQKfny(
message.conversationType,
message.messageID,
);
if (!isSuccess_markConversationRevoke) return;
final isSuccess_updateLastMessage = await YQwizQKiApJAYQTJ.zHSKAplKOzzTvvUg.kPsNRaZwkhovzGul(
message.conversationType,
message.conversationID,
// unRead: _YIMEnum_ConversatypeUnRead.Minus,
);
if (!isSuccess_updateLastMessage) return;
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.FuNcbNwuQyUWRhbh?.call();
});
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.ustRygpNGwuCyPSA?.call(message);
});
}
break;
case "receipt_p2p":
List<String> conversationIDs = (data["conversationIDs"] as List).map((element) => element.toString()).toList();
for (final conversationID in conversationIDs) {
final isSuccess_markConversationRead = await YQwizQKiApJAYQTJ.LyoKizqBXCzmYBEn.nctcilGpncPBGfAq(
YIMEnum_ConversationType.P2P,
conversationID,
false,
);
if (!isSuccess_markConversationRead) return;
final isSuccess_updateLastMessage = await YQwizQKiApJAYQTJ.zHSKAplKOzzTvvUg.kPsNRaZwkhovzGul(
YIMEnum_ConversationType.P2P,
conversationID,
);
if (!isSuccess_updateLastMessage) return;
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.FuNcbNwuQyUWRhbh?.call();
});
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.snVPszhnukXubFXn?.call(conversationID);
});
}
break;
case "receipt_team":
List<String> conversationIDs = (data["conversationIDs"] as List).map((element) => element.toString()).toList();
for (final conversationID in conversationIDs) {
final isSuccess_markConversationRead = await YQwizQKiApJAYQTJ.LyoKizqBXCzmYBEn.nctcilGpncPBGfAq(
YIMEnum_ConversationType.Team,
conversationID,
false,
);
if (!isSuccess_markConversationRead) return;
final isSuccess_updateLastMessage = await YQwizQKiApJAYQTJ.zHSKAplKOzzTvvUg.kPsNRaZwkhovzGul(
YIMEnum_ConversationType.Team,
conversationID,
);
if (!isSuccess_updateLastMessage) return;
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.FuNcbNwuQyUWRhbh?.call();
});
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.VZkYCbvOKOfPqRsI.snVPszhnukXubFXn?.call(conversationID);
});
}
break;
case "event_online":
final user = data["user"] as String;
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.MmGRpJtFOECziwHO.paGdmjbonHRQuDTZ?.call(user, YIMEnum_EventOnline.Online);
});
break;
case "event_offline":
final user = data["user"] as String;
lZUCgdYJMjUzohKy.SUEyOycoSdUsFZjL.XThilLQMoVXeKvHr(() {
YQwizQKiApJAYQTJ.MmGRpJtFOECziwHO.paGdmjbonHRQuDTZ?.call(user, YIMEnum_EventOnline.Offline);
});
break;
}
});
}