feat: incr sync version.
This commit is contained in:
17
go/chao-sdk-core/wasm/cmd/Makefile
Normal file
17
go/chao-sdk-core/wasm/cmd/Makefile
Normal file
@@ -0,0 +1,17 @@
|
||||
.PHONY: ios build install mac windows
|
||||
|
||||
WASM_BIN_NAME=openIM.wasm
|
||||
|
||||
|
||||
#新加target的时候,下面的命令行记得用tab顶格
|
||||
wasm:
|
||||
GOOS=js GOARCH=wasm go build -trimpath -ldflags "-s -w" -o ${WASM_BIN_NAME} main.go
|
||||
|
||||
build: static/main.wasm static/wasm_exec.js
|
||||
goexec 'http.ListenAndServe(`:9999`, http.FileServer(http.Dir(`.`)))'
|
||||
|
||||
static/wasm_exec.js:
|
||||
cp "$(shell go env GOROOT)/misc/wasm/wasm_exec.js" static
|
||||
|
||||
static/main.wasm : main.go
|
||||
GO111MODULE=auto GOOS=js GOARCH=wasm go build -o static/${WASM_BIN_NAME}.wasm main.go
|
||||
196
go/chao-sdk-core/wasm/cmd/main.go
Normal file
196
go/chao-sdk-core/wasm/cmd/main.go
Normal file
@@ -0,0 +1,196 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/wasm_wrapper"
|
||||
"runtime"
|
||||
"runtime/debug"
|
||||
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
func main() {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
fmt.Println("MAIN", "panic info is:", r, debug.Stack())
|
||||
}
|
||||
}()
|
||||
fmt.Println("runtime env", runtime.GOARCH, runtime.GOOS)
|
||||
registerFunc()
|
||||
<-make(chan bool)
|
||||
}
|
||||
|
||||
func registerFunc() {
|
||||
//register global listener function
|
||||
globalFuc := wasm_wrapper.NewWrapperCommon()
|
||||
js.Global().Set(wasm_wrapper.COMMONEVENTFUNC, js.FuncOf(globalFuc.CommonEventFunc))
|
||||
//register init login function
|
||||
wrapperInitLogin := wasm_wrapper.NewWrapperInitLogin(globalFuc)
|
||||
js.Global().Set("initSDK", js.FuncOf(wrapperInitLogin.InitSDK))
|
||||
js.Global().Set("login", js.FuncOf(wrapperInitLogin.Login))
|
||||
js.Global().Set("logout", js.FuncOf(wrapperInitLogin.Logout))
|
||||
js.Global().Set("getLoginStatus", js.FuncOf(wrapperInitLogin.GetLoginStatus))
|
||||
js.Global().Set("setAppBackgroundStatus", js.FuncOf(wrapperInitLogin.SetAppBackgroundStatus))
|
||||
js.Global().Set("networkStatusChanged", js.FuncOf(wrapperInitLogin.NetworkStatusChanged))
|
||||
//register conversation and message function
|
||||
wrapperConMsg := wasm_wrapper.NewWrapperConMsg(globalFuc)
|
||||
js.Global().Set("createTextMessage", js.FuncOf(wrapperConMsg.CreateTextMessage))
|
||||
js.Global().Set("createImageMessage", js.FuncOf(wrapperConMsg.CreateImageMessage))
|
||||
js.Global().Set("createImageMessageByURL", js.FuncOf(wrapperConMsg.CreateImageMessageByURL))
|
||||
js.Global().Set("createSoundMessageByURL", js.FuncOf(wrapperConMsg.CreateSoundMessageByURL))
|
||||
js.Global().Set("createVideoMessageByURL", js.FuncOf(wrapperConMsg.CreateVideoMessageByURL))
|
||||
js.Global().Set("createFileMessageByURL", js.FuncOf(wrapperConMsg.CreateFileMessageByURL))
|
||||
js.Global().Set("createCustomMessage", js.FuncOf(wrapperConMsg.CreateCustomMessage))
|
||||
js.Global().Set("createQuoteMessage", js.FuncOf(wrapperConMsg.CreateQuoteMessage))
|
||||
js.Global().Set("createAdvancedQuoteMessage", js.FuncOf(wrapperConMsg.CreateAdvancedQuoteMessage))
|
||||
js.Global().Set("createAdvancedTextMessage", js.FuncOf(wrapperConMsg.CreateAdvancedTextMessage))
|
||||
js.Global().Set("createCardMessage", js.FuncOf(wrapperConMsg.CreateCardMessage))
|
||||
js.Global().Set("createTextAtMessage", js.FuncOf(wrapperConMsg.CreateTextAtMessage))
|
||||
js.Global().Set("createVideoMessage", js.FuncOf(wrapperConMsg.CreateVideoMessage))
|
||||
js.Global().Set("createFileMessage", js.FuncOf(wrapperConMsg.CreateFileMessage))
|
||||
js.Global().Set("createMergerMessage", js.FuncOf(wrapperConMsg.CreateMergerMessage))
|
||||
js.Global().Set("createFaceMessage", js.FuncOf(wrapperConMsg.CreateFaceMessage))
|
||||
js.Global().Set("createForwardMessage", js.FuncOf(wrapperConMsg.CreateForwardMessage))
|
||||
js.Global().Set("createLocationMessage", js.FuncOf(wrapperConMsg.CreateLocationMessage))
|
||||
js.Global().Set("createVideoMessageFromFullPath", js.FuncOf(wrapperConMsg.CreateVideoMessageFromFullPath))
|
||||
js.Global().Set("createImageMessageFromFullPath", js.FuncOf(wrapperConMsg.CreateImageMessageFromFullPath))
|
||||
|
||||
js.Global().Set("createSoundMessageFromFullPath", js.FuncOf(wrapperConMsg.CreateSoundMessageFromFullPath))
|
||||
js.Global().Set("createFileMessageFromFullPath", js.FuncOf(wrapperConMsg.CreateFileMessageFromFullPath))
|
||||
js.Global().Set("createSoundMessage", js.FuncOf(wrapperConMsg.CreateSoundMessage))
|
||||
js.Global().Set("createForwardMessage", js.FuncOf(wrapperConMsg.CreateForwardMessage))
|
||||
js.Global().Set("createLocationMessage", js.FuncOf(wrapperConMsg.CreateLocationMessage))
|
||||
js.Global().Set("createVideoMessageFromFullPath", js.FuncOf(wrapperConMsg.CreateVideoMessageFromFullPath))
|
||||
js.Global().Set("createImageMessageFromFullPath", js.FuncOf(wrapperConMsg.CreateImageMessageFromFullPath))
|
||||
js.Global().Set("getAtAllTag", js.FuncOf(wrapperConMsg.GetAtAllTag))
|
||||
js.Global().Set("markConversationMessageAsRead", js.FuncOf(wrapperConMsg.MarkConversationMessageAsRead))
|
||||
js.Global().Set("markMessagesAsReadByMsgID", js.FuncOf(wrapperConMsg.MarkMessagesAsReadByMsgID))
|
||||
js.Global().Set("sendMessage", js.FuncOf(wrapperConMsg.SendMessage))
|
||||
js.Global().Set("sendMessageNotOss", js.FuncOf(wrapperConMsg.SendMessageNotOss))
|
||||
//js.Global().Set("setMessageReactionExtensions", js.FuncOf(wrapperConMsg.SetMessageReactionExtensions))
|
||||
//js.Global().Set("addMessageReactionExtensions", js.FuncOf(wrapperConMsg.AddMessageReactionExtensions))
|
||||
//js.Global().Set("deleteMessageReactionExtensions", js.FuncOf(wrapperConMsg.DeleteMessageReactionExtensions))
|
||||
//js.Global().Set("getMessageListReactionExtensions", js.FuncOf(wrapperConMsg.GetMessageListReactionExtensions))
|
||||
//js.Global().Set("getMessageListSomeReactionExtensions", js.FuncOf(wrapperConMsg.GetMessageListSomeReactionExtensions))
|
||||
js.Global().Set("getAllConversationList", js.FuncOf(wrapperConMsg.GetAllConversationList))
|
||||
js.Global().Set("getConversationListSplit", js.FuncOf(wrapperConMsg.GetConversationListSplit))
|
||||
js.Global().Set("getOneConversation", js.FuncOf(wrapperConMsg.GetOneConversation))
|
||||
js.Global().Set("deleteConversationAndDeleteAllMsg", js.FuncOf(wrapperConMsg.DeleteConversationAndDeleteAllMsg))
|
||||
js.Global().Set("getAdvancedHistoryMessageList", js.FuncOf(wrapperConMsg.GetAdvancedHistoryMessageList))
|
||||
js.Global().Set("getAdvancedHistoryMessageListReverse", js.FuncOf(wrapperConMsg.GetAdvancedHistoryMessageListReverse))
|
||||
js.Global().Set("getMultipleConversation", js.FuncOf(wrapperConMsg.GetMultipleConversation))
|
||||
js.Global().Set("setConversationPrivateChat", js.FuncOf(wrapperConMsg.SetConversationPrivateChat))
|
||||
js.Global().Set("setConversationRecvMessageOpt", js.FuncOf(wrapperConMsg.SetConversationRecvMessageOpt))
|
||||
js.Global().Set("setGlobalRecvMessageOpt", js.FuncOf(wrapperConMsg.SetGlobalRecvMessageOpt))
|
||||
js.Global().Set("hideConversation", js.FuncOf(wrapperConMsg.HideConversation))
|
||||
js.Global().Set("setConversationDraft", js.FuncOf(wrapperConMsg.SetConversationDraft))
|
||||
js.Global().Set("searchConversation", js.FuncOf(wrapperConMsg.SearchConversation))
|
||||
js.Global().Set("resetConversationGroupAtType", js.FuncOf(wrapperConMsg.ResetConversationGroupAtType))
|
||||
js.Global().Set("pinConversation", js.FuncOf(wrapperConMsg.PinConversation))
|
||||
js.Global().Set("getTotalUnreadMsgCount", js.FuncOf(wrapperConMsg.GetTotalUnreadMsgCount))
|
||||
js.Global().Set("setConversationBurnDuration", js.FuncOf(wrapperConMsg.SetConversationBurnDuration))
|
||||
js.Global().Set("setConversationEx", js.FuncOf(wrapperConMsg.SetConversationEx))
|
||||
js.Global().Set("findMessageList", js.FuncOf(wrapperConMsg.FindMessageList))
|
||||
|
||||
js.Global().Set("revokeMessage", js.FuncOf(wrapperConMsg.RevokeMessage))
|
||||
js.Global().Set("typingStatusUpdate", js.FuncOf(wrapperConMsg.TypingStatusUpdate))
|
||||
js.Global().Set("deleteMessageFromLocalStorage", js.FuncOf(wrapperConMsg.DeleteMessageFromLocalStorage))
|
||||
js.Global().Set("deleteMessage", js.FuncOf(wrapperConMsg.DeleteMessage))
|
||||
js.Global().Set("hideAllConversations", js.FuncOf(wrapperConMsg.HideAllConversations))
|
||||
js.Global().Set("deleteAllMsgFromLocalAndSvr", js.FuncOf(wrapperConMsg.DeleteAllMsgFromLocalAndSvr))
|
||||
js.Global().Set("deleteAllMsgFromLocal", js.FuncOf(wrapperConMsg.DeleteAllMsgFromLocal))
|
||||
js.Global().Set("clearConversationAndDeleteAllMsg", js.FuncOf(wrapperConMsg.ClearConversationAndDeleteAllMsg))
|
||||
js.Global().Set("insertSingleMessageToLocalStorage", js.FuncOf(wrapperConMsg.InsertSingleMessageToLocalStorage))
|
||||
js.Global().Set("insertGroupMessageToLocalStorage", js.FuncOf(wrapperConMsg.InsertGroupMessageToLocalStorage))
|
||||
js.Global().Set("searchLocalMessages", js.FuncOf(wrapperConMsg.SearchLocalMessages))
|
||||
js.Global().Set("setMessageLocalEx", js.FuncOf(wrapperConMsg.SetMessageLocalEx))
|
||||
|
||||
js.Global().Set("changeInputStates", js.FuncOf(wrapperConMsg.ChangeInputStates))
|
||||
js.Global().Set("getInputStates", js.FuncOf(wrapperConMsg.GetInputStates))
|
||||
|
||||
//register group funcation
|
||||
wrapperGroup := wasm_wrapper.NewWrapperGroup(globalFuc)
|
||||
js.Global().Set("createGroup", js.FuncOf(wrapperGroup.CreateGroup))
|
||||
js.Global().Set("getSpecifiedGroupsInfo", js.FuncOf(wrapperGroup.GetSpecifiedGroupsInfo))
|
||||
js.Global().Set("joinGroup", js.FuncOf(wrapperGroup.JoinGroup))
|
||||
js.Global().Set("quitGroup", js.FuncOf(wrapperGroup.QuitGroup))
|
||||
js.Global().Set("dismissGroup", js.FuncOf(wrapperGroup.DismissGroup))
|
||||
js.Global().Set("changeGroupMute", js.FuncOf(wrapperGroup.ChangeGroupMute))
|
||||
js.Global().Set("changeGroupMemberMute", js.FuncOf(wrapperGroup.ChangeGroupMemberMute))
|
||||
js.Global().Set("setGroupMemberRoleLevel", js.FuncOf(wrapperGroup.SetGroupMemberRoleLevel))
|
||||
js.Global().Set("setGroupMemberInfo", js.FuncOf(wrapperGroup.SetGroupMemberInfo))
|
||||
js.Global().Set("getJoinedGroupList", js.FuncOf(wrapperGroup.GetJoinedGroupList))
|
||||
js.Global().Set("searchGroups", js.FuncOf(wrapperGroup.SearchGroups))
|
||||
js.Global().Set("setGroupInfo", js.FuncOf(wrapperGroup.SetGroupInfo))
|
||||
js.Global().Set("setGroupVerification", js.FuncOf(wrapperGroup.SetGroupVerification))
|
||||
js.Global().Set("setGroupLookMemberInfo", js.FuncOf(wrapperGroup.SetGroupLookMemberInfo))
|
||||
js.Global().Set("setGroupApplyMemberFriend", js.FuncOf(wrapperGroup.SetGroupApplyMemberFriend))
|
||||
js.Global().Set("getGroupMemberList", js.FuncOf(wrapperGroup.GetGroupMemberList))
|
||||
js.Global().Set("getGroupMemberOwnerAndAdmin", js.FuncOf(wrapperGroup.GetGroupMemberOwnerAndAdmin))
|
||||
js.Global().Set("getGroupMemberListByJoinTimeFilter", js.FuncOf(wrapperGroup.GetGroupMemberListByJoinTimeFilter))
|
||||
js.Global().Set("getSpecifiedGroupMembersInfo", js.FuncOf(wrapperGroup.GetSpecifiedGroupMembersInfo))
|
||||
js.Global().Set("kickGroupMember", js.FuncOf(wrapperGroup.KickGroupMember))
|
||||
js.Global().Set("transferGroupOwner", js.FuncOf(wrapperGroup.TransferGroupOwner))
|
||||
js.Global().Set("inviteUserToGroup", js.FuncOf(wrapperGroup.InviteUserToGroup))
|
||||
js.Global().Set("getGroupApplicationListAsRecipient", js.FuncOf(wrapperGroup.GetGroupApplicationListAsRecipient))
|
||||
js.Global().Set("getGroupApplicationListAsApplicant", js.FuncOf(wrapperGroup.GetGroupApplicationListAsApplicant))
|
||||
js.Global().Set("acceptGroupApplication", js.FuncOf(wrapperGroup.AcceptGroupApplication))
|
||||
js.Global().Set("refuseGroupApplication", js.FuncOf(wrapperGroup.RefuseGroupApplication))
|
||||
js.Global().Set("setGroupMemberNickname", js.FuncOf(wrapperGroup.SetGroupMemberNickname))
|
||||
js.Global().Set("searchGroupMembers", js.FuncOf(wrapperGroup.SearchGroupMembers))
|
||||
js.Global().Set("isJoinGroup", js.FuncOf(wrapperGroup.IsJoinGroup))
|
||||
|
||||
wrapperUser := wasm_wrapper.NewWrapperUser(globalFuc)
|
||||
js.Global().Set("getSelfUserInfo", js.FuncOf(wrapperUser.GetSelfUserInfo))
|
||||
js.Global().Set("setSelfInfo", js.FuncOf(wrapperUser.SetSelfInfo))
|
||||
js.Global().Set("setSelfInfoEx", js.FuncOf(wrapperUser.SetSelfInfoEx))
|
||||
js.Global().Set("getUsersInfo", js.FuncOf(wrapperUser.GetUsersInfo))
|
||||
js.Global().Set("getUsersInfoWithCache", js.FuncOf(wrapperUser.GetUsersInfoWithCache))
|
||||
js.Global().Set("subscribeUsersStatus", js.FuncOf(wrapperUser.SubscribeUsersStatus))
|
||||
js.Global().Set("unsubscribeUsersStatus", js.FuncOf(wrapperUser.UnsubscribeUsersStatus))
|
||||
js.Global().Set("getSubscribeUsersStatus", js.FuncOf(wrapperUser.GetSubscribeUsersStatus))
|
||||
js.Global().Set("getUserStatus", js.FuncOf(wrapperUser.GetUserStatus))
|
||||
js.Global().Set("addUserCommand", js.FuncOf(wrapperUser.AddUserCommand))
|
||||
js.Global().Set("deleteUserCommand", js.FuncOf(wrapperUser.DeleteUserCommand))
|
||||
js.Global().Set("getAllUserCommands", js.FuncOf(wrapperUser.GetAllUserCommands))
|
||||
|
||||
wrapperFriend := wasm_wrapper.NewWrapperFriend(globalFuc)
|
||||
js.Global().Set("getSpecifiedFriendsInfo", js.FuncOf(wrapperFriend.GetSpecifiedFriendsInfo))
|
||||
js.Global().Set("getFriendList", js.FuncOf(wrapperFriend.GetFriendList))
|
||||
js.Global().Set("searchFriends", js.FuncOf(wrapperFriend.SearchFriends))
|
||||
js.Global().Set("checkFriend", js.FuncOf(wrapperFriend.CheckFriend))
|
||||
js.Global().Set("addFriend", js.FuncOf(wrapperFriend.AddFriend))
|
||||
js.Global().Set("setFriendRemark", js.FuncOf(wrapperFriend.SetFriendRemark))
|
||||
js.Global().Set("pinFriends", js.FuncOf(wrapperFriend.PinFriends))
|
||||
js.Global().Set("deleteFriend", js.FuncOf(wrapperFriend.DeleteFriend))
|
||||
js.Global().Set("getFriendApplicationListAsRecipient", js.FuncOf(wrapperFriend.GetFriendApplicationListAsRecipient))
|
||||
js.Global().Set("getFriendApplicationListAsApplicant", js.FuncOf(wrapperFriend.GetFriendApplicationListAsApplicant))
|
||||
js.Global().Set("acceptFriendApplication", js.FuncOf(wrapperFriend.AcceptFriendApplication))
|
||||
js.Global().Set("refuseFriendApplication", js.FuncOf(wrapperFriend.RefuseFriendApplication))
|
||||
js.Global().Set("getBlackList", js.FuncOf(wrapperFriend.GetBlackList))
|
||||
js.Global().Set("removeBlack", js.FuncOf(wrapperFriend.RemoveBlack))
|
||||
js.Global().Set("addBlack", js.FuncOf(wrapperFriend.AddBlack))
|
||||
js.Global().Set("setFriendsEx", js.FuncOf(wrapperFriend.SetFriendsEx))
|
||||
|
||||
wrapperThird := wasm_wrapper.NewWrapperThird(globalFuc)
|
||||
js.Global().Set("updateFcmToken", js.FuncOf(wrapperThird.UpdateFcmToken))
|
||||
js.Global().Set("uploadFile", js.FuncOf(wrapperThird.UploadFile))
|
||||
|
||||
}
|
||||
554
go/chao-sdk-core/wasm/cmd/static/wasm_exec.js
Normal file
554
go/chao-sdk-core/wasm/cmd/static/wasm_exec.js
Normal file
@@ -0,0 +1,554 @@
|
||||
// Copyright 2018 The Go Authors. All rights reserved.
|
||||
// Use of this source code is governed by a BSD-style
|
||||
// license that can be found in the LICENSE file.
|
||||
|
||||
"use strict";
|
||||
|
||||
(() => {
|
||||
const enosys = () => {
|
||||
const err = new Error("not implemented");
|
||||
err.code = "ENOSYS";
|
||||
return err;
|
||||
};
|
||||
|
||||
if (!globalThis.fs) {
|
||||
let outputBuf = "";
|
||||
globalThis.fs = {
|
||||
constants: { O_WRONLY: -1, O_RDWR: -1, O_CREAT: -1, O_TRUNC: -1, O_APPEND: -1, O_EXCL: -1 }, // unused
|
||||
writeSync(fd, buf) {
|
||||
outputBuf += decoder.decode(buf);
|
||||
const nl = outputBuf.lastIndexOf("\n");
|
||||
if (nl != -1) {
|
||||
console.log(outputBuf.substring(0, nl));
|
||||
outputBuf = outputBuf.substring(nl + 1);
|
||||
}
|
||||
return buf.length;
|
||||
},
|
||||
write(fd, buf, offset, length, position, callback) {
|
||||
if (offset !== 0 || length !== buf.length || position !== null) {
|
||||
callback(enosys());
|
||||
return;
|
||||
}
|
||||
const n = this.writeSync(fd, buf);
|
||||
callback(null, n);
|
||||
},
|
||||
chmod(path, mode, callback) { callback(enosys()); },
|
||||
chown(path, uid, gid, callback) { callback(enosys()); },
|
||||
close(fd, callback) { callback(enosys()); },
|
||||
fchmod(fd, mode, callback) { callback(enosys()); },
|
||||
fchown(fd, uid, gid, callback) { callback(enosys()); },
|
||||
fstat(fd, callback) { callback(enosys()); },
|
||||
fsync(fd, callback) { callback(null); },
|
||||
ftruncate(fd, length, callback) { callback(enosys()); },
|
||||
lchown(path, uid, gid, callback) { callback(enosys()); },
|
||||
link(path, link, callback) { callback(enosys()); },
|
||||
lstat(path, callback) { callback(enosys()); },
|
||||
mkdir(path, perm, callback) { callback(enosys()); },
|
||||
open(path, flags, mode, callback) { callback(enosys()); },
|
||||
read(fd, buffer, offset, length, position, callback) { callback(enosys()); },
|
||||
readdir(path, callback) { callback(enosys()); },
|
||||
readlink(path, callback) { callback(enosys()); },
|
||||
rename(from, to, callback) { callback(enosys()); },
|
||||
rmdir(path, callback) { callback(enosys()); },
|
||||
stat(path, callback) { callback(enosys()); },
|
||||
symlink(path, link, callback) { callback(enosys()); },
|
||||
truncate(path, length, callback) { callback(enosys()); },
|
||||
unlink(path, callback) { callback(enosys()); },
|
||||
utimes(path, atime, mtime, callback) { callback(enosys()); },
|
||||
};
|
||||
}
|
||||
|
||||
if (!globalThis.process) {
|
||||
globalThis.process = {
|
||||
getuid() { return -1; },
|
||||
getgid() { return -1; },
|
||||
geteuid() { return -1; },
|
||||
getegid() { return -1; },
|
||||
getgroups() { throw enosys(); },
|
||||
pid: -1,
|
||||
ppid: -1,
|
||||
umask() { throw enosys(); },
|
||||
cwd() { throw enosys(); },
|
||||
chdir() { throw enosys(); },
|
||||
}
|
||||
}
|
||||
|
||||
if (!globalThis.crypto) {
|
||||
throw new Error("globalThis.crypto is not available, polyfill required (crypto.getRandomValues only)");
|
||||
}
|
||||
|
||||
if (!globalThis.performance) {
|
||||
throw new Error("globalThis.performance is not available, polyfill required (performance.now only)");
|
||||
}
|
||||
|
||||
if (!globalThis.TextEncoder) {
|
||||
throw new Error("globalThis.TextEncoder is not available, polyfill required");
|
||||
}
|
||||
|
||||
if (!globalThis.TextDecoder) {
|
||||
throw new Error("globalThis.TextDecoder is not available, polyfill required");
|
||||
}
|
||||
|
||||
const encoder = new TextEncoder("utf-8");
|
||||
const decoder = new TextDecoder("utf-8");
|
||||
|
||||
globalThis.Go = class {
|
||||
constructor() {
|
||||
this.argv = ["js"];
|
||||
this.env = {};
|
||||
this.exit = (code) => {
|
||||
if (code !== 0) {
|
||||
console.warn("exit code:", code);
|
||||
}
|
||||
};
|
||||
this._exitPromise = new Promise((resolve) => {
|
||||
this._resolveExitPromise = resolve;
|
||||
});
|
||||
this._pendingEvent = null;
|
||||
this._scheduledTimeouts = new Map();
|
||||
this._nextCallbackTimeoutID = 1;
|
||||
|
||||
const setInt64 = (addr, v) => {
|
||||
this.mem.setUint32(addr + 0, v, true);
|
||||
this.mem.setUint32(addr + 4, Math.floor(v / 4294967296), true);
|
||||
}
|
||||
|
||||
const getInt64 = (addr) => {
|
||||
const low = this.mem.getUint32(addr + 0, true);
|
||||
const high = this.mem.getInt32(addr + 4, true);
|
||||
return low + high * 4294967296;
|
||||
}
|
||||
|
||||
const loadValue = (addr) => {
|
||||
const f = this.mem.getFloat64(addr, true);
|
||||
if (f === 0) {
|
||||
return undefined;
|
||||
}
|
||||
if (!isNaN(f)) {
|
||||
return f;
|
||||
}
|
||||
|
||||
const id = this.mem.getUint32(addr, true);
|
||||
return this._values[id];
|
||||
}
|
||||
|
||||
const storeValue = (addr, v) => {
|
||||
const nanHead = 0x7FF80000;
|
||||
|
||||
if (typeof v === "number" && v !== 0) {
|
||||
if (isNaN(v)) {
|
||||
this.mem.setUint32(addr + 4, nanHead, true);
|
||||
this.mem.setUint32(addr, 0, true);
|
||||
return;
|
||||
}
|
||||
this.mem.setFloat64(addr, v, true);
|
||||
return;
|
||||
}
|
||||
|
||||
if (v === undefined) {
|
||||
this.mem.setFloat64(addr, 0, true);
|
||||
return;
|
||||
}
|
||||
|
||||
let id = this._ids.get(v);
|
||||
if (id === undefined) {
|
||||
id = this._idPool.pop();
|
||||
if (id === undefined) {
|
||||
id = this._values.length;
|
||||
}
|
||||
this._values[id] = v;
|
||||
this._goRefCounts[id] = 0;
|
||||
this._ids.set(v, id);
|
||||
}
|
||||
this._goRefCounts[id]++;
|
||||
let typeFlag = 0;
|
||||
switch (typeof v) {
|
||||
case "object":
|
||||
if (v !== null) {
|
||||
typeFlag = 1;
|
||||
}
|
||||
break;
|
||||
case "string":
|
||||
typeFlag = 2;
|
||||
break;
|
||||
case "symbol":
|
||||
typeFlag = 3;
|
||||
break;
|
||||
case "function":
|
||||
typeFlag = 4;
|
||||
break;
|
||||
}
|
||||
this.mem.setUint32(addr + 4, nanHead | typeFlag, true);
|
||||
this.mem.setUint32(addr, id, true);
|
||||
}
|
||||
|
||||
const loadSlice = (addr) => {
|
||||
const array = getInt64(addr + 0);
|
||||
const len = getInt64(addr + 8);
|
||||
return new Uint8Array(this._inst.exports.mem.buffer, array, len);
|
||||
}
|
||||
|
||||
const loadSliceOfValues = (addr) => {
|
||||
const array = getInt64(addr + 0);
|
||||
const len = getInt64(addr + 8);
|
||||
const a = new Array(len);
|
||||
for (let i = 0; i < len; i++) {
|
||||
a[i] = loadValue(array + i * 8);
|
||||
}
|
||||
return a;
|
||||
}
|
||||
|
||||
const loadString = (addr) => {
|
||||
const saddr = getInt64(addr + 0);
|
||||
const len = getInt64(addr + 8);
|
||||
return decoder.decode(new DataView(this._inst.exports.mem.buffer, saddr, len));
|
||||
}
|
||||
|
||||
const timeOrigin = Date.now() - performance.now();
|
||||
this.importObject = {
|
||||
go: {
|
||||
// Go's SP does not change as long as no Go code is running. Some operations (e.g. calls, getters and setters)
|
||||
// may synchronously trigger a Go event handler. This makes Go code get executed in the middle of the imported
|
||||
// function. A goroutine can switch to a new stack if the current stack is too small (see morestack function).
|
||||
// This changes the SP, thus we have to update the SP used by the imported function.
|
||||
|
||||
// funcation wasmExit(code int32)
|
||||
"runtime.wasmExit": (sp) => {
|
||||
sp >>>= 0;
|
||||
const code = this.mem.getInt32(sp + 8, true);
|
||||
this.exited = true;
|
||||
delete this._inst;
|
||||
delete this._values;
|
||||
delete this._goRefCounts;
|
||||
delete this._ids;
|
||||
delete this._idPool;
|
||||
this.exit(code);
|
||||
},
|
||||
|
||||
// funcation wasmWrite(fd uintptr, p unsafe.Pointer, n int32)
|
||||
"runtime.wasmWrite": (sp) => {
|
||||
sp >>>= 0;
|
||||
const fd = getInt64(sp + 8);
|
||||
const p = getInt64(sp + 16);
|
||||
const n = this.mem.getInt32(sp + 24, true);
|
||||
fs.writeSync(fd, new Uint8Array(this._inst.exports.mem.buffer, p, n));
|
||||
},
|
||||
|
||||
// funcation resetMemoryDataView()
|
||||
"runtime.resetMemoryDataView": (sp) => {
|
||||
sp >>>= 0;
|
||||
this.mem = new DataView(this._inst.exports.mem.buffer);
|
||||
},
|
||||
|
||||
// funcation nanotime1() int64
|
||||
"runtime.nanotime1": (sp) => {
|
||||
sp >>>= 0;
|
||||
setInt64(sp + 8, (timeOrigin + performance.now()) * 1000000);
|
||||
},
|
||||
|
||||
// funcation walltime() (sec int64, nsec int32)
|
||||
"runtime.walltime": (sp) => {
|
||||
sp >>>= 0;
|
||||
const msec = (new Date).getTime();
|
||||
setInt64(sp + 8, msec / 1000);
|
||||
this.mem.setInt32(sp + 16, (msec % 1000) * 1000000, true);
|
||||
},
|
||||
|
||||
// funcation scheduleTimeoutEvent(delay int64) int32
|
||||
"runtime.scheduleTimeoutEvent": (sp) => {
|
||||
sp >>>= 0;
|
||||
const id = this._nextCallbackTimeoutID;
|
||||
this._nextCallbackTimeoutID++;
|
||||
this._scheduledTimeouts.set(id, setTimeout(
|
||||
() => {
|
||||
this._resume();
|
||||
while (this._scheduledTimeouts.has(id)) {
|
||||
// for some reason Go failed to register the timeout event, log and try again
|
||||
// (temporary workaround for https://github.com/golang/go/issues/28975)
|
||||
console.warn("scheduleTimeoutEvent: missed timeout event");
|
||||
this._resume();
|
||||
}
|
||||
},
|
||||
getInt64(sp + 8) + 1, // setTimeout has been seen to fire up to 1 millisecond early
|
||||
));
|
||||
this.mem.setInt32(sp + 16, id, true);
|
||||
},
|
||||
|
||||
// funcation clearTimeoutEvent(id int32)
|
||||
"runtime.clearTimeoutEvent": (sp) => {
|
||||
sp >>>= 0;
|
||||
const id = this.mem.getInt32(sp + 8, true);
|
||||
clearTimeout(this._scheduledTimeouts.get(id));
|
||||
this._scheduledTimeouts.delete(id);
|
||||
},
|
||||
|
||||
// funcation getRandomData(r []byte)
|
||||
"runtime.getRandomData": (sp) => {
|
||||
sp >>>= 0;
|
||||
crypto.getRandomValues(loadSlice(sp + 8));
|
||||
},
|
||||
|
||||
// funcation finalizeRef(v ref)
|
||||
"syscall/js.finalizeRef": (sp) => {
|
||||
sp >>>= 0;
|
||||
const id = this.mem.getUint32(sp + 8, true);
|
||||
this._goRefCounts[id]--;
|
||||
if (this._goRefCounts[id] === 0) {
|
||||
const v = this._values[id];
|
||||
this._values[id] = null;
|
||||
this._ids.delete(v);
|
||||
this._idPool.push(id);
|
||||
}
|
||||
},
|
||||
|
||||
// funcation stringVal(value string) ref
|
||||
"syscall/js.stringVal": (sp) => {
|
||||
sp >>>= 0;
|
||||
storeValue(sp + 24, loadString(sp + 8));
|
||||
},
|
||||
|
||||
// funcation valueGet(v ref, p string) ref
|
||||
"syscall/js.valueGet": (sp) => {
|
||||
sp >>>= 0;
|
||||
const result = Reflect.get(loadValue(sp + 8), loadString(sp + 16));
|
||||
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||
storeValue(sp + 32, result);
|
||||
},
|
||||
|
||||
// funcation valueSet(v ref, p string, x ref)
|
||||
"syscall/js.valueSet": (sp) => {
|
||||
sp >>>= 0;
|
||||
Reflect.set(loadValue(sp + 8), loadString(sp + 16), loadValue(sp + 32));
|
||||
},
|
||||
|
||||
// funcation valueDelete(v ref, p string)
|
||||
"syscall/js.valueDelete": (sp) => {
|
||||
sp >>>= 0;
|
||||
Reflect.deleteProperty(loadValue(sp + 8), loadString(sp + 16));
|
||||
},
|
||||
|
||||
// funcation valueIndex(v ref, i int) ref
|
||||
"syscall/js.valueIndex": (sp) => {
|
||||
sp >>>= 0;
|
||||
storeValue(sp + 24, Reflect.get(loadValue(sp + 8), getInt64(sp + 16)));
|
||||
},
|
||||
|
||||
// valueSetIndex(v ref, i int, x ref)
|
||||
"syscall/js.valueSetIndex": (sp) => {
|
||||
sp >>>= 0;
|
||||
Reflect.set(loadValue(sp + 8), getInt64(sp + 16), loadValue(sp + 24));
|
||||
},
|
||||
|
||||
// funcation valueCall(v ref, m string, args []ref) (ref, bool)
|
||||
"syscall/js.valueCall": (sp) => {
|
||||
sp >>>= 0;
|
||||
try {
|
||||
const v = loadValue(sp + 8);
|
||||
const m = Reflect.get(v, loadString(sp + 16));
|
||||
const args = loadSliceOfValues(sp + 32);
|
||||
const result = Reflect.apply(m, v, args);
|
||||
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||
storeValue(sp + 56, result);
|
||||
this.mem.setUint8(sp + 64, 1);
|
||||
} catch (err) {
|
||||
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||
storeValue(sp + 56, err);
|
||||
this.mem.setUint8(sp + 64, 0);
|
||||
}
|
||||
},
|
||||
|
||||
// funcation valueInvoke(v ref, args []ref) (ref, bool)
|
||||
"syscall/js.valueInvoke": (sp) => {
|
||||
sp >>>= 0;
|
||||
try {
|
||||
const v = loadValue(sp + 8);
|
||||
const args = loadSliceOfValues(sp + 16);
|
||||
const result = Reflect.apply(v, undefined, args);
|
||||
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||
storeValue(sp + 40, result);
|
||||
this.mem.setUint8(sp + 48, 1);
|
||||
} catch (err) {
|
||||
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||
storeValue(sp + 40, err);
|
||||
this.mem.setUint8(sp + 48, 0);
|
||||
}
|
||||
},
|
||||
|
||||
// funcation valueNew(v ref, args []ref) (ref, bool)
|
||||
"syscall/js.valueNew": (sp) => {
|
||||
sp >>>= 0;
|
||||
try {
|
||||
const v = loadValue(sp + 8);
|
||||
const args = loadSliceOfValues(sp + 16);
|
||||
const result = Reflect.construct(v, args);
|
||||
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||
storeValue(sp + 40, result);
|
||||
this.mem.setUint8(sp + 48, 1);
|
||||
} catch (err) {
|
||||
sp = this._inst.exports.getsp() >>> 0; // see comment above
|
||||
storeValue(sp + 40, err);
|
||||
this.mem.setUint8(sp + 48, 0);
|
||||
}
|
||||
},
|
||||
|
||||
// funcation valueLength(v ref) int
|
||||
"syscall/js.valueLength": (sp) => {
|
||||
sp >>>= 0;
|
||||
setInt64(sp + 16, parseInt(loadValue(sp + 8).length));
|
||||
},
|
||||
|
||||
// valuePrepareString(v ref) (ref, int)
|
||||
"syscall/js.valuePrepareString": (sp) => {
|
||||
sp >>>= 0;
|
||||
const str = encoder.encode(String(loadValue(sp + 8)));
|
||||
storeValue(sp + 16, str);
|
||||
setInt64(sp + 24, str.length);
|
||||
},
|
||||
|
||||
// valueLoadString(v ref, b []byte)
|
||||
"syscall/js.valueLoadString": (sp) => {
|
||||
sp >>>= 0;
|
||||
const str = loadValue(sp + 8);
|
||||
loadSlice(sp + 16).set(str);
|
||||
},
|
||||
|
||||
// funcation valueInstanceOf(v ref, t ref) bool
|
||||
"syscall/js.valueInstanceOf": (sp) => {
|
||||
sp >>>= 0;
|
||||
this.mem.setUint8(sp + 24, (loadValue(sp + 8) instanceof loadValue(sp + 16)) ? 1 : 0);
|
||||
},
|
||||
|
||||
// funcation copyBytesToGo(dst []byte, src ref) (int, bool)
|
||||
"syscall/js.copyBytesToGo": (sp) => {
|
||||
sp >>>= 0;
|
||||
const dst = loadSlice(sp + 8);
|
||||
const src = loadValue(sp + 32);
|
||||
if (!(src instanceof Uint8Array || src instanceof Uint8ClampedArray)) {
|
||||
this.mem.setUint8(sp + 48, 0);
|
||||
return;
|
||||
}
|
||||
const toCopy = src.subarray(0, dst.length);
|
||||
dst.set(toCopy);
|
||||
setInt64(sp + 40, toCopy.length);
|
||||
this.mem.setUint8(sp + 48, 1);
|
||||
},
|
||||
|
||||
// funcation copyBytesToJS(dst ref, src []byte) (int, bool)
|
||||
"syscall/js.copyBytesToJS": (sp) => {
|
||||
sp >>>= 0;
|
||||
const dst = loadValue(sp + 8);
|
||||
const src = loadSlice(sp + 16);
|
||||
if (!(dst instanceof Uint8Array || dst instanceof Uint8ClampedArray)) {
|
||||
this.mem.setUint8(sp + 48, 0);
|
||||
return;
|
||||
}
|
||||
const toCopy = src.subarray(0, dst.length);
|
||||
dst.set(toCopy);
|
||||
setInt64(sp + 40, toCopy.length);
|
||||
this.mem.setUint8(sp + 48, 1);
|
||||
},
|
||||
|
||||
"debug": (value) => {
|
||||
console.log(value);
|
||||
},
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
async run(instance) {
|
||||
if (!(instance instanceof WebAssembly.Instance)) {
|
||||
throw new Error("Go.run: WebAssembly.Instance expected");
|
||||
}
|
||||
this._inst = instance;
|
||||
this.mem = new DataView(this._inst.exports.mem.buffer);
|
||||
this._values = [ // JS values that Go currently has references to, indexed by reference id
|
||||
NaN,
|
||||
0,
|
||||
null,
|
||||
true,
|
||||
false,
|
||||
globalThis,
|
||||
this,
|
||||
];
|
||||
this._goRefCounts = new Array(this._values.length).fill(Infinity); // number of references that Go has to a JS value, indexed by reference id
|
||||
this._ids = new Map([ // mapping from JS values to reference ids
|
||||
[0, 1],
|
||||
[null, 2],
|
||||
[true, 3],
|
||||
[false, 4],
|
||||
[globalThis, 5],
|
||||
[this, 6],
|
||||
]);
|
||||
this._idPool = []; // unused ids that have been garbage collected
|
||||
this.exited = false; // whether the Go program has exited
|
||||
|
||||
// Pass command line arguments and environment variables to WebAssembly by writing them to the linear memory.
|
||||
let offset = 4096;
|
||||
|
||||
const strPtr = (str) => {
|
||||
const ptr = offset;
|
||||
const bytes = encoder.encode(str + "\0");
|
||||
new Uint8Array(this.mem.buffer, offset, bytes.length).set(bytes);
|
||||
offset += bytes.length;
|
||||
if (offset % 8 !== 0) {
|
||||
offset += 8 - (offset % 8);
|
||||
}
|
||||
return ptr;
|
||||
};
|
||||
|
||||
const argc = this.argv.length;
|
||||
|
||||
const argvPtrs = [];
|
||||
this.argv.forEach((arg) => {
|
||||
argvPtrs.push(strPtr(arg));
|
||||
});
|
||||
argvPtrs.push(0);
|
||||
|
||||
const keys = Object.keys(this.env).sort();
|
||||
keys.forEach((key) => {
|
||||
argvPtrs.push(strPtr(`${key}=${this.env[key]}`));
|
||||
});
|
||||
argvPtrs.push(0);
|
||||
|
||||
const argv = offset;
|
||||
argvPtrs.forEach((ptr) => {
|
||||
this.mem.setUint32(offset, ptr, true);
|
||||
this.mem.setUint32(offset + 4, 0, true);
|
||||
offset += 8;
|
||||
});
|
||||
|
||||
// The linker guarantees global data starts from at least wasmMinDataAddr.
|
||||
// Keep in sync with cmd/link/internal/ld/data.go:wasmMinDataAddr.
|
||||
const wasmMinDataAddr = 4096 + 8192;
|
||||
if (offset >= wasmMinDataAddr) {
|
||||
throw new Error("total length of command line and environment variables exceeds limit");
|
||||
}
|
||||
|
||||
this._inst.exports.run(argc, argv);
|
||||
if (this.exited) {
|
||||
this._resolveExitPromise();
|
||||
}
|
||||
await this._exitPromise;
|
||||
}
|
||||
|
||||
_resume() {
|
||||
if (this.exited) {
|
||||
throw new Error("Go program has already exited");
|
||||
}
|
||||
this._inst.exports.resume();
|
||||
if (this.exited) {
|
||||
this._resolveExitPromise();
|
||||
}
|
||||
}
|
||||
|
||||
_makeFuncWrapper(id) {
|
||||
const go = this;
|
||||
return function () {
|
||||
const event = { id: id, this: this, args: arguments };
|
||||
go._pendingEvent = event;
|
||||
go._resume();
|
||||
return event.result;
|
||||
};
|
||||
}
|
||||
}
|
||||
})();
|
||||
144
go/chao-sdk-core/wasm/event_listener/callback_writer.go
Normal file
144
go/chao-sdk-core/wasm/event_listener/callback_writer.go
Normal file
@@ -0,0 +1,144 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package event_listener
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
type CallbackWriter interface {
|
||||
SendMessage()
|
||||
SetEvent(event string) CallbackWriter
|
||||
SetData(data interface{}) CallbackWriter
|
||||
SetErrCode(errCode int32) CallbackWriter
|
||||
SetOperationID(operationID string) CallbackWriter
|
||||
SetErrMsg(errMsg string) CallbackWriter
|
||||
GetOperationID() string
|
||||
HandlerFunc(fn FuncLogic) interface{}
|
||||
}
|
||||
|
||||
type EventData struct {
|
||||
Event string `json:"event"`
|
||||
ErrCode int32 `json:"errCode"`
|
||||
ErrMsg string `json:"errMsg"`
|
||||
Data interface{} `json:"data,omitempty"`
|
||||
OperationID string `json:"operationID"`
|
||||
callback *js.Value
|
||||
}
|
||||
|
||||
func (e *EventData) HandlerFunc(fn FuncLogic) interface{} {
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
func (e *EventData) GetOperationID() string {
|
||||
return e.OperationID
|
||||
}
|
||||
|
||||
func NewEventData(callback *js.Value) *EventData {
|
||||
return &EventData{callback: callback}
|
||||
}
|
||||
func (e *EventData) SendMessage() {
|
||||
e.callback.Invoke(utils.StructToJsonString(e))
|
||||
}
|
||||
func (e *EventData) SetEvent(event string) CallbackWriter {
|
||||
e.Event = event
|
||||
return e
|
||||
}
|
||||
|
||||
func (e *EventData) SetData(data interface{}) CallbackWriter {
|
||||
e.Data = data
|
||||
return e
|
||||
}
|
||||
func (e *EventData) SetErrCode(errCode int32) CallbackWriter {
|
||||
e.ErrCode = errCode
|
||||
return e
|
||||
}
|
||||
func (e *EventData) SetOperationID(operationID string) CallbackWriter {
|
||||
e.OperationID = operationID
|
||||
return e
|
||||
}
|
||||
func (e *EventData) SetErrMsg(errMsg string) CallbackWriter {
|
||||
e.ErrMsg = errMsg
|
||||
return e
|
||||
}
|
||||
|
||||
var (
|
||||
jsErr = js.Global().Get("Error")
|
||||
jsPromise = js.Global().Get("Promise")
|
||||
)
|
||||
|
||||
type PromiseHandler struct {
|
||||
Event string `json:"event"`
|
||||
ErrCode int32 `json:"errCode"`
|
||||
ErrMsg string `json:"errMsg"`
|
||||
Data interface{} `json:"data,omitempty"`
|
||||
OperationID string `json:"operationID"`
|
||||
resolve *js.Value
|
||||
reject *js.Value
|
||||
}
|
||||
|
||||
func NewPromiseHandler() *PromiseHandler {
|
||||
return &PromiseHandler{}
|
||||
}
|
||||
func (p *PromiseHandler) HandlerFunc(fn FuncLogic) interface{} {
|
||||
handler := js.FuncOf(func(_ js.Value, promFn []js.Value) interface{} {
|
||||
p.resolve, p.reject = &promFn[0], &promFn[1]
|
||||
fn()
|
||||
return nil
|
||||
})
|
||||
return jsPromise.New(handler)
|
||||
}
|
||||
|
||||
func (p *PromiseHandler) GetOperationID() string {
|
||||
return p.OperationID
|
||||
}
|
||||
|
||||
func (p *PromiseHandler) SendMessage() {
|
||||
if p.Data != nil {
|
||||
p.resolve.Invoke(p.Data)
|
||||
} else {
|
||||
//p.reject.Invoke(jsErr.New(fmt.Sprintf("erCode:%d,errMsg:%s,operationID:%s", p.ErrCode, p.ErrMsg, p.OperationID)))
|
||||
errInfo := make(map[string]interface{})
|
||||
errInfo["errCode"] = p.ErrCode
|
||||
errInfo["errMsg"] = p.ErrMsg
|
||||
errInfo["operationID"] = p.OperationID
|
||||
p.reject.Invoke(errInfo)
|
||||
}
|
||||
}
|
||||
func (p *PromiseHandler) SetEvent(event string) CallbackWriter {
|
||||
p.Event = event
|
||||
return p
|
||||
}
|
||||
|
||||
func (p *PromiseHandler) SetData(data interface{}) CallbackWriter {
|
||||
p.Data = data
|
||||
return p
|
||||
}
|
||||
func (p *PromiseHandler) SetErrCode(errCode int32) CallbackWriter {
|
||||
p.ErrCode = errCode
|
||||
return p
|
||||
}
|
||||
func (p *PromiseHandler) SetOperationID(operationID string) CallbackWriter {
|
||||
p.OperationID = operationID
|
||||
return p
|
||||
}
|
||||
func (p *PromiseHandler) SetErrMsg(errMsg string) CallbackWriter {
|
||||
p.ErrMsg = errMsg
|
||||
return p
|
||||
}
|
||||
294
go/chao-sdk-core/wasm/event_listener/caller.go
Normal file
294
go/chao-sdk-core/wasm/event_listener/caller.go
Normal file
@@ -0,0 +1,294 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package event_listener
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"errors"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
"github.com/openimsdk/tools/log"
|
||||
"reflect"
|
||||
"strconv"
|
||||
"strings"
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
type Caller interface {
|
||||
// AsyncCallWithCallback has promise object return
|
||||
AsyncCallWithCallback() interface{}
|
||||
// AsyncCallWithOutCallback has promise object return
|
||||
AsyncCallWithOutCallback() interface{}
|
||||
// SyncCall has not promise
|
||||
SyncCall() (result []interface{})
|
||||
}
|
||||
|
||||
type FuncLogic func()
|
||||
|
||||
var ErrNotSetCallback = errors.New("not set callback to call")
|
||||
var ErrNotSetFunc = errors.New("not set funcation to call")
|
||||
|
||||
type ReflectCall struct {
|
||||
funcName interface{}
|
||||
callback CallbackWriter
|
||||
arguments []js.Value
|
||||
}
|
||||
|
||||
func NewCaller(funcName interface{}, callback CallbackWriter, arguments *[]js.Value) Caller {
|
||||
return &ReflectCall{funcName: funcName, callback: callback, arguments: *arguments}
|
||||
}
|
||||
|
||||
func (r *ReflectCall) AsyncCallWithCallback() interface{} {
|
||||
return r.callback.HandlerFunc(r.asyncCallWithCallback)
|
||||
|
||||
}
|
||||
func (r *ReflectCall) asyncCallWithCallback() {
|
||||
defer func() {
|
||||
if rc := recover(); rc != nil {
|
||||
r.ErrHandle(rc)
|
||||
}
|
||||
}()
|
||||
ctx := context.Background()
|
||||
var funcName reflect.Value
|
||||
var typeFuncName reflect.Type
|
||||
var hasCallback bool
|
||||
var temp int
|
||||
if r.funcName == nil {
|
||||
panic(ErrNotSetFunc)
|
||||
} else {
|
||||
funcName = reflect.ValueOf(r.funcName)
|
||||
typeFuncName = reflect.TypeOf(r.funcName)
|
||||
}
|
||||
var values []reflect.Value
|
||||
if r.callback != nil {
|
||||
hasCallback = true
|
||||
r.callback.SetOperationID(r.arguments[0].String())
|
||||
values = append(values, reflect.ValueOf(r.callback))
|
||||
} else {
|
||||
log.ZDebug(ctx, "AsyncCallWithCallback not set callback")
|
||||
panic(ErrNotSetCallback)
|
||||
}
|
||||
funcFieldsNum := typeFuncName.NumIn()
|
||||
if funcFieldsNum-len(r.arguments) > 1 {
|
||||
r.arguments = append(r.arguments, js.Value{})
|
||||
}
|
||||
for i := 0; i < len(r.arguments); i++ {
|
||||
if hasCallback {
|
||||
temp++
|
||||
} else {
|
||||
temp = i
|
||||
}
|
||||
//log.NewDebug(r.callback.GetOperationID(), "type is ", typeFuncName.In(temp).Kind(), r.arguments[i].IsNaN())
|
||||
switch typeFuncName.In(temp).Kind() {
|
||||
case reflect.String:
|
||||
convertValue := r.arguments[i].String()
|
||||
if !strings.HasPrefix(convertValue, "<number: ") {
|
||||
values = append(values, reflect.ValueOf(convertValue))
|
||||
} else {
|
||||
log.ZError(ctx, "AsyncCallWithCallback", nil, "input args type err index:",
|
||||
utils.IntToString(i))
|
||||
panic("input args type err index:" + utils.IntToString(i))
|
||||
}
|
||||
case reflect.Int:
|
||||
values = append(values, reflect.ValueOf(r.arguments[i].Int()))
|
||||
case reflect.Int32:
|
||||
values = append(values, reflect.ValueOf(int32(r.arguments[i].Int())))
|
||||
case reflect.Bool:
|
||||
values = append(values, reflect.ValueOf(r.arguments[i].Bool()))
|
||||
case reflect.Int64:
|
||||
values = append(values, reflect.ValueOf(int64(r.arguments[i].Int())))
|
||||
case reflect.Ptr:
|
||||
values = append(values, reflect.ValueOf(bytes.NewBuffer(exec.ExtractArrayBuffer(r.arguments[i]))))
|
||||
default:
|
||||
log.ZError(ctx, "AsyncCallWithCallback", nil,
|
||||
"input args type not support:", strconv.Itoa(int(typeFuncName.In(temp).Kind())))
|
||||
panic("input args type not support:" + strconv.Itoa(int(typeFuncName.In(temp).Kind())))
|
||||
}
|
||||
}
|
||||
funcName.Call(values)
|
||||
|
||||
}
|
||||
func (r *ReflectCall) AsyncCallWithOutCallback() interface{} {
|
||||
if r.callback == nil {
|
||||
r.callback = NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), nil)
|
||||
}
|
||||
return r.callback.HandlerFunc(r.asyncCallWithOutCallback)
|
||||
}
|
||||
func (r *ReflectCall) asyncCallWithOutCallback() {
|
||||
defer func() {
|
||||
if rc := recover(); rc != nil {
|
||||
r.ErrHandle(rc)
|
||||
}
|
||||
}()
|
||||
ctx := context.Background()
|
||||
var funcName reflect.Value
|
||||
var typeFuncName reflect.Type
|
||||
if r.funcName == nil {
|
||||
panic(ErrNotSetFunc)
|
||||
} else {
|
||||
funcName = reflect.ValueOf(r.funcName)
|
||||
typeFuncName = reflect.TypeOf(r.funcName)
|
||||
}
|
||||
var values []reflect.Value
|
||||
if r.callback == nil {
|
||||
r.callback = NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), nil)
|
||||
}
|
||||
log.ZError(ctx, "test", nil, "asyncCallWithOutCallback", len(r.arguments))
|
||||
r.callback.SetOperationID(r.arguments[0].String())
|
||||
//strings.SplitAfter()
|
||||
for i := 0; i < len(r.arguments); i++ {
|
||||
//log.NewDebug(r.callback.GetOperationID(), "type is ", typeFuncName.In(temp).Kind(), r.arguments[i].IsNaN())
|
||||
switch typeFuncName.In(i).Kind() {
|
||||
case reflect.String:
|
||||
convertValue := r.arguments[i].String()
|
||||
if !strings.HasPrefix(convertValue, "<number: ") {
|
||||
values = append(values, reflect.ValueOf(convertValue))
|
||||
} else {
|
||||
panic("input args type err index:" + utils.IntToString(i))
|
||||
}
|
||||
case reflect.Int:
|
||||
values = append(values, reflect.ValueOf(r.arguments[i].Int()))
|
||||
case reflect.Int32:
|
||||
values = append(values, reflect.ValueOf(int32(r.arguments[i].Int())))
|
||||
case reflect.Bool:
|
||||
values = append(values, reflect.ValueOf(r.arguments[i].Bool()))
|
||||
case reflect.Float64:
|
||||
values = append(values, reflect.ValueOf(r.arguments[i].Float()))
|
||||
default:
|
||||
panic("input args type not support:" + strconv.Itoa(int(typeFuncName.In(i).Kind())))
|
||||
}
|
||||
}
|
||||
go func() {
|
||||
|
||||
returnValues := funcName.Call(values)
|
||||
if len(returnValues) != 0 {
|
||||
var result []interface{}
|
||||
for _, v := range returnValues {
|
||||
switch v.Kind() {
|
||||
case reflect.String:
|
||||
result = append(result, v.String())
|
||||
case reflect.Bool:
|
||||
result = append(result, v.Bool())
|
||||
case reflect.Int32:
|
||||
result = append(result, v.Int())
|
||||
case reflect.Int:
|
||||
result = append(result, v.Int())
|
||||
default:
|
||||
panic("not support type")
|
||||
}
|
||||
}
|
||||
r.callback.SetData(result).SendMessage()
|
||||
} else {
|
||||
r.callback.SetErrCode(200).SetErrMsg(errors.New("null string").Error()).SendMessage()
|
||||
}
|
||||
}()
|
||||
|
||||
}
|
||||
func (r *ReflectCall) SyncCall() (result []interface{}) {
|
||||
defer func() {
|
||||
if rc := recover(); rc != nil {
|
||||
temp := r.ErrHandle(rc)
|
||||
for _, v := range temp {
|
||||
result = append(result, v)
|
||||
}
|
||||
}
|
||||
}()
|
||||
var funcName reflect.Value
|
||||
var typeFuncName reflect.Type
|
||||
var hasCallback bool
|
||||
var temp int
|
||||
if r.funcName == nil {
|
||||
return nil
|
||||
} else {
|
||||
funcName = reflect.ValueOf(r.funcName)
|
||||
typeFuncName = reflect.TypeOf(r.funcName)
|
||||
}
|
||||
var values []reflect.Value
|
||||
if r.callback != nil {
|
||||
hasCallback = true
|
||||
r.callback.SetOperationID(r.arguments[0].String())
|
||||
values = append(values, reflect.ValueOf(r.callback))
|
||||
}
|
||||
for i := 0; i < len(r.arguments); i++ {
|
||||
if hasCallback {
|
||||
temp++
|
||||
} else {
|
||||
temp = i
|
||||
}
|
||||
//log.NewDebug(r.callback.GetOperationID(), "type is ", typeFuncName.In(temp).Kind(), r.arguments[i].IsNaN())
|
||||
switch typeFuncName.In(temp).Kind() {
|
||||
case reflect.String:
|
||||
convertValue := r.arguments[i].String()
|
||||
if !strings.HasPrefix(convertValue, "<number: ") {
|
||||
values = append(values, reflect.ValueOf(convertValue))
|
||||
} else {
|
||||
panic("input args type err index:" + utils.IntToString(i))
|
||||
}
|
||||
case reflect.Int:
|
||||
values = append(values, reflect.ValueOf(r.arguments[i].Int()))
|
||||
case reflect.Int32:
|
||||
values = append(values, reflect.ValueOf(int32(r.arguments[i].Int())))
|
||||
case reflect.Bool:
|
||||
values = append(values, reflect.ValueOf(r.arguments[i].Bool()))
|
||||
default:
|
||||
panic("implement me")
|
||||
}
|
||||
}
|
||||
returnValues := funcName.Call(values)
|
||||
if len(returnValues) != 0 {
|
||||
for _, v := range returnValues {
|
||||
switch v.Kind() {
|
||||
case reflect.String:
|
||||
result = append(result, v.String())
|
||||
case reflect.Bool:
|
||||
result = append(result, v.Bool())
|
||||
default:
|
||||
panic("not support type")
|
||||
}
|
||||
}
|
||||
return result
|
||||
|
||||
} else {
|
||||
return nil
|
||||
}
|
||||
|
||||
}
|
||||
func (r *ReflectCall) ErrHandle(recover interface{}) []string {
|
||||
ctx := context.Background()
|
||||
var temp string
|
||||
switch x := recover.(type) {
|
||||
case string:
|
||||
log.ZError(ctx, "STRINGERR", nil, "r", x)
|
||||
temp = utils.Wrap(errors.New(x), "").Error()
|
||||
case error:
|
||||
//buf := make([]byte, 1<<20)
|
||||
//runtime.Stack(buf, true)
|
||||
log.ZError(ctx, "ERR", x, "r", x.Error())
|
||||
temp = x.Error()
|
||||
default:
|
||||
log.ZError(ctx, "unknown panic", nil, "r", x)
|
||||
temp = utils.Wrap(errors.New("unknown panic"), "").Error()
|
||||
}
|
||||
if r.callback != nil {
|
||||
r.callback.SetErrCode(100).SetErrMsg(temp).SendMessage()
|
||||
return []string{}
|
||||
} else {
|
||||
return []string{temp}
|
||||
}
|
||||
}
|
||||
485
go/chao-sdk-core/wasm/event_listener/listener.go
Normal file
485
go/chao-sdk-core/wasm/event_listener/listener.go
Normal file
@@ -0,0 +1,485 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package event_listener
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/internal/file"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/open_im_sdk_callback"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/sdk_struct"
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
type ConnCallback struct {
|
||||
uid string
|
||||
CallbackWriter
|
||||
}
|
||||
|
||||
func NewConnCallback(funcName string, callback *js.Value) *ConnCallback {
|
||||
return &ConnCallback{CallbackWriter: NewEventData(callback).SetEvent(funcName)}
|
||||
}
|
||||
|
||||
func (i *ConnCallback) OnConnecting() {
|
||||
i.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SendMessage()
|
||||
}
|
||||
|
||||
func (i *ConnCallback) OnConnectSuccess() {
|
||||
i.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SendMessage()
|
||||
|
||||
}
|
||||
func (i *ConnCallback) OnConnectFailed(errCode int32, errMsg string) {
|
||||
i.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetErrCode(errCode).SetErrMsg(errMsg).SendMessage()
|
||||
}
|
||||
|
||||
func (i *ConnCallback) OnKickedOffline() {
|
||||
i.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SendMessage()
|
||||
}
|
||||
|
||||
func (i *ConnCallback) OnUserTokenExpired() {
|
||||
i.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SendMessage()
|
||||
}
|
||||
|
||||
func (i *ConnCallback) OnUserTokenInvalid(errMsg string) {
|
||||
i.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(errMsg).SendMessage()
|
||||
}
|
||||
func (i *ConnCallback) OnUserCommandAdd(userInfo string) {
|
||||
i.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(userInfo).SendMessage()
|
||||
}
|
||||
func (i *ConnCallback) OnUserCommandDelete(userInfo string) {
|
||||
i.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(userInfo).SendMessage()
|
||||
}
|
||||
func (i *ConnCallback) OnUserCommandUpdate(userInfo string) {
|
||||
i.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(userInfo).SendMessage()
|
||||
}
|
||||
|
||||
type ConversationCallback struct {
|
||||
uid string
|
||||
CallbackWriter
|
||||
}
|
||||
|
||||
func NewConversationCallback(callback *js.Value) *ConversationCallback {
|
||||
return &ConversationCallback{CallbackWriter: NewEventData(callback)}
|
||||
}
|
||||
func (c ConversationCallback) OnSyncServerStart() {
|
||||
c.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SendMessage()
|
||||
}
|
||||
|
||||
func (c ConversationCallback) OnSyncServerFinish() {
|
||||
c.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SendMessage()
|
||||
}
|
||||
|
||||
func (c ConversationCallback) OnSyncServerFailed() {
|
||||
c.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SendMessage()
|
||||
|
||||
}
|
||||
|
||||
func (c ConversationCallback) OnNewConversation(conversationList string) {
|
||||
c.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(conversationList).SendMessage()
|
||||
|
||||
}
|
||||
|
||||
func (c ConversationCallback) OnConversationChanged(conversationList string) {
|
||||
c.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(conversationList).SendMessage()
|
||||
|
||||
}
|
||||
|
||||
func (c ConversationCallback) OnTotalUnreadMessageCountChanged(totalUnreadCount int32) {
|
||||
c.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(totalUnreadCount).SendMessage()
|
||||
}
|
||||
|
||||
func (c ConversationCallback) OnConversationUserInputStatusChanged(change string) {
|
||||
c.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(change).SendMessage()
|
||||
}
|
||||
|
||||
type AdvancedMsgCallback struct {
|
||||
CallbackWriter
|
||||
}
|
||||
|
||||
func NewAdvancedMsgCallback(callback *js.Value) *AdvancedMsgCallback {
|
||||
return &AdvancedMsgCallback{CallbackWriter: NewEventData(callback)}
|
||||
}
|
||||
func (a AdvancedMsgCallback) OnRecvNewMessage(message string) {
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(message).SendMessage()
|
||||
}
|
||||
|
||||
func (a AdvancedMsgCallback) OnRecvC2CReadReceipt(msgReceiptList string) {
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(msgReceiptList).SendMessage()
|
||||
}
|
||||
|
||||
func (a AdvancedMsgCallback) OnRecvGroupReadReceipt(groupMsgReceiptList string) {
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupMsgReceiptList).SendMessage()
|
||||
}
|
||||
|
||||
func (a AdvancedMsgCallback) OnRecvMessageRevoked(msgID string) {
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(msgID).SendMessage()
|
||||
}
|
||||
|
||||
func (a AdvancedMsgCallback) OnNewRecvMessageRevoked(messageRevoked string) {
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(messageRevoked).SendMessage()
|
||||
}
|
||||
func (a AdvancedMsgCallback) OnRecvMessageModified(message string) {
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(message).SendMessage()
|
||||
}
|
||||
func (a AdvancedMsgCallback) OnRecvMessageExtensionsChanged(clientMsgID string, reactionExtensionList string) {
|
||||
m := make(map[string]interface{})
|
||||
m["clientMsgID"] = clientMsgID
|
||||
m["reactionExtensionList"] = reactionExtensionList
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(m)).SendMessage()
|
||||
}
|
||||
|
||||
func (a AdvancedMsgCallback) OnRecvMessageExtensionsDeleted(clientMsgID string, reactionExtensionKeyList string) {
|
||||
m := make(map[string]interface{})
|
||||
m["clientMsgID"] = clientMsgID
|
||||
m["reactionExtensionKeyList"] = reactionExtensionKeyList
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(m)).SendMessage()
|
||||
}
|
||||
func (a AdvancedMsgCallback) OnRecvMessageExtensionsAdded(clientMsgID string, reactionExtensionList string) {
|
||||
m := make(map[string]interface{})
|
||||
m["clientMsgID"] = clientMsgID
|
||||
m["reactionExtensionList"] = reactionExtensionList
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(m)).SendMessage()
|
||||
}
|
||||
func (a AdvancedMsgCallback) OnRecvOfflineNewMessage(message string) {
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(message).SendMessage()
|
||||
}
|
||||
|
||||
func (a AdvancedMsgCallback) OnMsgDeleted(message string) {
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(message).SendMessage()
|
||||
}
|
||||
|
||||
func (a AdvancedMsgCallback) OnRecvOnlineOnlyMessage(message string) {
|
||||
a.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(message).SendMessage()
|
||||
}
|
||||
|
||||
type BaseCallback struct {
|
||||
CallbackWriter
|
||||
}
|
||||
|
||||
func (b *BaseCallback) EventData() CallbackWriter {
|
||||
return b.CallbackWriter
|
||||
}
|
||||
|
||||
func NewBaseCallback(funcName string, _ *js.Value) *BaseCallback {
|
||||
return &BaseCallback{CallbackWriter: NewPromiseHandler().SetEvent(funcName)}
|
||||
}
|
||||
|
||||
func (b *BaseCallback) OnError(errCode int32, errMsg string) {
|
||||
b.CallbackWriter.SetErrCode(errCode).SetErrMsg(errMsg).SendMessage()
|
||||
}
|
||||
func (b *BaseCallback) OnSuccess(data string) {
|
||||
b.CallbackWriter.SetData(data).SendMessage()
|
||||
}
|
||||
|
||||
type SendMessageCallback struct {
|
||||
BaseCallback
|
||||
globalEvent CallbackWriter
|
||||
clientMsgID string
|
||||
}
|
||||
|
||||
func (s *SendMessageCallback) SetClientMsgID(args *[]js.Value) *SendMessageCallback {
|
||||
m := sdk_struct.MsgStruct{}
|
||||
utils.JsonStringToStruct((*args)[1].String(), &m)
|
||||
s.clientMsgID = m.ClientMsgID
|
||||
return s
|
||||
}
|
||||
func NewSendMessageCallback(funcName string, callback *js.Value) *SendMessageCallback {
|
||||
return &SendMessageCallback{BaseCallback: BaseCallback{CallbackWriter: NewPromiseHandler().SetEvent(funcName)}, globalEvent: NewEventData(callback).SetEvent(funcName)}
|
||||
}
|
||||
|
||||
func (s *SendMessageCallback) OnProgress(progress int) {
|
||||
mReply := make(map[string]interface{})
|
||||
mReply["progress"] = progress
|
||||
mReply["clientMsgID"] = s.clientMsgID
|
||||
s.globalEvent.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(mReply)).SendMessage()
|
||||
}
|
||||
|
||||
type UploadInterface interface {
|
||||
open_im_sdk_callback.Base
|
||||
open_im_sdk_callback.UploadFileCallback
|
||||
}
|
||||
|
||||
var _ UploadInterface = (*UploadFileCallback)(nil)
|
||||
|
||||
type UploadFileCallback struct {
|
||||
BaseCallback
|
||||
globalEvent CallbackWriter
|
||||
Uuid string
|
||||
}
|
||||
|
||||
func NewUploadFileCallback(funcName string, callback *js.Value) *UploadFileCallback {
|
||||
return &UploadFileCallback{BaseCallback: BaseCallback{CallbackWriter: NewPromiseHandler().SetEvent(funcName)}, globalEvent: NewEventData(callback).SetEvent(funcName)}
|
||||
}
|
||||
func (u *UploadFileCallback) SetUuid(args *[]js.Value) *UploadFileCallback {
|
||||
f := file.UploadFileReq{}
|
||||
utils.JsonStringToStruct((*args)[1].String(), &f)
|
||||
u.Uuid = f.Uuid
|
||||
return u
|
||||
}
|
||||
func (u *UploadFileCallback) Open(size int64) {
|
||||
mReply := make(map[string]interface{})
|
||||
mReply["size"] = size
|
||||
mReply["uuid"] = u.Uuid
|
||||
u.globalEvent.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(mReply)).SendMessage()
|
||||
}
|
||||
|
||||
func (u *UploadFileCallback) PartSize(partSize int64, num int) {
|
||||
mReply := make(map[string]interface{})
|
||||
mReply["partSize"] = partSize
|
||||
mReply["num"] = num
|
||||
mReply["uuid"] = u.Uuid
|
||||
u.globalEvent.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(mReply)).SendMessage()
|
||||
}
|
||||
|
||||
func (u *UploadFileCallback) HashPartProgress(index int, size int64, partHash string) {
|
||||
mReply := make(map[string]interface{})
|
||||
mReply["index"] = index
|
||||
mReply["size"] = size
|
||||
mReply["partHash"] = partHash
|
||||
mReply["uuid"] = u.Uuid
|
||||
u.globalEvent.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(mReply)).SendMessage()
|
||||
}
|
||||
|
||||
func (u *UploadFileCallback) HashPartComplete(partsHash string, fileHash string) {
|
||||
mReply := make(map[string]interface{})
|
||||
mReply["partsHash"] = partsHash
|
||||
mReply["fileHash"] = fileHash
|
||||
mReply["uuid"] = u.Uuid
|
||||
u.globalEvent.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(mReply)).SendMessage()
|
||||
}
|
||||
|
||||
func (u *UploadFileCallback) UploadID(uploadID string) {
|
||||
mReply := make(map[string]interface{})
|
||||
mReply["uploadID"] = uploadID
|
||||
mReply["uuid"] = u.Uuid
|
||||
u.globalEvent.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(mReply)).SendMessage()
|
||||
}
|
||||
|
||||
func (u *UploadFileCallback) UploadPartComplete(index int, partSize int64, partHash string) {
|
||||
mReply := make(map[string]interface{})
|
||||
mReply["index"] = index
|
||||
mReply["partSize"] = partSize
|
||||
mReply["partHash"] = partHash
|
||||
mReply["uuid"] = u.Uuid
|
||||
u.globalEvent.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(mReply)).SendMessage()
|
||||
}
|
||||
|
||||
func (u *UploadFileCallback) UploadComplete(fileSize int64, streamSize int64, storageSize int64) {
|
||||
mReply := make(map[string]interface{})
|
||||
mReply["fileSize"] = fileSize
|
||||
mReply["streamSize"] = streamSize
|
||||
mReply["storageSize"] = storageSize
|
||||
mReply["uuid"] = u.Uuid
|
||||
u.globalEvent.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(mReply)).SendMessage()
|
||||
}
|
||||
|
||||
func (u *UploadFileCallback) Complete(size int64, url string, typ int) {
|
||||
mReply := make(map[string]interface{})
|
||||
mReply["size"] = size
|
||||
mReply["url"] = url
|
||||
mReply["typ"] = typ
|
||||
mReply["uuid"] = u.Uuid
|
||||
u.globalEvent.SetEvent(utils.GetSelfFuncName()).SetData(utils.StructToJsonString(mReply)).SendMessage()
|
||||
}
|
||||
|
||||
type BatchMessageCallback struct {
|
||||
CallbackWriter
|
||||
}
|
||||
|
||||
func NewBatchMessageCallback(callback *js.Value) *BatchMessageCallback {
|
||||
return &BatchMessageCallback{CallbackWriter: NewEventData(callback)}
|
||||
}
|
||||
|
||||
func (b *BatchMessageCallback) OnRecvNewMessages(messageList string) {
|
||||
b.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(messageList).SendMessage()
|
||||
}
|
||||
func (b *BatchMessageCallback) OnRecvOfflineNewMessages(messageList string) {
|
||||
b.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(messageList).SendMessage()
|
||||
}
|
||||
|
||||
type FriendCallback struct {
|
||||
CallbackWriter
|
||||
}
|
||||
|
||||
func NewFriendCallback(callback *js.Value) *FriendCallback {
|
||||
return &FriendCallback{CallbackWriter: NewEventData(callback)}
|
||||
}
|
||||
|
||||
func (f *FriendCallback) OnFriendApplicationAdded(friendApplication string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(friendApplication).SendMessage()
|
||||
}
|
||||
|
||||
func (f *FriendCallback) OnFriendApplicationDeleted(friendApplication string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(friendApplication).SendMessage()
|
||||
}
|
||||
|
||||
func (f *FriendCallback) OnFriendApplicationAccepted(groupApplication string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupApplication).SendMessage()
|
||||
|
||||
}
|
||||
func (f *FriendCallback) OnFriendApplicationRejected(friendApplication string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(friendApplication).SendMessage()
|
||||
}
|
||||
|
||||
func (f *FriendCallback) OnFriendAdded(friendInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(friendInfo).SendMessage()
|
||||
}
|
||||
|
||||
func (f *FriendCallback) OnFriendDeleted(friendInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(friendInfo).SendMessage()
|
||||
}
|
||||
func (f *FriendCallback) OnFriendInfoChanged(friendInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(friendInfo).SendMessage()
|
||||
}
|
||||
func (f *FriendCallback) OnBlackAdded(blackInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(blackInfo).SendMessage()
|
||||
}
|
||||
|
||||
func (f *FriendCallback) OnBlackDeleted(blackInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(blackInfo).SendMessage()
|
||||
}
|
||||
|
||||
type GroupCallback struct {
|
||||
CallbackWriter
|
||||
}
|
||||
|
||||
func NewGroupCallback(callback *js.Value) *GroupCallback {
|
||||
return &GroupCallback{CallbackWriter: NewEventData(callback)}
|
||||
}
|
||||
|
||||
func (f *GroupCallback) OnJoinedGroupAdded(groupInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupInfo).SendMessage()
|
||||
}
|
||||
func (f *GroupCallback) OnJoinedGroupDeleted(groupInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupInfo).SendMessage()
|
||||
}
|
||||
func (f *GroupCallback) OnGroupMemberAdded(groupMemberInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupMemberInfo).SendMessage()
|
||||
}
|
||||
func (f *GroupCallback) OnGroupMemberDeleted(groupMemberInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupMemberInfo).SendMessage()
|
||||
}
|
||||
func (f *GroupCallback) OnGroupApplicationAdded(groupApplication string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupApplication).SendMessage()
|
||||
}
|
||||
func (f *GroupCallback) OnGroupApplicationDeleted(groupApplication string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupApplication).SendMessage()
|
||||
}
|
||||
func (f *GroupCallback) OnGroupInfoChanged(groupInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupInfo).SendMessage()
|
||||
}
|
||||
func (f *GroupCallback) OnGroupMemberInfoChanged(groupMemberInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupMemberInfo).SendMessage()
|
||||
}
|
||||
func (f *GroupCallback) OnGroupApplicationAccepted(groupApplication string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupApplication).SendMessage()
|
||||
}
|
||||
func (f *GroupCallback) OnGroupApplicationRejected(groupApplication string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupApplication).SendMessage()
|
||||
}
|
||||
func (f *GroupCallback) OnGroupDismissed(groupInfo string) {
|
||||
f.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(groupInfo).SendMessage()
|
||||
}
|
||||
|
||||
type UserCallback struct {
|
||||
CallbackWriter
|
||||
}
|
||||
|
||||
func (u UserCallback) OnUserStatusChanged(statusMap string) {
|
||||
u.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(statusMap).SendMessage()
|
||||
}
|
||||
|
||||
func (u UserCallback) OnUserInputStatusChanged(change string) {
|
||||
u.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(change).SendMessage()
|
||||
}
|
||||
|
||||
func NewUserCallback(callback *js.Value) *UserCallback {
|
||||
return &UserCallback{CallbackWriter: NewEventData(callback)}
|
||||
}
|
||||
func (u UserCallback) OnSelfInfoUpdated(userInfo string) {
|
||||
u.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(userInfo).SendMessage()
|
||||
}
|
||||
func (u UserCallback) OnUserCommandAdd(userInfo string) {
|
||||
u.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(userInfo).SendMessage()
|
||||
}
|
||||
func (u UserCallback) OnUserCommandDelete(userInfo string) {
|
||||
u.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(userInfo).SendMessage()
|
||||
}
|
||||
func (u UserCallback) OnUserCommandUpdate(userInfo string) {
|
||||
u.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(userInfo).SendMessage()
|
||||
}
|
||||
|
||||
type CustomBusinessCallback struct {
|
||||
CallbackWriter
|
||||
}
|
||||
|
||||
func NewCustomBusinessCallback(callback *js.Value) *CustomBusinessCallback {
|
||||
return &CustomBusinessCallback{CallbackWriter: NewEventData(callback)}
|
||||
}
|
||||
|
||||
func (c CustomBusinessCallback) OnRecvCustomBusinessMessage(businessMessage string) {
|
||||
c.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(businessMessage).SendMessage()
|
||||
|
||||
}
|
||||
|
||||
type SignalingCallback struct {
|
||||
CallbackWriter
|
||||
}
|
||||
|
||||
func (s SignalingCallback) OnRoomParticipantConnected(onRoomParticipantConnectedCallback string) {
|
||||
s.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(onRoomParticipantConnectedCallback).SendMessage()
|
||||
}
|
||||
|
||||
func (s SignalingCallback) OnRoomParticipantDisconnected(onRoomParticipantDisconnectedCallback string) {
|
||||
s.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(onRoomParticipantDisconnectedCallback).SendMessage()
|
||||
}
|
||||
|
||||
func (s SignalingCallback) OnReceiveNewInvitation(receiveNewInvitationCallback string) {
|
||||
s.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(receiveNewInvitationCallback).SendMessage()
|
||||
}
|
||||
|
||||
func (s SignalingCallback) OnInviteeAccepted(inviteeAcceptedCallback string) {
|
||||
s.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(inviteeAcceptedCallback).SendMessage()
|
||||
|
||||
}
|
||||
func (s SignalingCallback) OnInviteeAcceptedByOtherDevice(inviteeAcceptedCallback string) {
|
||||
s.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(inviteeAcceptedCallback).SendMessage()
|
||||
}
|
||||
|
||||
func (s SignalingCallback) OnInviteeRejected(inviteeRejectedCallback string) {
|
||||
s.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(inviteeRejectedCallback).SendMessage()
|
||||
}
|
||||
|
||||
func (s SignalingCallback) OnInviteeRejectedByOtherDevice(inviteeRejectedCallback string) {
|
||||
s.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(inviteeRejectedCallback).SendMessage()
|
||||
}
|
||||
|
||||
func (s SignalingCallback) OnInvitationCancelled(invitationCancelledCallback string) {
|
||||
s.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(invitationCancelledCallback).SendMessage()
|
||||
}
|
||||
|
||||
func (s SignalingCallback) OnInvitationTimeout(invitationTimeoutCallback string) {
|
||||
s.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(invitationTimeoutCallback).SendMessage()
|
||||
}
|
||||
|
||||
func (s SignalingCallback) OnHangUp(hangUpCallback string) {
|
||||
s.CallbackWriter.SetEvent(utils.GetSelfFuncName()).SetData(hangUpCallback).SendMessage()
|
||||
}
|
||||
|
||||
func NewSignalingCallback(callback *js.Value) *SignalingCallback {
|
||||
return &SignalingCallback{CallbackWriter: NewEventData(callback)}
|
||||
}
|
||||
148
go/chao-sdk-core/wasm/exec/executor.go
Normal file
148
go/chao-sdk-core/wasm/exec/executor.go
Normal file
@@ -0,0 +1,148 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package exec
|
||||
|
||||
import (
|
||||
"context"
|
||||
"errors"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/tools/errs"
|
||||
"github.com/openimsdk/tools/log"
|
||||
"runtime"
|
||||
"syscall/js"
|
||||
"time"
|
||||
)
|
||||
|
||||
type CallbackData struct {
|
||||
ErrCode int32 `json:"errCode"`
|
||||
ErrMsg string `json:"errMsg"`
|
||||
Data interface{} `json:"data"`
|
||||
}
|
||||
|
||||
const TIMEOUT = 5
|
||||
const JSNOTFOUND = 10002
|
||||
|
||||
var ErrType = errors.New("from javascript data type err")
|
||||
var PrimaryKeyNull = errors.New("primary key is null err")
|
||||
|
||||
var ErrTimoutFromJavaScript = errors.New("invoke javascript timeout,maybe should check function from javascript")
|
||||
var jsErr = js.Global().Get("Error")
|
||||
|
||||
func Exec(args ...interface{}) (output interface{}, err error) {
|
||||
ctx := context.Background()
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
switch x := r.(type) {
|
||||
case string:
|
||||
err = utils.Wrap(errors.New(x), "")
|
||||
case error:
|
||||
err = x
|
||||
default:
|
||||
err = utils.Wrap(errors.New("unknown panic"), "")
|
||||
}
|
||||
}
|
||||
}()
|
||||
thenChannel := make(chan []js.Value)
|
||||
defer close(thenChannel)
|
||||
catchChannel := make(chan []js.Value)
|
||||
defer close(catchChannel)
|
||||
pc, _, _, _ := runtime.Caller(1)
|
||||
funcName := utils.CleanUpfuncName(runtime.FuncForPC(pc).Name())
|
||||
data := CallbackData{}
|
||||
thenFunc := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
switch x := r.(type) {
|
||||
case string:
|
||||
err = utils.Wrap(errors.New(x), "")
|
||||
case error:
|
||||
err = x
|
||||
default:
|
||||
err = utils.Wrap(errors.New("unknown panic"), "")
|
||||
}
|
||||
}
|
||||
}()
|
||||
log.ZDebug(ctx, "js then function", "=> (main go context) "+funcName+" "+
|
||||
"with response ", args[0].String())
|
||||
thenChannel <- args
|
||||
return nil
|
||||
})
|
||||
defer thenFunc.Release()
|
||||
catchFunc := js.FuncOf(func(this js.Value, args []js.Value) interface{} {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
switch x := r.(type) {
|
||||
case string:
|
||||
err = utils.Wrap(errors.New(x), "")
|
||||
case error:
|
||||
err = x
|
||||
default:
|
||||
err = utils.Wrap(errors.New("unknown panic"), "")
|
||||
}
|
||||
}
|
||||
}()
|
||||
log.ZDebug(ctx, "js catch function", "=> (main go context) "+funcName+" with respone ", args[0].String())
|
||||
catchChannel <- args
|
||||
return nil
|
||||
})
|
||||
defer catchFunc.Release()
|
||||
js.Global().Call(utils.FirstLower(funcName), args...).Call("then", thenFunc).Call("catch", catchFunc)
|
||||
select {
|
||||
case result := <-thenChannel:
|
||||
if len(result) > 0 {
|
||||
switch result[0].Type() {
|
||||
case js.TypeString:
|
||||
interErr := utils.JsonStringToStruct(result[0].String(), &data)
|
||||
if interErr != nil {
|
||||
err = utils.Wrap(err, "return json unmarshal err from javascript")
|
||||
}
|
||||
case js.TypeObject:
|
||||
return result[0], nil
|
||||
|
||||
default:
|
||||
err = errors.New("unknown return type from javascript")
|
||||
}
|
||||
|
||||
} else {
|
||||
err = errors.New("args err,length is 0")
|
||||
}
|
||||
|
||||
case catch := <-catchChannel:
|
||||
if catch[0].InstanceOf(jsErr) {
|
||||
return nil, js.Error{Value: catch[0]}
|
||||
} else {
|
||||
panic("unknown javascript exception")
|
||||
}
|
||||
case <-time.After(TIMEOUT * time.Second):
|
||||
panic(ErrTimoutFromJavaScript)
|
||||
}
|
||||
if data.ErrCode != 0 {
|
||||
if data.ErrCode == JSNOTFOUND {
|
||||
return nil, errs.ErrRecordNotFound
|
||||
}
|
||||
return "", errors.New(data.ErrMsg)
|
||||
}
|
||||
return data.Data, err
|
||||
}
|
||||
|
||||
func ExtractArrayBuffer(arrayBuffer js.Value) []byte {
|
||||
uint8Array := js.Global().Get("Uint8Array").New(arrayBuffer)
|
||||
dst := make([]byte, uint8Array.Length())
|
||||
js.CopyBytesToGo(dst, uint8Array)
|
||||
return dst
|
||||
}
|
||||
144
go/chao-sdk-core/wasm/indexdb/black_model.go
Normal file
144
go/chao-sdk-core/wasm/indexdb/black_model.go
Normal file
@@ -0,0 +1,144 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/indexdb/temp_struct"
|
||||
)
|
||||
|
||||
type Black struct {
|
||||
loginUserID string
|
||||
}
|
||||
|
||||
func NewBlack(loginUserID string) *Black {
|
||||
return &Black{loginUserID: loginUserID}
|
||||
}
|
||||
|
||||
// GetBlackListDB gets the blacklist list from the database
|
||||
func (i Black) GetBlackListDB(ctx context.Context) (result []*model_struct.LocalBlack, err error) {
|
||||
gList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalBlack
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetBlackListUserID gets the list of blocked user IDs
|
||||
func (i Black) GetBlackListUserID(ctx context.Context) (result []string, err error) {
|
||||
gList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetBlackInfoByBlockUserID gets the information of a blocked user by their user ID
|
||||
func (i Black) GetBlackInfoByBlockUserID(ctx context.Context, blockUserID string) (result *model_struct.LocalBlack, err error) {
|
||||
gList, err := exec.Exec(blockUserID, i.loginUserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp model_struct.LocalBlack
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetBlackInfoList gets the information of multiple blocked users by their user IDs
|
||||
func (i Black) GetBlackInfoList(ctx context.Context, blockUserIDList []string) (result []*model_struct.LocalBlack, err error) {
|
||||
gList, err := exec.Exec(utils.StructToJsonString(blockUserIDList))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalBlack
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// InsertBlack inserts a new blocked user into the database
|
||||
func (i Black) InsertBlack(ctx context.Context, black *model_struct.LocalBlack) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(black))
|
||||
return err
|
||||
}
|
||||
|
||||
// UpdateBlack updates the information of a blocked user in the database
|
||||
func (i Black) UpdateBlack(ctx context.Context, black *model_struct.LocalBlack) error {
|
||||
tempLocalBlack := temp_struct.LocalBlack{
|
||||
Nickname: black.Nickname,
|
||||
FaceURL: black.FaceURL,
|
||||
CreateTime: black.CreateTime,
|
||||
AddSource: black.AddSource,
|
||||
OperatorUserID: black.OperatorUserID,
|
||||
Ex: black.Ex,
|
||||
AttachedInfo: black.AttachedInfo,
|
||||
}
|
||||
_, err := exec.Exec(black.OwnerUserID, black.BlockUserID, utils.StructToJsonString(tempLocalBlack))
|
||||
return err
|
||||
}
|
||||
|
||||
// DeleteBlack removes a blocked user from the database
|
||||
func (i Black) DeleteBlack(ctx context.Context, blockUserID string) error {
|
||||
_, err := exec.Exec(blockUserID, i.loginUserID)
|
||||
return err
|
||||
}
|
||||
45
go/chao-sdk-core/wasm/indexdb/cache_message.go
Normal file
45
go/chao-sdk-core/wasm/indexdb/cache_message.go
Normal file
@@ -0,0 +1,45 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
)
|
||||
|
||||
type LocalCacheMessage struct {
|
||||
}
|
||||
|
||||
func NewLocalCacheMessage() *LocalCacheMessage {
|
||||
return &LocalCacheMessage{}
|
||||
}
|
||||
|
||||
func (i *LocalCacheMessage) BatchInsertTempCacheMessageList(ctx context.Context, MessageList []*model_struct.TempCacheLocalChatLog) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(MessageList))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalCacheMessage) InsertTempCacheMessage(ctx context.Context, Message *model_struct.TempCacheLocalChatLog) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(Message))
|
||||
return err
|
||||
}
|
||||
759
go/chao-sdk-core/wasm/indexdb/chat_log_model.go
Normal file
759
go/chao-sdk-core/wasm/indexdb/chat_log_model.go
Normal file
@@ -0,0 +1,759 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/indexdb/temp_struct"
|
||||
)
|
||||
|
||||
type LocalChatLogs struct {
|
||||
loginUserID string
|
||||
}
|
||||
|
||||
// NewLocalChatLogs creates a new LocalChatLogs
|
||||
func NewLocalChatLogs(loginUserID string) *LocalChatLogs {
|
||||
return &LocalChatLogs{loginUserID: loginUserID}
|
||||
}
|
||||
|
||||
// GetMessage gets the message from the database
|
||||
func (i *LocalChatLogs) GetMessage(ctx context.Context, conversationID, clientMsgID string) (*model_struct.LocalChatLog, error) {
|
||||
msg, err := exec.Exec(conversationID, clientMsgID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msg.(string); ok {
|
||||
result := model_struct.LocalChatLog{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// UpdateMessage updates the message in the database
|
||||
func (i *LocalChatLogs) UpdateMessage(ctx context.Context, conversationID string, c *model_struct.LocalChatLog) error {
|
||||
if c.ClientMsgID == "" {
|
||||
return exec.PrimaryKeyNull
|
||||
}
|
||||
tempLocalChatLog := temp_struct.LocalChatLog{
|
||||
ServerMsgID: c.ServerMsgID,
|
||||
SendID: c.SendID,
|
||||
RecvID: c.RecvID,
|
||||
SenderPlatformID: c.SenderPlatformID,
|
||||
SenderNickname: c.SenderNickname,
|
||||
SenderFaceURL: c.SenderFaceURL,
|
||||
SessionType: c.SessionType,
|
||||
MsgFrom: c.MsgFrom,
|
||||
ContentType: c.ContentType,
|
||||
Content: c.Content,
|
||||
IsRead: c.IsRead,
|
||||
Status: c.Status,
|
||||
Seq: c.Seq,
|
||||
SendTime: c.SendTime,
|
||||
CreateTime: c.CreateTime,
|
||||
AttachedInfo: c.AttachedInfo,
|
||||
Ex: c.Ex,
|
||||
IsReact: c.IsReact,
|
||||
IsExternalExtensions: c.IsExternalExtensions,
|
||||
MsgFirstModifyTime: c.MsgFirstModifyTime,
|
||||
}
|
||||
_, err := exec.Exec(conversationID, c.ClientMsgID, utils.StructToJsonString(tempLocalChatLog))
|
||||
return err
|
||||
}
|
||||
|
||||
// UpdateMessageStatus updates the message status in the database
|
||||
func (i *LocalChatLogs) BatchInsertMessageList(ctx context.Context, conversationID string, messageList []*model_struct.LocalChatLog) error {
|
||||
_, err := exec.Exec(conversationID, utils.StructToJsonString(messageList))
|
||||
return err
|
||||
}
|
||||
|
||||
// InsertMessage inserts a message into the local chat log.
|
||||
func (i *LocalChatLogs) InsertMessage(ctx context.Context, conversationID string, message *model_struct.LocalChatLog) error {
|
||||
_, err := exec.Exec(conversationID, utils.StructToJsonString(message))
|
||||
return err
|
||||
}
|
||||
|
||||
// UpdateColumnsMessageList updates multiple columns of a message in the local chat log.
|
||||
func (i *LocalChatLogs) UpdateColumnsMessageList(ctx context.Context, clientMsgIDList []string, args map[string]interface{}) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(clientMsgIDList), args)
|
||||
return err
|
||||
}
|
||||
|
||||
// UpdateColumnsMessage updates a column of a message in the local chat log.
|
||||
func (i *LocalChatLogs) UpdateColumnsMessage(ctx context.Context, conversationID, clientMsgID string, args map[string]interface{}) error {
|
||||
_, err := exec.Exec(conversationID, clientMsgID, utils.StructToJsonString(args))
|
||||
return err
|
||||
}
|
||||
|
||||
// DeleteAllMessage deletes all messages from the local chat log.
|
||||
func (i *LocalChatLogs) DeleteAllMessage(ctx context.Context) error {
|
||||
_, err := exec.Exec()
|
||||
return err
|
||||
}
|
||||
|
||||
// UpdateMessageStatusBySourceID updates the status of a message in the local chat log by its source ID.
|
||||
func (i *LocalChatLogs) UpdateMessageStatusBySourceID(ctx context.Context, sourceID string, status, sessionType int32) error {
|
||||
_, err := exec.Exec(sourceID, status, sessionType, i.loginUserID)
|
||||
return err
|
||||
}
|
||||
|
||||
// UpdateMessageTimeAndStatus updates the time and status of a message in the local chat log.
|
||||
func (i *LocalChatLogs) UpdateMessageTimeAndStatus(ctx context.Context, conversationID, clientMsgID string, serverMsgID string, sendTime int64, status int32) error {
|
||||
_, err := exec.Exec(conversationID, clientMsgID, serverMsgID, sendTime, status)
|
||||
return err
|
||||
}
|
||||
|
||||
// GetMessageList retrieves a list of messages from the local chat log.
|
||||
func (i *LocalChatLogs) GetMessageList(ctx context.Context, conversationID string, count int, startTime int64, isReverse bool) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(conversationID, count, startTime, isReverse, i.loginUserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetMessageListNoTime retrieves a list of messages from the local chat log without specifying a start time.
|
||||
func (i *LocalChatLogs) GetMessageListNoTime(ctx context.Context, conversationID string, count int, isReverse bool) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(conversationID, count, isReverse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// UpdateSingleMessageHasRead updates the hasRead field of a single message in the local chat log.
|
||||
func (i *LocalChatLogs) UpdateSingleMessageHasRead(ctx context.Context, sendID string, msgIDList []string) error {
|
||||
_, err := exec.Exec(sendID, utils.StructToJsonString(msgIDList))
|
||||
return err
|
||||
}
|
||||
|
||||
// SearchMessageByContentType searches for messages in the local chat log by content type.
|
||||
func (i *LocalChatLogs) SearchMessageByContentType(ctx context.Context, contentType []int, conversationID string, startTime, endTime int64, offset, count int) (messages []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(conversationID, utils.StructToJsonString(contentType), startTime, endTime, offset, count)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
messages = append(messages, &v1)
|
||||
}
|
||||
return messages, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//funcation (i *LocalChatLogs) SuperGroupSearchMessageByContentType(ctx context.Context, contentType []int, sourceID string, startTime, endTime int64, sessionType, offset, count int) (messages []*model_struct.LocalChatLog, err error) {
|
||||
// msgList, err := Exec(utils.StructToJsonString(contentType), sourceID, startTime, endTime, sessionType, offset, count)
|
||||
// if err != nil {
|
||||
// return nil, err
|
||||
// } else {
|
||||
// if v, ok := msgList.(string); ok {
|
||||
// var temp []model_struct.LocalChatLog
|
||||
// err := utils.JsonStringToStruct(v, &temp)
|
||||
// if err != nil {
|
||||
// return nil, err
|
||||
// }
|
||||
// for _, v := range temp {
|
||||
// v1 := v
|
||||
// messages = append(messages, &v1)
|
||||
// }
|
||||
// return messages, err
|
||||
// } else {
|
||||
// return nil, ErrType
|
||||
// }
|
||||
// }
|
||||
//}
|
||||
|
||||
// SearchMessageByKeyword searches for messages in the local chat log by keyword.
|
||||
func (i *LocalChatLogs) SearchMessageByContentTypeAndKeyword(ctx context.Context, contentType []int, conversationID string, keywordList []string, keywordListMatchType int, startTime, endTime int64) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(conversationID, utils.StructToJsonString(contentType), utils.StructToJsonString(keywordList), keywordListMatchType, startTime, endTime)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MessageIfExists check if message exists
|
||||
func (i *LocalChatLogs) MessageIfExists(ctx context.Context, clientMsgID string) (bool, error) {
|
||||
isExist, err := exec.Exec(clientMsgID)
|
||||
if err != nil {
|
||||
return false, err
|
||||
} else {
|
||||
if v, ok := isExist.(bool); ok {
|
||||
return v, nil
|
||||
} else {
|
||||
return false, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// IsExistsInErrChatLogBySeq check if message exists in error chat log by seq
|
||||
func (i *LocalChatLogs) IsExistsInErrChatLogBySeq(ctx context.Context, seq int64) bool {
|
||||
isExist, err := exec.Exec(seq)
|
||||
if err != nil {
|
||||
return false
|
||||
} else {
|
||||
if v, ok := isExist.(bool); ok {
|
||||
return v
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MessageIfExistsBySeq check if message exists by seq
|
||||
func (i *LocalChatLogs) MessageIfExistsBySeq(ctx context.Context, seq int64) (bool, error) {
|
||||
isExist, err := exec.Exec(seq)
|
||||
if err != nil {
|
||||
return false, err
|
||||
} else {
|
||||
if v, ok := isExist.(bool); ok {
|
||||
return v, nil
|
||||
} else {
|
||||
return false, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetMultipleMessage gets multiple messages from the local chat log.
|
||||
func (i *LocalChatLogs) GetMultipleMessage(ctx context.Context, msgIDList []string) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(utils.StructToJsonString(msgIDList))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetLostMsgSeqList gets lost message seq list.
|
||||
func (i *LocalChatLogs) GetLostMsgSeqList(ctx context.Context, minSeqInSvr uint32) (result []uint32, err error) {
|
||||
l, err := exec.Exec(minSeqInSvr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := l.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetTestMessage gets test message.
|
||||
func (i *LocalChatLogs) GetTestMessage(ctx context.Context, seq uint32) (*model_struct.LocalChatLog, error) {
|
||||
msg, err := exec.Exec(seq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msg.(model_struct.LocalChatLog); ok {
|
||||
return &v, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Update the sender's nickname in the chat logs
|
||||
func (i *LocalChatLogs) UpdateMsgSenderNickname(ctx context.Context, sendID, nickname string, sType int) error {
|
||||
_, err := exec.Exec(sendID, nickname, sType)
|
||||
return err
|
||||
}
|
||||
|
||||
// Update the sender's face URL in the chat logs
|
||||
func (i *LocalChatLogs) UpdateMsgSenderFaceURL(ctx context.Context, sendID, faceURL string, sType int) error {
|
||||
_, err := exec.Exec(sendID, faceURL, sType)
|
||||
return err
|
||||
}
|
||||
|
||||
// Update the sender's face URL and nickname in the chat logs
|
||||
func (i *LocalChatLogs) UpdateMsgSenderFaceURLAndSenderNickname(ctx context.Context, conversationID, sendID, faceURL, nickname string) error {
|
||||
_, err := exec.Exec(conversationID, sendID, faceURL, nickname)
|
||||
return err
|
||||
}
|
||||
|
||||
// Get the message sequence number by client message ID
|
||||
func (i *LocalChatLogs) GetMsgSeqByClientMsgID(ctx context.Context, clientMsgID string) (uint32, error) {
|
||||
result, err := exec.Exec(clientMsgID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if v, ok := result.(float64); ok {
|
||||
return uint32(v), nil
|
||||
}
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
|
||||
// Search all messages by content type
|
||||
func (i *LocalChatLogs) SearchAllMessageByContentType(ctx context.Context, conversationID string, contentType int) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(conversationID, contentType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []*model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get the message sequence number list by group ID
|
||||
func (i *LocalChatLogs) GetMsgSeqListByGroupID(ctx context.Context, groupID string) (result []uint32, err error) {
|
||||
l, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := l.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get the message sequence number list by peer user ID
|
||||
func (i *LocalChatLogs) GetMsgSeqListByPeerUserID(ctx context.Context, userID string) (result []uint32, err error) {
|
||||
l, err := exec.Exec(userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := l.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get the message sequence number list by self user ID
|
||||
func (i *LocalChatLogs) GetMsgSeqListBySelfUserID(ctx context.Context, userID string) (result []uint32, err error) {
|
||||
l, err := exec.Exec(userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := l.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Get the abnormal message sequence number
|
||||
func (i *LocalChatLogs) GetAbnormalMsgSeq(ctx context.Context) (int64, error) {
|
||||
result, err := exec.Exec()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if v, ok := result.(float64); ok {
|
||||
return int64(v), nil
|
||||
}
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
|
||||
// Get the list of abnormal message sequence numbers
|
||||
func (i *LocalChatLogs) GetAbnormalMsgSeqList(ctx context.Context) (result []int64, err error) {
|
||||
l, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := l.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Batch insert exception messages into the chat logs
|
||||
func (i *LocalChatLogs) BatchInsertExceptionMsg(ctx context.Context, MessageList []*model_struct.LocalErrChatLog) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(MessageList))
|
||||
return err
|
||||
}
|
||||
|
||||
// Update the message status to read in the chat logs
|
||||
func (i *LocalChatLogs) UpdateGroupMessageHasRead(ctx context.Context, msgIDList []string, sessionType int32) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(msgIDList), sessionType)
|
||||
return err
|
||||
}
|
||||
|
||||
// Get the message by message ID
|
||||
func (i *LocalChatLogs) SearchMessageByKeyword(ctx context.Context, contentType []int, keywordList []string, keywordListMatchType int, conversationID string, startTime, endTime int64, offset, count int) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(conversationID, utils.StructToJsonString(contentType), utils.StructToJsonString(keywordList), keywordListMatchType, startTime, endTime, offset, count)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetSuperGroupAbnormalMsgSeq get super group abnormal msg seq
|
||||
func (i *LocalChatLogs) GetSuperGroupAbnormalMsgSeq(ctx context.Context, groupID string) (uint32, error) {
|
||||
isExist, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
if v, ok := isExist.(uint32); ok {
|
||||
return v, nil
|
||||
} else {
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetAlreadyExistSeqList get already exist seq list
|
||||
func (i *LocalChatLogs) GetAlreadyExistSeqList(ctx context.Context, conversationID string, lostSeqList []int64) (result []int64, err error) {
|
||||
seqList, err := exec.Exec(conversationID, utils.StructToJsonString(lostSeqList))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := seqList.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetMessagesBySeq get message by seq
|
||||
func (i *LocalChatLogs) GetMessageBySeq(ctx context.Context, conversationID string, seq int64) (*model_struct.LocalChatLog, error) {
|
||||
msg, err := exec.Exec(conversationID, seq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msg.(string); ok {
|
||||
result := model_struct.LocalChatLog{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// UpdateMessageBySeq update message
|
||||
func (i *LocalChatLogs) UpdateMessageBySeq(ctx context.Context, conversationID string, c *model_struct.LocalChatLog) error {
|
||||
if c.Seq == 0 {
|
||||
return exec.PrimaryKeyNull
|
||||
}
|
||||
tempLocalChatLog := temp_struct.LocalChatLog{
|
||||
ServerMsgID: c.ServerMsgID,
|
||||
SendID: c.SendID,
|
||||
RecvID: c.RecvID,
|
||||
SenderPlatformID: c.SenderPlatformID,
|
||||
SenderNickname: c.SenderNickname,
|
||||
SenderFaceURL: c.SenderFaceURL,
|
||||
SessionType: c.SessionType,
|
||||
MsgFrom: c.MsgFrom,
|
||||
ContentType: c.ContentType,
|
||||
Content: c.Content,
|
||||
IsRead: c.IsRead,
|
||||
Status: c.Status,
|
||||
Seq: c.Seq,
|
||||
SendTime: c.SendTime,
|
||||
CreateTime: c.CreateTime,
|
||||
AttachedInfo: c.AttachedInfo,
|
||||
Ex: c.Ex,
|
||||
IsReact: c.IsReact,
|
||||
IsExternalExtensions: c.IsExternalExtensions,
|
||||
MsgFirstModifyTime: c.MsgFirstModifyTime,
|
||||
}
|
||||
_, err := exec.Exec(conversationID, c.Seq, utils.StructToJsonString(tempLocalChatLog))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalChatLogs) MarkConversationMessageAsReadDB(ctx context.Context, conversationID string, msgIDs []string) (rowsAffected int64, err error) {
|
||||
rows, err := exec.Exec(conversationID, utils.StructToJsonString(msgIDs), i.loginUserID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
if v, ok := rows.(float64); ok {
|
||||
rowsAffected = int64(v)
|
||||
return rowsAffected, err
|
||||
} else {
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalChatLogs) MarkConversationMessageAsReadBySeqs(ctx context.Context, conversationID string, seqs []int64) (rowsAffected int64, err error) {
|
||||
rows, err := exec.Exec(conversationID, utils.StructToJsonString(seqs), i.loginUserID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
if v, ok := rows.(float64); ok {
|
||||
rowsAffected = int64(v)
|
||||
return rowsAffected, err
|
||||
} else {
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalChatLogs) MarkConversationAllMessageAsRead(ctx context.Context, conversationID string) (rowsAffected int64, err error) {
|
||||
rows, err := exec.Exec(conversationID, i.loginUserID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
if v, ok := rows.(float64); ok {
|
||||
rowsAffected = int64(v)
|
||||
return rowsAffected, err
|
||||
} else {
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalChatLogs) GetUnreadMessage(ctx context.Context, conversationID string) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgs, err := exec.Exec(conversationID, i.loginUserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgs.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalChatLogs) GetMessagesByClientMsgIDs(ctx context.Context, conversationID string, msgIDs []string) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgs, err := exec.Exec(conversationID, utils.StructToJsonString(msgIDs))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgs.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetMessagesBySeqs gets messages by seqs
|
||||
func (i *LocalChatLogs) GetMessagesBySeqs(ctx context.Context, conversationID string, seqs []int64) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgs, err := exec.Exec(conversationID, utils.StructToJsonString(seqs))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgs.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetConversationNormalMsgSeq gets the maximum seq of the session
|
||||
func (i *LocalChatLogs) GetConversationNormalMsgSeq(ctx context.Context, conversationID string) (int64, error) {
|
||||
seq, err := exec.Exec(conversationID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
if v, ok := seq.(float64); ok {
|
||||
var result int64
|
||||
result = int64(v)
|
||||
return result, err
|
||||
} else {
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetConversationPeerNormalMsgSeq gets the maximum seq of the peer in the session
|
||||
func (i *LocalChatLogs) GetConversationPeerNormalMsgSeq(ctx context.Context, conversationID string) (int64, error) {
|
||||
seq, err := exec.Exec(conversationID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
if v, ok := seq.(float64); ok {
|
||||
var result int64
|
||||
result = int64(v)
|
||||
return result, nil
|
||||
} else {
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// GetConversationAbnormalMsgSeq gets the maximum abnormal seq of the session
|
||||
func (i *LocalChatLogs) GetConversationAbnormalMsgSeq(ctx context.Context, groupID string) (int64, error) {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
|
||||
// DeleteConversationAllMessages deletes all messages of the session
|
||||
func (i *LocalChatLogs) DeleteConversationAllMessages(ctx context.Context, conversationID string) error {
|
||||
_, err := exec.Exec(conversationID)
|
||||
return err
|
||||
}
|
||||
|
||||
// MarkDeleteConversationAllMessages marks all messages of the session as deleted
|
||||
func (i *LocalChatLogs) MarkDeleteConversationAllMessages(ctx context.Context, conversationID string) error {
|
||||
_, err := exec.Exec(conversationID)
|
||||
return err
|
||||
}
|
||||
|
||||
// DeleteConversationMsgs deletes messages of the session
|
||||
func (i *LocalChatLogs) DeleteConversationMsgs(ctx context.Context, conversationID string, msgIDs []string) error {
|
||||
_, err := exec.Exec(conversationID, utils.StructToJsonString(msgIDs))
|
||||
return err
|
||||
}
|
||||
|
||||
// DeleteConversationMsgsBySeqs deletes messages of the session
|
||||
func (i *LocalChatLogs) DeleteConversationMsgsBySeqs(ctx context.Context, conversationID string, seqs []int64) error {
|
||||
_, err := exec.Exec(conversationID, utils.StructToJsonString(seqs))
|
||||
return err
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
type LocalChatLogReactionExtensions struct {
|
||||
ExtKey string `json:"ext_key"`
|
||||
ExtVal string `json:"ext_val"`
|
||||
ExtKey2 string `json:"ext_key2"`
|
||||
ExtVal2 string `json:"ext_val2"`
|
||||
}
|
||||
|
||||
func NewLocalChatLogReactionExtensions() *LocalChatLogReactionExtensions {
|
||||
return &LocalChatLogReactionExtensions{}
|
||||
}
|
||||
|
||||
func (i *LocalChatLogReactionExtensions) GetMessageReactionExtension(ctx context.Context, clientMsgID string) (result *model_struct.LocalChatLogReactionExtensions, err error) {
|
||||
msg, err := exec.Exec(clientMsgID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msg.(string); ok {
|
||||
result := model_struct.LocalChatLogReactionExtensions{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalChatLogReactionExtensions) InsertMessageReactionExtension(ctx context.Context, messageReactionExtension *model_struct.LocalChatLogReactionExtensions) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(messageReactionExtension))
|
||||
return err
|
||||
}
|
||||
|
||||
// func (i *LocalChatLogReactionExtensions) GetAndUpdateMessageReactionExtension(ctx context.Context, clientMsgID string, m map[string]*sdkws.KeyValue) error {
|
||||
// _, err := exec.Exec(clientMsgID, utils.StructToJsonString(m))
|
||||
// return err
|
||||
// }
|
||||
//
|
||||
// func (i *LocalChatLogReactionExtensions) DeleteAndUpdateMessageReactionExtension(ctx context.Context, clientMsgID string, m map[string]*sdkws.KeyValue) error {
|
||||
// _, err := exec.Exec(clientMsgID, utils.StructToJsonString(m))
|
||||
// return err
|
||||
// }
|
||||
func (i *LocalChatLogReactionExtensions) GetMultipleMessageReactionExtension(ctx context.Context, msgIDList []string) (result []*model_struct.LocalChatLogReactionExtensions, err error) {
|
||||
msgReactionExtensionList, err := exec.Exec(utils.StructToJsonString(msgIDList))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgReactionExtensionList.(string); ok {
|
||||
var temp []model_struct.LocalChatLogReactionExtensions
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
func (i *LocalChatLogReactionExtensions) DeleteMessageReactionExtension(ctx context.Context, msgID string) error {
|
||||
_, err := exec.Exec(msgID)
|
||||
return err
|
||||
}
|
||||
func (i *LocalChatLogReactionExtensions) UpdateMessageReactionExtension(ctx context.Context, c *model_struct.LocalChatLogReactionExtensions) error {
|
||||
_, err := exec.Exec(c.ClientMsgID, utils.StructToJsonString(c))
|
||||
return err
|
||||
}
|
||||
430
go/chao-sdk-core/wasm/indexdb/conversation_model.go
Normal file
430
go/chao-sdk-core/wasm/indexdb/conversation_model.go
Normal file
@@ -0,0 +1,430 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/indexdb/temp_struct"
|
||||
)
|
||||
|
||||
type LocalConversations struct {
|
||||
}
|
||||
|
||||
func NewLocalConversations() *LocalConversations {
|
||||
return &LocalConversations{}
|
||||
}
|
||||
|
||||
func (i *LocalConversations) GetAllConversationListDB(ctx context.Context) (result []*model_struct.LocalConversation, err error) {
|
||||
cList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := cList.(string); ok {
|
||||
var temp []model_struct.LocalConversation
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalConversations) GetConversation(ctx context.Context, conversationID string) (*model_struct.LocalConversation, error) {
|
||||
c, err := exec.Exec(conversationID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := c.(string); ok {
|
||||
result := model_struct.LocalConversation{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalConversations) GetHiddenConversationList(ctx context.Context) (result []*model_struct.LocalConversation, err error) {
|
||||
cList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := cList.(string); ok {
|
||||
var temp []model_struct.LocalConversation
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
func (i *LocalConversations) GetAllConversations(ctx context.Context) (result []*model_struct.LocalConversation, err error) {
|
||||
cList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := cList.(string); ok {
|
||||
var temp []model_struct.LocalConversation
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
func (i *LocalConversations) UpdateColumnsConversation(ctx context.Context, conversationID string, args map[string]interface{}) error {
|
||||
_, err := exec.Exec(conversationID, utils.StructToJsonString(args))
|
||||
return err
|
||||
}
|
||||
func (i *LocalConversations) GetConversationByUserID(ctx context.Context, userID string) (*model_struct.LocalConversation, error) {
|
||||
c, err := exec.Exec(userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := c.(string); ok {
|
||||
result := model_struct.LocalConversation{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalConversations) GetConversationListSplitDB(ctx context.Context, offset, count int) (result []*model_struct.LocalConversation, err error) {
|
||||
cList, err := exec.Exec(offset, count)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := cList.(string); ok {
|
||||
var temp []model_struct.LocalConversation
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalConversations) BatchInsertConversationList(ctx context.Context, conversationList []*model_struct.LocalConversation) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(conversationList))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) InsertConversation(ctx context.Context, conversationList *model_struct.LocalConversation) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(conversationList))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) DeleteConversation(ctx context.Context, conversationID string) error {
|
||||
_, err := exec.Exec(conversationID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) UpdateConversation(ctx context.Context, c *model_struct.LocalConversation) error {
|
||||
if c.ConversationID == "" {
|
||||
return exec.PrimaryKeyNull
|
||||
}
|
||||
tempLocalConversation := temp_struct.LocalConversation{
|
||||
ConversationType: c.ConversationType,
|
||||
UserID: c.UserID,
|
||||
GroupID: c.GroupID,
|
||||
ShowName: c.ShowName,
|
||||
FaceURL: c.FaceURL,
|
||||
RecvMsgOpt: c.RecvMsgOpt,
|
||||
UnreadCount: c.UnreadCount,
|
||||
GroupAtType: c.GroupAtType,
|
||||
LatestMsg: c.LatestMsg,
|
||||
LatestMsgSendTime: c.LatestMsgSendTime,
|
||||
DraftText: c.DraftText,
|
||||
DraftTextTime: c.DraftTextTime,
|
||||
IsPinned: c.IsPinned,
|
||||
IsPrivateChat: c.IsPrivateChat,
|
||||
BurnDuration: c.BurnDuration,
|
||||
IsNotInGroup: c.IsNotInGroup,
|
||||
UpdateUnreadCountTime: c.UpdateUnreadCountTime,
|
||||
AttachedInfo: c.AttachedInfo,
|
||||
Ex: c.Ex,
|
||||
}
|
||||
_, err := exec.Exec(c.ConversationID, utils.StructToJsonString(tempLocalConversation))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) UpdateConversationForSync(ctx context.Context, c *model_struct.LocalConversation) error {
|
||||
if c.ConversationID == "" {
|
||||
return exec.PrimaryKeyNull
|
||||
}
|
||||
tempLocalConversation := temp_struct.LocalPartConversation{
|
||||
RecvMsgOpt: c.RecvMsgOpt,
|
||||
GroupAtType: c.GroupAtType,
|
||||
IsPinned: c.IsPinned,
|
||||
IsPrivateChat: c.IsPrivateChat,
|
||||
IsNotInGroup: c.IsNotInGroup,
|
||||
UpdateUnreadCountTime: c.UpdateUnreadCountTime,
|
||||
BurnDuration: c.BurnDuration,
|
||||
AttachedInfo: c.AttachedInfo,
|
||||
Ex: c.Ex,
|
||||
}
|
||||
_, err := exec.Exec(c.ConversationID, utils.StructToJsonString(tempLocalConversation))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) BatchUpdateConversationList(ctx context.Context, conversationList []*model_struct.LocalConversation) error {
|
||||
for _, v := range conversationList {
|
||||
err := i.UpdateConversation(ctx, v)
|
||||
if err != nil {
|
||||
return utils.Wrap(err, "BatchUpdateConversationList failed")
|
||||
}
|
||||
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (i *LocalConversations) ConversationIfExists(ctx context.Context, conversationID string) (bool, error) {
|
||||
seq, err := exec.Exec(conversationID)
|
||||
if err != nil {
|
||||
return false, err
|
||||
} else {
|
||||
if v, ok := seq.(bool); ok {
|
||||
return v, err
|
||||
} else {
|
||||
return false, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalConversations) ResetConversation(ctx context.Context, conversationID string) error {
|
||||
_, err := exec.Exec(conversationID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) ResetAllConversation(ctx context.Context) error {
|
||||
_, err := exec.Exec()
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) ClearConversation(ctx context.Context, conversationID string) error {
|
||||
_, err := exec.Exec(conversationID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) ClearAllConversation(ctx context.Context) error {
|
||||
_, err := exec.Exec()
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) SetConversationDraftDB(ctx context.Context, conversationID, draftText string) error {
|
||||
_, err := exec.Exec(conversationID, draftText)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) RemoveConversationDraft(ctx context.Context, conversationID, draftText string) error {
|
||||
_, err := exec.Exec(conversationID, draftText)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) UnPinConversation(ctx context.Context, conversationID string, isPinned int) error {
|
||||
_, err := exec.Exec(conversationID, isPinned)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) UpdateAllConversation(ctx context.Context, conversation *model_struct.LocalConversation) error {
|
||||
_, err := exec.Exec()
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) IncrConversationUnreadCount(ctx context.Context, conversationID string) error {
|
||||
_, err := exec.Exec(conversationID)
|
||||
return err
|
||||
}
|
||||
func (i *LocalConversations) DecrConversationUnreadCount(ctx context.Context, conversationID string, count int64) error {
|
||||
_, err := exec.Exec(conversationID, count)
|
||||
return err
|
||||
}
|
||||
func (i *LocalConversations) GetTotalUnreadMsgCountDB(ctx context.Context) (totalUnreadCount int32, err error) {
|
||||
count, err := exec.Exec()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
if v, ok := count.(float64); ok {
|
||||
var result int32
|
||||
result = int32(v)
|
||||
return result, err
|
||||
} else {
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalConversations) SetMultipleConversationRecvMsgOpt(ctx context.Context, conversationIDList []string, opt int) (err error) {
|
||||
_, err = exec.Exec(utils.StructToJsonString(conversationIDList), opt)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversations) GetMultipleConversationDB(ctx context.Context, conversationIDList []string) (result []*model_struct.LocalConversation, err error) {
|
||||
cList, err := exec.Exec(utils.StructToJsonString(conversationIDList))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := cList.(string); ok {
|
||||
var temp []model_struct.LocalConversation
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalConversations) GetAllSingleConversationIDList(ctx context.Context) (result []string, err error) {
|
||||
conversationIDs, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := conversationIDs.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalConversations) GetAllConversationIDList(ctx context.Context) ([]string, error) {
|
||||
conversationIDList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := conversationIDList.(string); ok {
|
||||
var result []string
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
func (i *LocalConversations) SearchConversations(ctx context.Context, searchParam string) ([]*model_struct.LocalConversation, error) {
|
||||
|
||||
var result []*model_struct.LocalConversation
|
||||
// Perform the search operation. Replace the below line with the actual search logic.
|
||||
searchResult, err := exec.Exec(searchParam)
|
||||
if err != nil {
|
||||
return nil, utils.Wrap(err, "SearchConversations failed")
|
||||
}
|
||||
|
||||
// Convert searchResult to []*model_struct.LocalConversation
|
||||
// Assuming searchResult is in a format that can be converted to the required type
|
||||
err = utils.JsonStringToStruct(searchResult.(string), &result)
|
||||
if err != nil {
|
||||
return nil, utils.Wrap(err, "Failed to parse search results")
|
||||
}
|
||||
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (i *LocalConversations) UpdateOrCreateConversations(ctx context.Context, conversationList []*model_struct.LocalConversation) error {
|
||||
//conversationIDs, err := Exec(ctx)
|
||||
return nil
|
||||
//if err != nil {
|
||||
// return err
|
||||
//} else {
|
||||
// if v, ok := conversationIDs.(string); ok {
|
||||
// var conversationIDs []string
|
||||
// err := utils.JsonStringToStruct(v, &conversationIDs)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// var notExistConversations []*model_struct.LocalConversation
|
||||
// var existConversations []*model_struct.LocalConversation
|
||||
// for i, v := range conversationList {
|
||||
// if utils.IsContain(v.ConversationID, conversationIDs) {
|
||||
// existConversations = append(existConversations, v)
|
||||
// continue
|
||||
// } else {
|
||||
// notExistConversations = append(notExistConversations, conversationList[i])
|
||||
// }
|
||||
// }
|
||||
// if len(notExistConversations) > 0 {
|
||||
// err := Exec(ctx, notExistConversations)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
// for _, v := range existConversations {
|
||||
// err := Exec(ctx, v)
|
||||
// if err != nil {
|
||||
// return err
|
||||
// }
|
||||
// }
|
||||
// return nil
|
||||
// } else {
|
||||
// return ErrType
|
||||
// }
|
||||
//}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
)
|
||||
|
||||
type LocalConversationUnreadMessages struct {
|
||||
}
|
||||
|
||||
func NewLocalConversationUnreadMessages() *LocalConversationUnreadMessages {
|
||||
return &LocalConversationUnreadMessages{}
|
||||
}
|
||||
|
||||
func (i *LocalConversationUnreadMessages) BatchInsertConversationUnreadMessageList(ctx context.Context, messageList []*model_struct.LocalConversationUnreadMessage) error {
|
||||
if messageList == nil {
|
||||
return nil
|
||||
}
|
||||
_, err := exec.Exec(utils.StructToJsonString(messageList))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalConversationUnreadMessages) DeleteConversationUnreadMessageList(ctx context.Context, conversationID string, sendTime int64) int64 {
|
||||
deleteRows, err := exec.Exec(conversationID, sendTime)
|
||||
if err != nil {
|
||||
return 0
|
||||
} else {
|
||||
if v, ok := deleteRows.(float64); ok {
|
||||
var result int64
|
||||
result = int64(v)
|
||||
return result
|
||||
} else {
|
||||
return 0
|
||||
}
|
||||
}
|
||||
}
|
||||
172
go/chao-sdk-core/wasm/indexdb/friend_model.go
Normal file
172
go/chao-sdk-core/wasm/indexdb/friend_model.go
Normal file
@@ -0,0 +1,172 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/indexdb/temp_struct"
|
||||
)
|
||||
|
||||
type Friend struct {
|
||||
loginUserID string
|
||||
}
|
||||
|
||||
func NewFriend(loginUserID string) *Friend {
|
||||
return &Friend{loginUserID: loginUserID}
|
||||
}
|
||||
|
||||
func (i *Friend) InsertFriend(ctx context.Context, friend *model_struct.LocalFriend) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(friend))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *Friend) DeleteFriendDB(ctx context.Context, friendUserID string) error {
|
||||
_, err := exec.Exec(friendUserID, i.loginUserID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *Friend) UpdateFriend(ctx context.Context, friend *model_struct.LocalFriend) error {
|
||||
tempLocalFriend := temp_struct.LocalFriend{
|
||||
OwnerUserID: friend.OwnerUserID,
|
||||
FriendUserID: friend.FriendUserID,
|
||||
Remark: friend.Remark,
|
||||
CreateTime: friend.CreateTime,
|
||||
AddSource: friend.AddSource,
|
||||
OperatorUserID: friend.OperatorUserID,
|
||||
Nickname: friend.Nickname,
|
||||
FaceURL: friend.FaceURL,
|
||||
Ex: friend.Ex,
|
||||
AttachedInfo: friend.AttachedInfo,
|
||||
IsPinned: friend.IsPinned,
|
||||
}
|
||||
_, err := exec.Exec(utils.StructToJsonString(tempLocalFriend))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *Friend) GetAllFriendList(ctx context.Context) (result []*model_struct.LocalFriend, err error) {
|
||||
gList, err := exec.Exec(i.loginUserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalFriend
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *Friend) SearchFriendList(ctx context.Context, keyword string, isSearchUserID, isSearchNickname, isSearchRemark bool) (result []*model_struct.LocalFriend, err error) {
|
||||
gList, err := exec.Exec(keyword, isSearchUserID, isSearchNickname, isSearchRemark)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalFriend
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
func (i *Friend) UpdateColumnsFriend(ctx context.Context, friendIDs []string, args map[string]interface{}) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(friendIDs), utils.StructToJsonString(args))
|
||||
if err != nil {
|
||||
return err // Return immediately if there's an error with any friendID
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (i *Friend) GetFriendInfoByFriendUserID(ctx context.Context, FriendUserID string) (*model_struct.LocalFriend, error) {
|
||||
c, err := exec.Exec(FriendUserID, i.loginUserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := c.(string); ok {
|
||||
result := model_struct.LocalFriend{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *Friend) GetFriendInfoList(ctx context.Context, friendUserIDList []string) (result []*model_struct.LocalFriend, err error) {
|
||||
gList, err := exec.Exec(utils.StructToJsonString(friendUserIDList))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalFriend
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
func (i *Friend) GetPageFriendList(ctx context.Context, offset, count int) (result []*model_struct.LocalFriend, err error) {
|
||||
gList, err := exec.Exec(offset, count, i.loginUserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
149
go/chao-sdk-core/wasm/indexdb/friend_request_model.go
Normal file
149
go/chao-sdk-core/wasm/indexdb/friend_request_model.go
Normal file
@@ -0,0 +1,149 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/indexdb/temp_struct"
|
||||
)
|
||||
|
||||
type FriendRequest struct {
|
||||
loginUserID string
|
||||
}
|
||||
|
||||
func NewFriendRequest(loginUserID string) *FriendRequest {
|
||||
return &FriendRequest{loginUserID: loginUserID}
|
||||
}
|
||||
|
||||
func (i FriendRequest) InsertFriendRequest(ctx context.Context, friendRequest *model_struct.LocalFriendRequest) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(friendRequest))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i FriendRequest) DeleteFriendRequestBothUserID(ctx context.Context, fromUserID, toUserID string) error {
|
||||
_, err := exec.Exec(fromUserID, toUserID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i FriendRequest) UpdateFriendRequest(ctx context.Context, friendRequest *model_struct.LocalFriendRequest) error {
|
||||
tempLocalFriendRequest := temp_struct.LocalFriendRequest{
|
||||
FromUserID: friendRequest.FromUserID,
|
||||
FromNickname: friendRequest.FromNickname,
|
||||
FromFaceURL: friendRequest.FromFaceURL,
|
||||
ToUserID: friendRequest.ToUserID,
|
||||
ToNickname: friendRequest.ToNickname,
|
||||
ToFaceURL: friendRequest.ToFaceURL,
|
||||
HandleResult: friendRequest.HandleResult,
|
||||
ReqMsg: friendRequest.ReqMsg,
|
||||
CreateTime: friendRequest.CreateTime,
|
||||
HandlerUserID: friendRequest.HandlerUserID,
|
||||
HandleMsg: friendRequest.HandleMsg,
|
||||
HandleTime: friendRequest.HandleTime,
|
||||
Ex: friendRequest.Ex,
|
||||
AttachedInfo: friendRequest.AttachedInfo,
|
||||
}
|
||||
_, err := exec.Exec(utils.StructToJsonString(tempLocalFriendRequest))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i FriendRequest) GetRecvFriendApplication(ctx context.Context) (result []*model_struct.LocalFriendRequest, err error) {
|
||||
gList, err := exec.Exec(i.loginUserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalFriendRequest
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i FriendRequest) GetSendFriendApplication(ctx context.Context) (result []*model_struct.LocalFriendRequest, err error) {
|
||||
gList, err := exec.Exec(i.loginUserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalFriendRequest
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i FriendRequest) GetFriendApplicationByBothID(ctx context.Context, fromUserID, toUserID string) (*model_struct.LocalFriendRequest, error) {
|
||||
c, err := exec.Exec(fromUserID, toUserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := c.(string); ok {
|
||||
result := model_struct.LocalFriendRequest{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i FriendRequest) GetBothFriendReq(ctx context.Context, fromUserID, toUserID string) (result []*model_struct.LocalFriendRequest, err error) {
|
||||
gList, err := exec.Exec(fromUserID, toUserID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalFriendRequest
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
335
go/chao-sdk-core/wasm/indexdb/group_member_model.go
Normal file
335
go/chao-sdk-core/wasm/indexdb/group_member_model.go
Normal file
@@ -0,0 +1,335 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
type LocalGroupMember struct {
|
||||
}
|
||||
|
||||
func NewLocalGroupMember() *LocalGroupMember {
|
||||
return &LocalGroupMember{}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupMemberInfoByGroupIDUserID(ctx context.Context, groupID, userID string) (*model_struct.LocalGroupMember, error) {
|
||||
member, err := exec.Exec(groupID, userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetAllGroupMemberList(ctx context.Context) ([]model_struct.LocalGroupMember, error) {
|
||||
member, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp []model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetAllGroupMemberUserIDList(ctx context.Context) ([]model_struct.LocalGroupMember, error) {
|
||||
member, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp []model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupMemberCount(ctx context.Context, groupID string) (int32, error) {
|
||||
count, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
if v, ok := count.(float64); ok {
|
||||
return int32(v), nil
|
||||
}
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupSomeMemberInfo(ctx context.Context, groupID string, userIDList []string) ([]*model_struct.LocalGroupMember, error) {
|
||||
member, err := exec.Exec(groupID, utils.StructToJsonString(userIDList))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp []*model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupAdminID(ctx context.Context, groupID string) ([]string, error) {
|
||||
IDList, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if v, ok := IDList.(string); ok {
|
||||
var temp []string
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, nil
|
||||
}
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupMemberListByGroupID(ctx context.Context, groupID string) ([]*model_struct.LocalGroupMember, error) {
|
||||
member, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp []*model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupMemberListSplit(ctx context.Context, groupID string, filter int32, offset, count int) ([]*model_struct.LocalGroupMember, error) {
|
||||
member, err := exec.Exec(groupID, filter, offset, count)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp []*model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupMemberOwnerAndAdminDB(ctx context.Context, groupID string) ([]*model_struct.LocalGroupMember, error) {
|
||||
member, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp []*model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupMemberOwner(ctx context.Context, groupID string) (*model_struct.LocalGroupMember, error) {
|
||||
member, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupMemberListSplitByJoinTimeFilter(ctx context.Context, groupID string, offset, count int, joinTimeBegin, joinTimeEnd int64, userIDList []string) ([]*model_struct.LocalGroupMember, error) {
|
||||
member, err := exec.Exec(groupID, offset, count, joinTimeBegin, joinTimeEnd, utils.StructToJsonString(userIDList))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp []*model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupOwnerAndAdminByGroupID(ctx context.Context, groupID string) ([]*model_struct.LocalGroupMember, error) {
|
||||
member, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp []*model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupMemberUIDListByGroupID(ctx context.Context, groupID string) (result []string, err error) {
|
||||
IDList, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if v, ok := IDList.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) InsertGroupMember(ctx context.Context, groupMember *model_struct.LocalGroupMember) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(groupMember))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) BatchInsertGroupMember(ctx context.Context, groupMemberList []*model_struct.LocalGroupMember) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(groupMemberList))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) DeleteGroupMember(ctx context.Context, groupID, userID string) error {
|
||||
_, err := exec.Exec(groupID, userID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) DeleteGroupAllMembers(ctx context.Context, groupID string) error {
|
||||
_, err := exec.Exec(groupID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) UpdateGroupMember(ctx context.Context, groupMember *model_struct.LocalGroupMember) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(groupMember))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) UpdateGroupMemberField(ctx context.Context, groupID, userID string, args map[string]interface{}) error {
|
||||
_, err := exec.Exec(groupID, userID, utils.StructToJsonString(args))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetGroupMemberInfoIfOwnerOrAdmin(ctx context.Context) ([]*model_struct.LocalGroupMember, error) {
|
||||
member, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp []*model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) SearchGroupMembersDB(ctx context.Context, keyword string, groupID string, isSearchMemberNickname, isSearchUserID bool, offset, count int) (result []*model_struct.LocalGroupMember, err error) {
|
||||
member, err := exec.Exec(keyword, groupID, isSearchMemberNickname, isSearchUserID, offset, count)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := member.(string); ok {
|
||||
var temp []*model_struct.LocalGroupMember
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupMember) GetUserJoinedGroupIDs(ctx context.Context, userID string) (result []string, err error) {
|
||||
IDList, err := exec.Exec(userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if v, ok := IDList.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
157
go/chao-sdk-core/wasm/indexdb/group_model.go
Normal file
157
go/chao-sdk-core/wasm/indexdb/group_model.go
Normal file
@@ -0,0 +1,157 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
type LocalGroups struct{}
|
||||
|
||||
func NewLocalGroups() *LocalGroups {
|
||||
return &LocalGroups{}
|
||||
}
|
||||
|
||||
func (i *LocalGroups) InsertGroup(ctx context.Context, groupInfo *model_struct.LocalGroup) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(groupInfo))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroups) DeleteGroup(ctx context.Context, groupID string) error {
|
||||
_, err := exec.Exec(groupID)
|
||||
return err
|
||||
}
|
||||
|
||||
// 该函数需要全更新
|
||||
func (i *LocalGroups) UpdateGroup(ctx context.Context, groupInfo *model_struct.LocalGroup) error {
|
||||
_, err := exec.Exec(groupInfo.GroupID, utils.StructToJsonString(groupInfo))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroups) GetJoinedGroupListDB(ctx context.Context) (result []*model_struct.LocalGroup, err error) {
|
||||
gList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalGroup
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroups) GetGroups(ctx context.Context, groupIDs []string) (result []*model_struct.LocalGroup, err error) {
|
||||
gList, err := exec.Exec(utils.StructToJsonString(groupIDs))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalGroup
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroups) GetGroupInfoByGroupID(ctx context.Context, groupID string) (*model_struct.LocalGroup, error) {
|
||||
c, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := c.(string); ok {
|
||||
result := model_struct.LocalGroup{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroups) GetAllGroupInfoByGroupIDOrGroupName(ctx context.Context, keyword string, isSearchGroupID bool, isSearchGroupName bool) (result []*model_struct.LocalGroup, err error) {
|
||||
gList, err := exec.Exec(keyword, isSearchGroupID, isSearchGroupName)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalGroup
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroups) AddMemberCount(ctx context.Context, groupID string) error {
|
||||
_, err := exec.Exec(groupID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroups) SubtractMemberCount(ctx context.Context, groupID string) error {
|
||||
_, err := exec.Exec(groupID)
|
||||
return err
|
||||
}
|
||||
func (i *LocalGroups) GetGroupMemberAllGroupIDs(ctx context.Context) (result []string, err error) {
|
||||
groupIDList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := groupIDList.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
97
go/chao-sdk-core/wasm/indexdb/group_request.model.go
Normal file
97
go/chao-sdk-core/wasm/indexdb/group_request.model.go
Normal file
@@ -0,0 +1,97 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
)
|
||||
|
||||
type LocalGroupRequest struct {
|
||||
}
|
||||
|
||||
func NewLocalGroupRequest() *LocalGroupRequest {
|
||||
return &LocalGroupRequest{}
|
||||
}
|
||||
|
||||
func (i *LocalGroupRequest) InsertGroupRequest(ctx context.Context, groupRequest *model_struct.LocalGroupRequest) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(groupRequest))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupRequest) DeleteGroupRequest(ctx context.Context, groupID, userID string) error {
|
||||
_, err := exec.Exec(groupID, userID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupRequest) UpdateGroupRequest(ctx context.Context, groupRequest *model_struct.LocalGroupRequest) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(groupRequest))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupRequest) GetSendGroupApplication(ctx context.Context) ([]*model_struct.LocalGroupRequest, error) {
|
||||
result, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if v, ok := result.(string); ok {
|
||||
var request []*model_struct.LocalGroupRequest
|
||||
if err := utils.JsonStringToStruct(v, &request); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return request, nil
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalGroupRequest) InsertAdminGroupRequest(ctx context.Context, groupRequest *model_struct.LocalAdminGroupRequest) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(groupRequest))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupRequest) DeleteAdminGroupRequest(ctx context.Context, groupID, userID string) error {
|
||||
_, err := exec.Exec(groupID, userID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupRequest) UpdateAdminGroupRequest(ctx context.Context, groupRequest *model_struct.LocalAdminGroupRequest) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(groupRequest))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalGroupRequest) GetAdminGroupApplication(ctx context.Context) ([]*model_struct.LocalAdminGroupRequest, error) {
|
||||
result, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if v, ok := result.(string); ok {
|
||||
var request []*model_struct.LocalAdminGroupRequest
|
||||
if err := utils.JsonStringToStruct(v, &request); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return request, nil
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
101
go/chao-sdk-core/wasm/indexdb/init.go
Normal file
101
go/chao-sdk-core/wasm/indexdb/init.go
Normal file
@@ -0,0 +1,101 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
//1,使用wasm原生的方式,tinygo应用于go的嵌入式领域,支持的功能有限,支持go语言的子集,甚至json序列化都无法支持
|
||||
//2.函数命名遵从驼峰命名
|
||||
//3.提供的sql生成语句中,关于bool值需要特殊处理,create语句的设计的到bool值的需要在创建语句中单独说明,这是因为在原有的sqlite中并不支持bool,用整数1或者0替代,gorm对其做了转换。
|
||||
//4.提供的sql生成语句中,字段名是下划线方式 例如:recv_id,但是接口转换的数据json tag字段的风格是recvID,类似的所有的字段需要做个map映射
|
||||
//5.任何涉及到gorm获取的是否需要返回错误,比如take和find都需要在文档上说明
|
||||
//6.任何涉及到update的操作,一定要看gorm原型中实现,如果有select(*)则不需要用temp_struct中的结构体
|
||||
//7.任何和接口重名的时候,db接口统一加上后缀DB
|
||||
//8.任何map类型统一使用json字符串转换,文档说明
|
||||
|
||||
type IndexDB struct {
|
||||
LocalUsers
|
||||
LocalConversations
|
||||
*LocalChatLogs
|
||||
LocalSuperGroupChatLogs
|
||||
LocalSuperGroup
|
||||
LocalConversationUnreadMessages
|
||||
LocalGroups
|
||||
LocalGroupMember
|
||||
LocalGroupRequest
|
||||
LocalCacheMessage
|
||||
LocalStrangers
|
||||
LocalUserCommand
|
||||
*FriendRequest
|
||||
*Black
|
||||
*Friend
|
||||
LocalChatLogReactionExtensions
|
||||
loginUserID string
|
||||
}
|
||||
|
||||
func (i IndexDB) Close(ctx context.Context) error {
|
||||
_, err := exec.Exec()
|
||||
return err
|
||||
}
|
||||
|
||||
func (i IndexDB) InitDB(ctx context.Context, userID string, dataDir string) error {
|
||||
_, err := exec.Exec(userID, dataDir)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i IndexDB) SetChatLogFailedStatus(ctx context.Context) {
|
||||
//msgList, err := i.GetSendingMessageList()
|
||||
//if err != nil {
|
||||
// log.Error("", "GetSendingMessageList failed ", err.Error())
|
||||
// return
|
||||
//}
|
||||
//for _, v := range msgList {
|
||||
// v.Status = constant.MsgStatusSendFailed
|
||||
// err := i.UpdateMessage(v)
|
||||
// if err != nil {
|
||||
// log.Error("", "UpdateMessage failed ", err.Error(), v)
|
||||
// continue
|
||||
// }
|
||||
//}
|
||||
//groupIDList, err := i.GetReadDiffusionGroupIDList()
|
||||
//if err != nil {
|
||||
// log.Error("", "GetReadDiffusionGroupIDList failed ", err.Error())
|
||||
// return
|
||||
//}
|
||||
//for _, v := range groupIDList {
|
||||
// msgList, err := i.SuperGroupGetSendingMessageList(v)
|
||||
// if err != nil {
|
||||
// log.Error("", "GetSendingMessageList failed ", err.Error())
|
||||
// return
|
||||
// }
|
||||
// if len(msgList) > 0 {
|
||||
// for _, v := range msgList {
|
||||
// v.Status = constant.MsgStatusSendFailed
|
||||
// err := i.SuperGroupUpdateMessage(v)
|
||||
// if err != nil {
|
||||
// log.Error("", "UpdateMessage failed ", err.Error(), v)
|
||||
// continue
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
//
|
||||
//}
|
||||
}
|
||||
54
go/chao-sdk-core/wasm/indexdb/notification_model.go
Normal file
54
go/chao-sdk-core/wasm/indexdb/notification_model.go
Normal file
@@ -0,0 +1,54 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
type NotificationSeqs struct {
|
||||
}
|
||||
|
||||
func NewNotificationSeqs() *NotificationSeqs {
|
||||
return &NotificationSeqs{}
|
||||
}
|
||||
|
||||
func (i *NotificationSeqs) SetNotificationSeq(ctx context.Context, conversationID string, seq int64) error {
|
||||
_, err := exec.Exec(conversationID, seq)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *NotificationSeqs) GetNotificationAllSeqs(ctx context.Context) (result []*model_struct.NotificationSeqs, err error) {
|
||||
gList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
62
go/chao-sdk-core/wasm/indexdb/sending_messages_model.go
Normal file
62
go/chao-sdk-core/wasm/indexdb/sending_messages_model.go
Normal file
@@ -0,0 +1,62 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
type LocalSendingMessages struct {
|
||||
}
|
||||
|
||||
func NewLocalSendingMessages() *LocalSendingMessages {
|
||||
return &LocalSendingMessages{}
|
||||
}
|
||||
func (i *LocalSendingMessages) InsertSendingMessage(ctx context.Context, message *model_struct.LocalSendingMessages) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(message))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSendingMessages) DeleteSendingMessage(ctx context.Context, conversationID, clientMsgID string) error {
|
||||
_, err := exec.Exec(conversationID, clientMsgID)
|
||||
return err
|
||||
}
|
||||
func (i *LocalSendingMessages) GetAllSendingMessages(ctx context.Context) (result []*model_struct.LocalSendingMessages, err error) {
|
||||
gList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalSendingMessages
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
62
go/chao-sdk-core/wasm/indexdb/stranger_model.go
Normal file
62
go/chao-sdk-core/wasm/indexdb/stranger_model.go
Normal file
@@ -0,0 +1,62 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
)
|
||||
|
||||
type LocalStrangers struct {
|
||||
}
|
||||
|
||||
func NewLocalStrangers() *LocalStrangers {
|
||||
return &LocalStrangers{}
|
||||
}
|
||||
|
||||
func (l *LocalStrangers) GetStrangerInfo(ctx context.Context, userIDs []string) (result []*model_struct.LocalStranger, err error) {
|
||||
gList, err := exec.Exec(utils.StructToJsonString(userIDs))
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalStranger
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (l *LocalStrangers) SetStrangerInfo(ctx context.Context, strangerList []*model_struct.LocalStranger) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(strangerList))
|
||||
return err
|
||||
}
|
||||
461
go/chao-sdk-core/wasm/indexdb/super_group_chat_log_model.go
Normal file
461
go/chao-sdk-core/wasm/indexdb/super_group_chat_log_model.go
Normal file
@@ -0,0 +1,461 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/sdk_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/indexdb/temp_struct"
|
||||
)
|
||||
|
||||
type LocalSuperGroupChatLogs struct{}
|
||||
|
||||
func NewLocalSuperGroupChatLogs() *LocalSuperGroupChatLogs {
|
||||
return &LocalSuperGroupChatLogs{}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetNormalMinSeq(ctx context.Context, groupID string) (uint32, error) {
|
||||
seq, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
if v, ok := seq.(float64); ok {
|
||||
var result uint32
|
||||
result = uint32(v)
|
||||
return result, err
|
||||
} else {
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetMessage(ctx context.Context, message *sdk_struct.MsgStruct) (*model_struct.LocalChatLog, error) {
|
||||
msg, err := exec.Exec(message.GroupID, message.ClientMsgID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msg.(string); ok {
|
||||
result := model_struct.LocalChatLog{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupUpdateMessage(ctx context.Context, c *model_struct.LocalChatLog) error {
|
||||
if c.ClientMsgID == "" {
|
||||
return exec.PrimaryKeyNull
|
||||
}
|
||||
tempLocalChatLog := temp_struct.LocalChatLog{
|
||||
ServerMsgID: c.ServerMsgID,
|
||||
SendID: c.SendID,
|
||||
RecvID: c.RecvID,
|
||||
SenderPlatformID: c.SenderPlatformID,
|
||||
SenderNickname: c.SenderNickname,
|
||||
SenderFaceURL: c.SenderFaceURL,
|
||||
SessionType: c.SessionType,
|
||||
MsgFrom: c.MsgFrom,
|
||||
ContentType: c.ContentType,
|
||||
Content: c.Content,
|
||||
IsRead: c.IsRead,
|
||||
Status: c.Status,
|
||||
Seq: c.Seq,
|
||||
SendTime: c.SendTime,
|
||||
CreateTime: c.CreateTime,
|
||||
AttachedInfo: c.AttachedInfo,
|
||||
Ex: c.Ex,
|
||||
IsReact: c.IsReact,
|
||||
IsExternalExtensions: c.IsExternalExtensions,
|
||||
MsgFirstModifyTime: c.MsgFirstModifyTime,
|
||||
}
|
||||
_, err := exec.Exec(c.RecvID, c.ClientMsgID, utils.StructToJsonString(tempLocalChatLog))
|
||||
return err
|
||||
|
||||
}
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupBatchInsertMessageList(ctx context.Context, messageList []*model_struct.LocalChatLog, groupID string) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(messageList), groupID)
|
||||
return err
|
||||
}
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupInsertMessage(ctx context.Context, message *model_struct.LocalChatLog, groupID string) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(message), groupID)
|
||||
return err
|
||||
}
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetMultipleMessage(ctx context.Context, msgIDList []string, groupID string) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(utils.StructToJsonString(msgIDList), groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupUpdateMessageTimeAndStatus(ctx context.Context, msg *sdk_struct.MsgStruct) error {
|
||||
_, err := exec.Exec(msg.GroupID, msg.ClientMsgID, msg.ServerMsgID, msg.SendTime, msg.Status)
|
||||
return err
|
||||
}
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetMessageListNoTime(ctx context.Context, sourceID string, sessionType, count int, isReverse bool) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(sourceID, sessionType, count, isReverse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetMessageList(ctx context.Context, sourceID string, sessionType, count int, startTime int64, isReverse bool) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(sourceID, sessionType, count, startTime, isReverse)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupSearchMessageByKeyword(ctx context.Context, contentType []int, keywordList []string, keywordListMatchType int, sourceID string, startTime, endTime int64, sessionType, offset, count int) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(utils.StructToJsonString(contentType), utils.StructToJsonString(keywordList), keywordListMatchType, sourceID, startTime, endTime, sessionType, offset, count)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupSearchAllMessageByContentType(ctx context.Context, superGroupID string, contentType int32) (result []*model_struct.LocalChatLog, err error) {
|
||||
msgList, err := exec.Exec(superGroupID, contentType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := msgList.(string); ok {
|
||||
var temp []*model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) InitSuperLocalErrChatLog(ctx context.Context, groupID string) {
|
||||
_, _ = exec.Exec(groupID)
|
||||
}
|
||||
func (i *LocalSuperGroupChatLogs) SuperBatchInsertExceptionMsg(ctx context.Context, MessageList []*model_struct.LocalErrChatLog, groupID string) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(MessageList), groupID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) InitSuperLocalChatLog(ctx context.Context, groupID string) {
|
||||
_, _ = exec.Exec(groupID)
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupDeleteAllMessage(ctx context.Context, groupID string) error {
|
||||
_, err := exec.Exec(groupID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupSearchMessageByContentTypeAndKeyword(ctx context.Context, contentType []int, keywordList []string, keywordListMatchType int, startTime, endTime int64, groupID string) (result []*model_struct.LocalChatLog, err error) {
|
||||
gList, err := exec.Exec(utils.StructToJsonString(contentType), utils.StructToJsonString(keywordList), keywordListMatchType, startTime, endTime, groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var temp []model_struct.LocalChatLog
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupBatchUpdateMessageList(ctx context.Context, MessageList []*model_struct.LocalChatLog) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(MessageList))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupMessageIfExists(ctx context.Context, ClientMsgID string) (bool, error) {
|
||||
isExist, err := exec.Exec(ClientMsgID)
|
||||
if err != nil {
|
||||
return false, err
|
||||
} else {
|
||||
if v, ok := isExist.(bool); ok {
|
||||
return v, nil
|
||||
} else {
|
||||
return false, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupIsExistsInErrChatLogBySeq(ctx context.Context, seq int64) bool {
|
||||
isExist, err := exec.Exec(seq)
|
||||
if err != nil {
|
||||
return false
|
||||
} else {
|
||||
if v, ok := isExist.(bool); ok {
|
||||
return v
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupMessageIfExistsBySeq(ctx context.Context, seq int64) (bool, error) {
|
||||
isExist, err := exec.Exec(seq)
|
||||
if err != nil {
|
||||
return false, err
|
||||
} else {
|
||||
if v, ok := isExist.(bool); ok {
|
||||
return v, nil
|
||||
} else {
|
||||
return false, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetAllUnDeleteMessageSeqList(ctx context.Context) ([]uint32, error) {
|
||||
gList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var result []uint32
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupUpdateColumnsMessage(ctx context.Context, clientMsgID, groupID string, args map[string]interface{}) error {
|
||||
_, err := exec.Exec(clientMsgID, groupID, utils.StructToJsonString(args))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupUpdateMessageStatusBySourceID(ctx context.Context, sourceID string, status, sessionType int32) error {
|
||||
_, err := exec.Exec(sourceID, status, sessionType)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetSendingMessageList(ctx context.Context, groupID string) (result []*model_struct.LocalChatLog, err error) {
|
||||
gList, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupUpdateGroupMessageHasRead(ctx context.Context, msgIDList []string, groupID string) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(msgIDList), groupID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetNormalMsgSeq(ctx context.Context) (uint32, error) {
|
||||
seq, err := exec.Exec()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
if v, ok := seq.(float64); ok {
|
||||
return uint32(v), nil
|
||||
} else {
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetTestMessage(ctx context.Context, seq uint32) (*model_struct.LocalChatLog, error) {
|
||||
c, err := exec.Exec(seq)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := c.(string); ok {
|
||||
result := model_struct.LocalChatLog{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupUpdateMsgSenderNickname(ctx context.Context, sendID, nickname string, sType int) error {
|
||||
_, err := exec.Exec(sendID, nickname, sType)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupUpdateMsgSenderFaceURL(ctx context.Context, sendID, faceURL string, sType int) error {
|
||||
_, err := exec.Exec(sendID, faceURL, sType)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupUpdateMsgSenderFaceURLAndSenderNickname(ctx context.Context, sendID, faceURL, nickname string, sessionType int, groupID string) error {
|
||||
_, err := exec.Exec(sendID, faceURL, nickname, sessionType, groupID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetMsgSeqByClientMsgID(ctx context.Context, clientMsgID string, groupID string) (uint32, error) {
|
||||
seq, err := exec.Exec(clientMsgID, groupID)
|
||||
if err != nil {
|
||||
return 0, err
|
||||
} else {
|
||||
if v, ok := seq.(float64); ok {
|
||||
return uint32(v), nil
|
||||
} else {
|
||||
return 0, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetMsgSeqListByGroupID(ctx context.Context, groupID string) ([]uint32, error) {
|
||||
gList, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var result []uint32
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetMsgSeqListByPeerUserID(ctx context.Context, userID string) ([]uint32, error) {
|
||||
gList, err := exec.Exec(userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var result []uint32
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroupChatLogs) SuperGroupGetMsgSeqListBySelfUserID(ctx context.Context, userID string) ([]uint32, error) {
|
||||
gList, err := exec.Exec(userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := gList.(string); ok {
|
||||
var result []uint32
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
128
go/chao-sdk-core/wasm/indexdb/super_group_model.go
Normal file
128
go/chao-sdk-core/wasm/indexdb/super_group_model.go
Normal file
@@ -0,0 +1,128 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
type LocalSuperGroup struct{}
|
||||
|
||||
func NewLocalSuperGroup() *LocalSuperGroup {
|
||||
return &LocalSuperGroup{}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroup) GetJoinedSuperGroupList(ctx context.Context) (result []*model_struct.LocalGroup, err error) {
|
||||
groupList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := groupList.(string); ok {
|
||||
var temp []model_struct.LocalGroup
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroup) InsertSuperGroup(ctx context.Context, groupInfo *model_struct.LocalGroup) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(groupInfo))
|
||||
return err
|
||||
}
|
||||
func (i *LocalSuperGroup) UpdateSuperGroup(ctx context.Context, g *model_struct.LocalGroup) error {
|
||||
_, err := exec.Exec(g.GroupID, utils.StructToJsonString(g))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroup) DeleteSuperGroup(ctx context.Context, groupID string) error {
|
||||
_, err := exec.Exec(groupID)
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroup) DeleteAllSuperGroup(ctx context.Context) error {
|
||||
_, err := exec.Exec()
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroup) GetSuperGroupInfoByGroupID(ctx context.Context, groupID string) (*model_struct.LocalGroup, error) {
|
||||
groupInfo, err := exec.Exec(groupID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := groupInfo.(string); ok {
|
||||
result := model_struct.LocalGroup{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroup) GetJoinedWorkingGroupIDList(ctx context.Context) ([]string, error) {
|
||||
IDList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if v, ok := IDList.(string); ok {
|
||||
var temp []string
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return temp, nil
|
||||
}
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
|
||||
func (i *LocalSuperGroup) GetJoinedWorkingGroupList(ctx context.Context) (result []*model_struct.LocalGroup, err error) {
|
||||
groupList, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := groupList.(string); ok {
|
||||
var temp []model_struct.LocalGroup
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, v := range temp {
|
||||
v1 := v
|
||||
result = append(result, &v1)
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
178
go/chao-sdk-core/wasm/indexdb/temp_struct/struct.go
Normal file
178
go/chao-sdk-core/wasm/indexdb/temp_struct/struct.go
Normal file
@@ -0,0 +1,178 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package temp_struct
|
||||
|
||||
type LocalChatLog struct {
|
||||
ServerMsgID string ` json:"serverMsgID,omitempty"`
|
||||
SendID string ` json:"sendID,omitempty"`
|
||||
RecvID string ` json:"recvID,omitempty"`
|
||||
SenderPlatformID int32 ` json:"senderPlatformID,omitempty"`
|
||||
SenderNickname string ` json:"senderNickname,omitempty"`
|
||||
SenderFaceURL string ` json:"senderFaceURL,omitempty"`
|
||||
SessionType int32 ` json:"sessionType,omitempty"`
|
||||
MsgFrom int32 ` json:"msgFrom,omitempty"`
|
||||
ContentType int32 ` json:"contentType,omitempty"`
|
||||
Content string ` json:"content,omitempty"`
|
||||
IsRead bool ` json:"isRead,omitempty"`
|
||||
Status int32 ` json:"status,omitempty"`
|
||||
Seq int64 ` json:"seq,omitempty"`
|
||||
SendTime int64 ` json:"sendTime,omitempty"`
|
||||
CreateTime int64 ` json:"createTime,omitempty"`
|
||||
AttachedInfo string ` json:"attachedInfo,omitempty"`
|
||||
Ex string ` json:"ex,omitempty"`
|
||||
IsReact bool ` json:"isReact,omitempty"`
|
||||
IsExternalExtensions bool ` json:"isExternalExtensions,omitempty"`
|
||||
MsgFirstModifyTime int64 ` json:"msgFirstModifyTime,omitempty"`
|
||||
}
|
||||
type LocalConversation struct {
|
||||
ConversationID string ` json:"conversationID,omitempty"`
|
||||
ConversationType int32 ` json:"conversationType,omitempty"`
|
||||
UserID string ` json:"userID,omitempty"`
|
||||
GroupID string ` json:"groupID,omitempty"`
|
||||
ShowName string ` json:"showName,omitempty"`
|
||||
FaceURL string ` json:"faceURL,omitempty"`
|
||||
RecvMsgOpt int32 ` json:"recvMsgOpt,omitempty"`
|
||||
UnreadCount int32 ` json:"unreadCount,omitempty"`
|
||||
GroupAtType int32 ` json:"groupAtType,omitempty"`
|
||||
LatestMsg string ` json:"latestMsg,omitempty"`
|
||||
LatestMsgSendTime int64 ` json:"latestMsgSendTime,omitempty"`
|
||||
DraftText string ` json:"draftText,omitempty"`
|
||||
DraftTextTime int64 ` json:"draftTextTime,omitempty"`
|
||||
IsPinned bool ` json:"isPinned,omitempty"`
|
||||
IsPrivateChat bool ` json:"isPrivateChat,omitempty"`
|
||||
BurnDuration int32 ` json:"burnDuration,omitempty"`
|
||||
IsNotInGroup bool ` json:"isNotInGroup,omitempty"`
|
||||
UpdateUnreadCountTime int64 ` json:"updateUnreadCountTime,omitempty"`
|
||||
AttachedInfo string ` json:"attachedInfo,omitempty"`
|
||||
Ex string ` json:"ex,omitempty"`
|
||||
}
|
||||
type LocalPartConversation struct {
|
||||
RecvMsgOpt int32 ` json:"recvMsgOpt"`
|
||||
GroupAtType int32 ` json:"groupAtType"`
|
||||
IsPinned bool ` json:"isPinned,"`
|
||||
IsPrivateChat bool ` json:"isPrivateChat"`
|
||||
IsNotInGroup bool ` json:"isNotInGroup"`
|
||||
UpdateUnreadCountTime int64 ` json:"updateUnreadCountTime"`
|
||||
BurnDuration int32 ` json:"burnDuration,omitempty"`
|
||||
AttachedInfo string ` json:"attachedInfo"`
|
||||
Ex string ` json:"ex"`
|
||||
}
|
||||
|
||||
type LocalSuperGroup struct {
|
||||
GroupID string `json:"groupID,omitempty"`
|
||||
GroupName string `json:"groupName,omitempty"`
|
||||
Notification string `json:"notification,omitempty"`
|
||||
Introduction string `json:"introduction,omitempty"`
|
||||
FaceURL string `json:"faceURL,omitempty"`
|
||||
CreateTime uint32 `json:"createTime,omitempty"`
|
||||
Status int32 `json:"status,omitempty"`
|
||||
CreatorUserID string `json:"creatorUserID,omitempty"`
|
||||
GroupType int32 `json:"groupType,omitempty"`
|
||||
OwnerUserID string `json:"ownerUserID,omitempty"`
|
||||
MemberCount int32 `json:"memberCount,omitempty"`
|
||||
Ex string `json:"ex,omitempty"`
|
||||
AttachedInfo string `json:"attachedInfo,omitempty"`
|
||||
NeedVerification int32 `json:"needVerification,omitempty"`
|
||||
LookMemberInfo int32 `json:"lookMemberInfo,omitempty"`
|
||||
ApplyMemberFriend int32 `json:"applyMemberFriend,omitempty"`
|
||||
NotificationUpdateTime uint32 `json:"notificationUpdateTime,omitempty"`
|
||||
NotificationUserID string `json:"notificationUserID,omitempty"`
|
||||
}
|
||||
|
||||
type LocalGroup struct {
|
||||
GroupID string `json:"groupID,omitempty"`
|
||||
GroupName string `json:"groupName,omitempty"`
|
||||
Notification string `json:"notification,omitempty"`
|
||||
Introduction string `json:"introduction,omitempty"`
|
||||
FaceURL string `json:"faceURL,omitempty"`
|
||||
CreateTime uint32 `json:"createTime,omitempty"`
|
||||
Status int32 `json:"status,omitempty"`
|
||||
CreatorUserID string `json:"creatorUserID,omitempty"`
|
||||
GroupType int32 `json:"groupType,omitempty"`
|
||||
OwnerUserID string `json:"ownerUserID,omitempty"`
|
||||
MemberCount int32 `json:"memberCount,omitempty"`
|
||||
Ex string `json:"ex,omitempty"`
|
||||
AttachedInfo string `json:"attachedInfo,omitempty"`
|
||||
NeedVerification int32 `json:"needVerification,omitempty"`
|
||||
LookMemberInfo int32 `json:"lookMemberInfo,omitempty"`
|
||||
ApplyMemberFriend int32 `json:"applyMemberFriend,omitempty"`
|
||||
NotificationUpdateTime uint32 `json:"notificationUpdateTime,omitempty"`
|
||||
NotificationUserID string `json:"notificationUserID,omitempty"`
|
||||
}
|
||||
|
||||
type LocalFriendRequest struct {
|
||||
FromUserID string `json:"fromUserID,omitempty"`
|
||||
FromNickname string `json:"fromNickname,omitempty"`
|
||||
FromFaceURL string `json:"fromFaceURL,omitempty"`
|
||||
ToUserID string `json:"toUserID,omitempty"`
|
||||
ToNickname string `json:"toNickname,omitempty"`
|
||||
ToFaceURL string `json:"toFaceURL,omitempty"`
|
||||
HandleResult int32 `json:"handleResult,omitempty"`
|
||||
ReqMsg string `json:"reqMsg,omitempty"`
|
||||
CreateTime int64 `json:"createTime,omitempty"`
|
||||
HandlerUserID string `json:"handlerUserID,omitempty"`
|
||||
HandleMsg string `json:"handleMsg,omitempty"`
|
||||
HandleTime int64 `json:"handleTime,omitempty"`
|
||||
Ex string `json:"ex,omitempty"`
|
||||
AttachedInfo string `json:"attachedInfo,omitempty"`
|
||||
}
|
||||
|
||||
type LocalBlack struct {
|
||||
OwnerUserID string `json:"ownerUserID,omitempty"`
|
||||
BlockUserID string `json:"blockUserID,omitempty"`
|
||||
Nickname string `json:"nickname,omitempty"`
|
||||
FaceURL string `json:"faceURL,omitempty"`
|
||||
CreateTime int64 `json:"createTime,omitempty"`
|
||||
AddSource int32 `json:"addSource,omitempty"`
|
||||
OperatorUserID string `json:"operatorUserID,omitempty"`
|
||||
Ex string `json:"ex,omitempty"`
|
||||
AttachedInfo string `json:"attachedInfo,omitempty"`
|
||||
}
|
||||
|
||||
type LocalFriend struct {
|
||||
OwnerUserID string `json:"ownerUserID,omitempty"`
|
||||
FriendUserID string `json:"friendUserID,omitempty"`
|
||||
Remark string `json:"remark,omitempty"`
|
||||
CreateTime int64 `json:"createTime,omitempty"`
|
||||
AddSource int32 `json:"addSource,omitempty"`
|
||||
OperatorUserID string `json:"operatorUserID,omitempty"`
|
||||
Nickname string `json:"nickname,omitempty"`
|
||||
FaceURL string `json:"faceURL,omitempty"`
|
||||
Ex string `json:"ex,omitempty"`
|
||||
AttachedInfo string `json:"attachedInfo,omitempty"`
|
||||
IsPinned bool `json:"isPinned,omitempty"`
|
||||
}
|
||||
|
||||
type LocalUser struct {
|
||||
UserID string `json:"userID,omitempty"`
|
||||
Nickname string `json:"nickname,omitempty"`
|
||||
FaceURL string `json:"faceURL,omitempty"`
|
||||
CreateTime int64 `json:"createTime,omitempty"`
|
||||
AppMangerLevel int32 `json:"-"`
|
||||
Ex string `json:"ex,omitempty"`
|
||||
AttachedInfo string `json:"attachedInfo,omitempty"`
|
||||
GlobalRecvMsgOpt int32 `json:"globalRecvMsgOpt,omitempty"`
|
||||
}
|
||||
|
||||
type LocalUserCommand struct {
|
||||
UserID string `json:"userID,omitempty"`
|
||||
Type int32 `json:"type,omitempty"`
|
||||
CreateTime int64 `json:"createTime,omitempty"`
|
||||
Uuid string `json:"uuid,omitempty"`
|
||||
Value string `json:"value,omitempty"`
|
||||
}
|
||||
68
go/chao-sdk-core/wasm/indexdb/upload_model.go
Normal file
68
go/chao-sdk-core/wasm/indexdb/upload_model.go
Normal file
@@ -0,0 +1,68 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
type LocalUpload struct{}
|
||||
|
||||
func NewLocalUpload() *LocalUpload {
|
||||
return &LocalUpload{}
|
||||
}
|
||||
|
||||
func (i *LocalUpload) GetUpload(ctx context.Context, partHash string) (*model_struct.LocalUpload, error) {
|
||||
c, err := exec.Exec(partHash)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := c.(string); ok {
|
||||
result := model_struct.LocalUpload{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalUpload) InsertUpload(ctx context.Context, upload *model_struct.LocalUpload) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(upload))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalUpload) DeleteUpload(ctx context.Context, partHash string) error {
|
||||
_, err := exec.Exec(partHash)
|
||||
return err
|
||||
}
|
||||
func (i *LocalUpload) UpdateUpload(ctx context.Context, upload *model_struct.LocalUpload) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(upload))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalUpload) DeleteExpireUpload(ctx context.Context) error {
|
||||
//TODO implement me
|
||||
panic("implement me")
|
||||
}
|
||||
63
go/chao-sdk-core/wasm/indexdb/user_command.go
Normal file
63
go/chao-sdk-core/wasm/indexdb/user_command.go
Normal file
@@ -0,0 +1,63 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
type LocalUserCommand struct{}
|
||||
|
||||
func NewLocalUserCommand() *LocalUserCommand {
|
||||
return &LocalUserCommand{}
|
||||
}
|
||||
|
||||
func (i *LocalUserCommand) ProcessUserCommandGetAll(ctx context.Context) ([]*model_struct.LocalUserCommand, error) {
|
||||
c, err := exec.Exec()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := c.(string); ok {
|
||||
result := []*model_struct.LocalUserCommand{}
|
||||
err := utils.JsonStringToStruct(v, &result)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (i *LocalUserCommand) ProcessUserCommandAdd(ctx context.Context, command *model_struct.LocalUserCommand) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(command))
|
||||
return err
|
||||
}
|
||||
|
||||
func (i *LocalUserCommand) ProcessUserCommandUpdate(ctx context.Context, command *model_struct.LocalUserCommand) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(command))
|
||||
return err
|
||||
}
|
||||
func (i *LocalUserCommand) ProcessUserCommandDelete(ctx context.Context, command *model_struct.LocalUserCommand) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(command))
|
||||
return err
|
||||
}
|
||||
96
go/chao-sdk-core/wasm/indexdb/user_model.go
Normal file
96
go/chao-sdk-core/wasm/indexdb/user_model.go
Normal file
@@ -0,0 +1,96 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package indexdb
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/exec"
|
||||
)
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/db/model_struct"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/indexdb/temp_struct"
|
||||
"time"
|
||||
)
|
||||
|
||||
type LocalUsers struct {
|
||||
}
|
||||
|
||||
func NewLocalUsers() *LocalUsers {
|
||||
return &LocalUsers{}
|
||||
}
|
||||
|
||||
func (l *LocalUsers) GetLoginUser(ctx context.Context, userID string) (*model_struct.LocalUser, error) {
|
||||
user, err := exec.Exec(userID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
} else {
|
||||
if v, ok := user.(string); ok {
|
||||
result := model_struct.LocalUser{}
|
||||
temp := temp_struct.LocalUser{}
|
||||
err := utils.JsonStringToStruct(v, &temp)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
result.UserID = temp.UserID
|
||||
result.Nickname = temp.Nickname
|
||||
result.FaceURL = temp.FaceURL
|
||||
result.CreateTime = temp.CreateTime
|
||||
result.AppMangerLevel = temp.AppMangerLevel
|
||||
result.Ex = temp.Ex
|
||||
result.AttachedInfo = temp.Ex
|
||||
result.GlobalRecvMsgOpt = temp.GlobalRecvMsgOpt
|
||||
return &result, err
|
||||
} else {
|
||||
return nil, exec.ErrType
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func (l *LocalUsers) UpdateLoginUser(ctx context.Context, user *model_struct.LocalUser) error {
|
||||
_, err := exec.Exec(utils.StructToJsonString(user))
|
||||
return err
|
||||
|
||||
}
|
||||
func (l *LocalUsers) UpdateLoginUserByMap(ctx context.Context, user *model_struct.LocalUser, args map[string]interface{}) error {
|
||||
if v, ok := args["birth_time"]; ok {
|
||||
if t, ok := v.(time.Time); ok {
|
||||
args["birth_time"] = utils.TimeToString(t)
|
||||
} else {
|
||||
return exec.ErrType
|
||||
}
|
||||
}
|
||||
_, err := exec.Exec(user.UserID, args)
|
||||
return err
|
||||
}
|
||||
|
||||
func (l *LocalUsers) InsertLoginUser(ctx context.Context, user *model_struct.LocalUser) error {
|
||||
temp := temp_struct.LocalUser{}
|
||||
temp.UserID = user.UserID
|
||||
temp.Nickname = user.Nickname
|
||||
temp.FaceURL = user.FaceURL
|
||||
temp.CreateTime = user.CreateTime
|
||||
temp.AppMangerLevel = user.AppMangerLevel
|
||||
temp.Ex = user.Ex
|
||||
temp.AttachedInfo = user.Ex
|
||||
temp.GlobalRecvMsgOpt = user.GlobalRecvMsgOpt
|
||||
_, err := exec.Exec(utils.StructToJsonString(temp))
|
||||
return err
|
||||
}
|
||||
325
go/chao-sdk-core/wasm/wasm_wrapper/wasm_conversation_msg.go
Normal file
325
go/chao-sdk-core/wasm/wasm_wrapper/wasm_conversation_msg.go
Normal file
@@ -0,0 +1,325 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package wasm_wrapper
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/open_im_sdk"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/event_listener"
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
// ------------------------------------message---------------------------
|
||||
type WrapperConMsg struct {
|
||||
*WrapperCommon
|
||||
}
|
||||
|
||||
func NewWrapperConMsg(wrapperCommon *WrapperCommon) *WrapperConMsg {
|
||||
return &WrapperConMsg{WrapperCommon: wrapperCommon}
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) CreateTextMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateTextMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateImageMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateImageMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateImageMessageByURL(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateImageMessageByURL, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateSoundMessageByURL(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateSoundMessageByURL, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateVideoMessageByURL(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateVideoMessageByURL, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateFileMessageByURL(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateFileMessageByURL, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateCustomMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateCustomMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateQuoteMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateQuoteMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateAdvancedQuoteMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateAdvancedQuoteMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateAdvancedTextMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateAdvancedTextMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateCardMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateCardMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateTextAtMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateTextAtMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) CreateVideoMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateVideoMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) CreateFileMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateFileMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) CreateMergerMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateMergerMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) CreateFaceMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateFaceMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) CreateForwardMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateForwardMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) CreateLocationMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateLocationMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) CreateVideoMessageFromFullPath(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateVideoMessageFromFullPath, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) CreateImageMessageFromFullPath(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateImageMessageFromFullPath, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) CreateSoundMessageFromFullPath(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateSoundMessageFromFullPath, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) CreateFileMessageFromFullPath(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateFileMessageFromFullPath, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) CreateSoundMessage(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.CreateSoundMessage, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) GetAtAllTag(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.GetAtAllTag, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) MarkConversationMessageAsRead(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.MarkConversationMessageAsRead, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) MarkMessagesAsReadByMsgID(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.MarkMessagesAsReadByMsgID, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) SendMessage(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewSendMessageCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc).SetClientMsgID(&args)
|
||||
return event_listener.NewCaller(open_im_sdk.SendMessage, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) SendMessageNotOss(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewSendMessageCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc).SetClientMsgID(&args)
|
||||
return event_listener.NewCaller(open_im_sdk.SendMessageNotOss, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
//funcation (w *WrapperConMsg) SetMessageReactionExtensions(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.SetMessageReactionExtensions, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
//funcation (w *WrapperConMsg) AddMessageReactionExtensions(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.AddMessageReactionExtensions, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
//
|
||||
//funcation (w *WrapperConMsg) DeleteMessageReactionExtensions(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.DeleteMessageReactionExtensions, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
//funcation (w *WrapperConMsg) GetMessageListReactionExtensions(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.GetMessageListReactionExtensions, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
//funcation (w *WrapperConMsg) GetMessageListSomeReactionExtensions(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.GetMessageListSomeReactionExtensions, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
|
||||
//------------------------------------conversation---------------------------
|
||||
|
||||
func (w *WrapperConMsg) GetAllConversationList(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetAllConversationList, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) GetConversationListSplit(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetConversationListSplit, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) GetOneConversation(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetOneConversation, callback, &args).AsyncCallWithCallback()
|
||||
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) GetAdvancedHistoryMessageList(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetAdvancedHistoryMessageList, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) GetAdvancedHistoryMessageListReverse(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetAdvancedHistoryMessageListReverse, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
//funcation (w *WrapperConMsg) GetHistoryMessageList(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.GetHistoryMessageList, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
|
||||
func (w *WrapperConMsg) GetMultipleConversation(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetMultipleConversation, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) SetConversationPrivateChat(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetConversationPrivateChat, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) SetConversationRecvMessageOpt(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetConversationRecvMessageOpt, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) SearchConversation(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SearchConversation, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) SetGlobalRecvMessageOpt(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetGlobalRecvMessageOpt, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) FindMessageList(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.FindMessageList, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) RevokeMessage(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.RevokeMessage, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) TypingStatusUpdate(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.TypingStatusUpdate, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) DeleteMessageFromLocalStorage(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.DeleteMessageFromLocalStorage, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) DeleteMessage(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.DeleteMessage, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) HideAllConversations(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.HideAllConversations, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) DeleteAllMsgFromLocalAndSvr(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.DeleteAllMsgFromLocalAndSvr, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) DeleteAllMsgFromLocal(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.DeleteAllMsgFromLocal, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) ClearConversationAndDeleteAllMsg(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.ClearConversationAndDeleteAllMsg, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) InsertSingleMessageToLocalStorage(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.InsertSingleMessageToLocalStorage, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) InsertGroupMessageToLocalStorage(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.InsertGroupMessageToLocalStorage, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) SearchLocalMessages(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SearchLocalMessages, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) SetMessageLocalEx(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetMessageLocalEx, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) DeleteConversationAndDeleteAllMsg(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.DeleteConversationAndDeleteAllMsg, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) HideConversation(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.HideConversation, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) SetConversationEx(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetConversationEx, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperConMsg) SetConversationDraft(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetConversationDraft, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) ResetConversationGroupAtType(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.ResetConversationGroupAtType, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) PinConversation(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
|
||||
return event_listener.NewCaller(open_im_sdk.PinConversation, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) GetTotalUnreadMsgCount(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetTotalUnreadMsgCount, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) SetConversationBurnDuration(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetConversationBurnDuration, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) ChangeInputStates(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.ChangeInputStates, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperConMsg) GetInputStates(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetInputStates, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
111
go/chao-sdk-core/wasm/wasm_wrapper/wasm_friend.go
Normal file
111
go/chao-sdk-core/wasm/wasm_wrapper/wasm_friend.go
Normal file
@@ -0,0 +1,111 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package wasm_wrapper
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/open_im_sdk"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/event_listener"
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
// ------------------------------------group---------------------------
|
||||
type WrapperFriend struct {
|
||||
*WrapperCommon
|
||||
}
|
||||
|
||||
func NewWrapperFriend(wrapperCommon *WrapperCommon) *WrapperFriend {
|
||||
return &WrapperFriend{WrapperCommon: wrapperCommon}
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) GetSpecifiedFriendsInfo(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetSpecifiedFriendsInfo, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) GetFriendList(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetFriendList, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) SearchFriends(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SearchFriends, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) CheckFriend(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.CheckFriend, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) AddFriend(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.AddFriend, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) SetFriendRemark(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetFriendRemark, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperFriend) PinFriends(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.PinFriends, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperFriend) DeleteFriend(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.DeleteFriend, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) GetFriendApplicationListAsRecipient(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetFriendApplicationListAsRecipient, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) GetFriendApplicationListAsApplicant(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetFriendApplicationListAsApplicant, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) AcceptFriendApplication(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.AcceptFriendApplication, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) RefuseFriendApplication(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.RefuseFriendApplication, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) GetBlackList(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetBlackList, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) RemoveBlack(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.RemoveBlack, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperFriend) AddBlack(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.AddBlack, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperFriend) SetFriendsEx(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetFriendsEx, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
179
go/chao-sdk-core/wasm/wasm_wrapper/wasm_group.go
Normal file
179
go/chao-sdk-core/wasm/wasm_wrapper/wasm_group.go
Normal file
@@ -0,0 +1,179 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package wasm_wrapper
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/open_im_sdk"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/event_listener"
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
// ------------------------------------group---------------------------
|
||||
type WrapperGroup struct {
|
||||
*WrapperCommon
|
||||
}
|
||||
|
||||
func NewWrapperGroup(wrapperCommon *WrapperCommon) *WrapperGroup {
|
||||
return &WrapperGroup{WrapperCommon: wrapperCommon}
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) CreateGroup(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.CreateGroup, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) JoinGroup(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.JoinGroup, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) QuitGroup(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.QuitGroup, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) DismissGroup(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.DismissGroup, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) ChangeGroupMute(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.ChangeGroupMute, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) ChangeGroupMemberMute(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.ChangeGroupMemberMute, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) SetGroupMemberRoleLevel(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetGroupMemberRoleLevel, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) SetGroupMemberInfo(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetGroupMemberInfo, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) GetJoinedGroupList(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetJoinedGroupList, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) SearchGroups(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SearchGroups, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) SetGroupInfo(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetGroupInfo, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) SetGroupVerification(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetGroupVerification, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) SetGroupLookMemberInfo(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetGroupLookMemberInfo, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) SetGroupApplyMemberFriend(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetGroupApplyMemberFriend, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) GetGroupMemberList(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetGroupMemberList, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) GetGroupMemberOwnerAndAdmin(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetGroupMemberOwnerAndAdmin, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) GetGroupMemberListByJoinTimeFilter(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetGroupMemberListByJoinTimeFilter, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) GetSpecifiedGroupMembersInfo(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetSpecifiedGroupMembersInfo, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) KickGroupMember(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.KickGroupMember, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) TransferGroupOwner(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.TransferGroupOwner, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) InviteUserToGroup(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.InviteUserToGroup, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) GetGroupApplicationListAsRecipient(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetGroupApplicationListAsRecipient, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) GetGroupApplicationListAsApplicant(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetGroupApplicationListAsApplicant, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) AcceptGroupApplication(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.AcceptGroupApplication, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) RefuseGroupApplication(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.RefuseGroupApplication, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) SetGroupMemberNickname(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetGroupMemberNickname, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) SearchGroupMembers(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SearchGroupMembers, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) IsJoinGroup(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.IsJoinGroup, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperGroup) GetSpecifiedGroupsInfo(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetSpecifiedGroupsInfo, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
138
go/chao-sdk-core/wasm/wasm_wrapper/wasm_init_login.go
Normal file
138
go/chao-sdk-core/wasm/wasm_wrapper/wasm_init_login.go
Normal file
@@ -0,0 +1,138 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package wasm_wrapper
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/open_im_sdk"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/event_listener"
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
const COMMONEVENTFUNC = "commonEventFunc"
|
||||
|
||||
var ErrArgsLength = errors.New("from javascript args length err")
|
||||
var ErrFunNameNotSet = errors.New("reflect funcation not to set")
|
||||
|
||||
type SetListener struct {
|
||||
*WrapperCommon
|
||||
}
|
||||
|
||||
func NewSetListener(wrapperCommon *WrapperCommon) *SetListener {
|
||||
return &SetListener{WrapperCommon: wrapperCommon}
|
||||
}
|
||||
|
||||
func (s *SetListener) setConversationListener() {
|
||||
callback := event_listener.NewConversationCallback(s.commonFunc)
|
||||
open_im_sdk.SetConversationListener(callback)
|
||||
}
|
||||
func (s *SetListener) setAdvancedMsgListener() {
|
||||
callback := event_listener.NewAdvancedMsgCallback(s.commonFunc)
|
||||
open_im_sdk.SetAdvancedMsgListener(callback)
|
||||
}
|
||||
|
||||
func (s *SetListener) setBatchMessageListener() {
|
||||
callback := event_listener.NewBatchMessageCallback(s.commonFunc)
|
||||
open_im_sdk.SetBatchMsgListener(callback)
|
||||
}
|
||||
|
||||
func (s *SetListener) setFriendListener() {
|
||||
callback := event_listener.NewFriendCallback(s.commonFunc)
|
||||
open_im_sdk.SetFriendListener(callback)
|
||||
}
|
||||
|
||||
func (s *SetListener) setGroupListener() {
|
||||
callback := event_listener.NewGroupCallback(s.commonFunc)
|
||||
open_im_sdk.SetGroupListener(callback)
|
||||
}
|
||||
|
||||
func (s *SetListener) setUserListener() {
|
||||
callback := event_listener.NewUserCallback(s.commonFunc)
|
||||
open_im_sdk.SetUserListener(callback)
|
||||
}
|
||||
|
||||
func (s *SetListener) setSignalingListener() {
|
||||
//callback := event_listener.NewSignalingCallback(s.commonFunc)
|
||||
//open_im_sdk.SetSignalingListener(callback)
|
||||
}
|
||||
func (s *SetListener) setCustomBusinessListener() {
|
||||
callback := event_listener.NewCustomBusinessCallback(s.commonFunc)
|
||||
open_im_sdk.SetCustomBusinessListener(callback)
|
||||
}
|
||||
|
||||
func (s *SetListener) SetAllListener() {
|
||||
s.setConversationListener()
|
||||
s.setAdvancedMsgListener()
|
||||
s.setBatchMessageListener()
|
||||
s.setFriendListener()
|
||||
s.setGroupListener()
|
||||
s.setUserListener()
|
||||
s.setSignalingListener()
|
||||
s.setCustomBusinessListener()
|
||||
}
|
||||
|
||||
type WrapperCommon struct {
|
||||
commonFunc *js.Value
|
||||
}
|
||||
|
||||
func NewWrapperCommon() *WrapperCommon {
|
||||
return &WrapperCommon{}
|
||||
}
|
||||
func (w *WrapperCommon) CommonEventFunc(_ js.Value, args []js.Value) interface{} {
|
||||
if len(args) >= 1 {
|
||||
w.commonFunc = &args[len(args)-1]
|
||||
return js.ValueOf(true)
|
||||
} else {
|
||||
return js.ValueOf(false)
|
||||
}
|
||||
}
|
||||
|
||||
type WrapperInitLogin struct {
|
||||
*WrapperCommon
|
||||
}
|
||||
|
||||
func NewWrapperInitLogin(wrapperCommon *WrapperCommon) *WrapperInitLogin {
|
||||
return &WrapperInitLogin{WrapperCommon: wrapperCommon}
|
||||
}
|
||||
func (w *WrapperInitLogin) InitSDK(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewConnCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return js.ValueOf(event_listener.NewCaller(open_im_sdk.InitSDK, callback, &args).SyncCall())
|
||||
}
|
||||
func (w *WrapperInitLogin) Login(_ js.Value, args []js.Value) interface{} {
|
||||
listener := NewSetListener(w.WrapperCommon)
|
||||
listener.SetAllListener()
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.Login, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperInitLogin) Logout(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.Logout, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperInitLogin) NetworkStatusChanged(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.NetworkStatusChanged, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperInitLogin) GetLoginStatus(_ js.Value, args []js.Value) interface{} {
|
||||
return event_listener.NewCaller(open_im_sdk.GetLoginStatus, nil, &args).AsyncCallWithOutCallback()
|
||||
}
|
||||
func (w *WrapperInitLogin) SetAppBackgroundStatus(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetAppBackgroundStatus, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
67
go/chao-sdk-core/wasm/wasm_wrapper/wasm_signaling.go
Normal file
67
go/chao-sdk-core/wasm/wasm_wrapper/wasm_signaling.go
Normal file
@@ -0,0 +1,67 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package wasm_wrapper
|
||||
|
||||
// ------------------------------------group---------------------------
|
||||
type WrapperSignaling struct {
|
||||
*WrapperCommon
|
||||
}
|
||||
|
||||
func NewWrapperSignaling(wrapperCommon *WrapperCommon) *WrapperSignaling {
|
||||
return &WrapperSignaling{WrapperCommon: wrapperCommon}
|
||||
}
|
||||
|
||||
//func (w *WrapperSignaling) SignalingInviteInGroup(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.SignalingInviteInGroup, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
//
|
||||
//func (w *WrapperSignaling) SignalingInvite(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.SignalingInvite, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
//
|
||||
//func (w *WrapperSignaling) SignalingAccept(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.SignalingAccept, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
//
|
||||
//func (w *WrapperSignaling) SignalingReject(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.SignalingReject, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
//
|
||||
//func (w *WrapperSignaling) SignalingCancel(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.SignalingCancel, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
//
|
||||
//func (w *WrapperSignaling) SignalingHungUp(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.SignalingHungUp, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
//
|
||||
//func (w *WrapperSignaling) SignalingGetRoomByGroupID(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.SignalingGetRoomByGroupID, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
//
|
||||
//func (w *WrapperSignaling) SignalingGetTokenByRoomID(_ js.Value, args []js.Value) interface{} {
|
||||
// callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
// return event_listener.NewCaller(open_im_sdk.SignalingGetTokenByRoomID, callback, &args).AsyncCallWithCallback()
|
||||
//}
|
||||
109
go/chao-sdk-core/wasm/wasm_wrapper/wasm_third.go
Normal file
109
go/chao-sdk-core/wasm/wasm_wrapper/wasm_third.go
Normal file
@@ -0,0 +1,109 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package wasm_wrapper
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/open_im_sdk"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/open_im_sdk_callback"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/event_listener"
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
// ------------------------------------third---------------------------
|
||||
type WrapperThird struct {
|
||||
*WrapperCommon
|
||||
}
|
||||
|
||||
func NewWrapperThird(wrapperCommon *WrapperCommon) *WrapperThird {
|
||||
return &WrapperThird{WrapperCommon: wrapperCommon}
|
||||
}
|
||||
func (w *WrapperThird) UpdateFcmToken(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.UpdateFcmToken, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperThird) UploadFile(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewUploadFileCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc).SetUuid(&args)
|
||||
return event_listener.NewCaller(UploadFile, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
var _ open_im_sdk_callback.Base = (*TempBase)(nil)
|
||||
|
||||
type TempBase struct {
|
||||
u event_listener.UploadInterface
|
||||
}
|
||||
|
||||
func NewTempBase(u event_listener.UploadInterface) *TempBase {
|
||||
return &TempBase{u: u}
|
||||
}
|
||||
|
||||
func (t TempBase) OnError(errCode int32, errMsg string) {
|
||||
t.u.OnError(errCode, errMsg)
|
||||
}
|
||||
|
||||
func (t TempBase) OnSuccess(data string) {
|
||||
t.u.OnSuccess(data)
|
||||
}
|
||||
|
||||
var _ open_im_sdk_callback.UploadFileCallback = (*TempUploadFile)(nil)
|
||||
|
||||
type TempUploadFile struct {
|
||||
u event_listener.UploadInterface
|
||||
}
|
||||
|
||||
func NewTempUploadFile(u event_listener.UploadInterface) *TempUploadFile {
|
||||
return &TempUploadFile{u: u}
|
||||
}
|
||||
|
||||
func (t TempUploadFile) Open(size int64) {
|
||||
t.u.Open(size)
|
||||
}
|
||||
|
||||
func (t TempUploadFile) PartSize(partSize int64, num int) {
|
||||
t.u.PartSize(partSize, num)
|
||||
}
|
||||
|
||||
func (t TempUploadFile) HashPartProgress(index int, size int64, partHash string) {
|
||||
t.u.HashPartProgress(index, size, partHash)
|
||||
}
|
||||
|
||||
func (t TempUploadFile) HashPartComplete(partsHash string, fileHash string) {
|
||||
t.u.HashPartComplete(partsHash, fileHash)
|
||||
}
|
||||
|
||||
func (t TempUploadFile) UploadID(uploadID string) {
|
||||
t.u.UploadID(uploadID)
|
||||
}
|
||||
|
||||
func (t TempUploadFile) UploadPartComplete(index int, partSize int64, partHash string) {
|
||||
t.u.UploadPartComplete(index, partSize, partHash)
|
||||
}
|
||||
|
||||
func (t TempUploadFile) UploadComplete(fileSize int64, streamSize int64, storageSize int64) {
|
||||
t.u.UploadComplete(fileSize, streamSize, storageSize)
|
||||
}
|
||||
|
||||
func (t TempUploadFile) Complete(size int64, url string, typ int) {
|
||||
t.u.Complete(size, url, typ)
|
||||
}
|
||||
|
||||
func UploadFile(callback event_listener.UploadInterface, operationID string, req string) {
|
||||
b := NewTempBase(callback)
|
||||
t := NewTempUploadFile(callback)
|
||||
open_im_sdk.UploadFile(b, operationID, req, t)
|
||||
}
|
||||
89
go/chao-sdk-core/wasm/wasm_wrapper/wasm_user.go
Normal file
89
go/chao-sdk-core/wasm/wasm_wrapper/wasm_user.go
Normal file
@@ -0,0 +1,89 @@
|
||||
// Copyright © 2023 OpenIM SDK. All rights reserved.
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// http://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
//go:build js && wasm
|
||||
// +build js,wasm
|
||||
|
||||
package wasm_wrapper
|
||||
|
||||
import (
|
||||
"github.com/openimsdk/openim-sdk-core/v3/open_im_sdk"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/pkg/utils"
|
||||
"github.com/openimsdk/openim-sdk-core/v3/wasm/event_listener"
|
||||
"syscall/js"
|
||||
)
|
||||
|
||||
// ------------------------------------group---------------------------
|
||||
type WrapperUser struct {
|
||||
*WrapperCommon
|
||||
}
|
||||
|
||||
func NewWrapperUser(wrapperCommon *WrapperCommon) *WrapperUser {
|
||||
return &WrapperUser{WrapperCommon: wrapperCommon}
|
||||
}
|
||||
|
||||
func (w *WrapperUser) GetSelfUserInfo(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetSelfUserInfo, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperUser) SetSelfInfo(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetSelfInfo, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperUser) SetSelfInfoEx(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SetSelfInfoEx, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperUser) GetUsersInfo(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetUsersInfo, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperUser) GetUsersInfoWithCache(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetUsersInfoWithCache, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperUser) SubscribeUsersStatus(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.SubscribeUsersStatus, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperUser) UnsubscribeUsersStatus(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.UnsubscribeUsersStatus, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperUser) GetSubscribeUsersStatus(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetSubscribeUsersStatus, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
|
||||
func (w *WrapperUser) GetUserStatus(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetUserStatus, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperUser) AddUserCommand(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.AddUserCommand, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperUser) DeleteUserCommand(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.DeleteUserCommand, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
func (w *WrapperUser) GetAllUserCommands(_ js.Value, args []js.Value) interface{} {
|
||||
callback := event_listener.NewBaseCallback(utils.FirstLower(utils.GetSelfFuncName()), w.commonFunc)
|
||||
return event_listener.NewCaller(open_im_sdk.GetAllUserCommands, callback, &args).AsyncCallWithCallback()
|
||||
}
|
||||
Reference in New Issue
Block a user