feat: incr sync version.

This commit is contained in:
Gordon
2024-06-24 17:48:33 +08:00
parent e8ccae6349
commit 88b8043224
308 changed files with 55952 additions and 59 deletions

View 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

View 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))
}

View 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;
};
}
}
})();

View 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
}

View 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}
}
}

View 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)}
}

View 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 timeoutmaybe 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
}

View 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
}

View 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
}

View 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
}

View File

@@ -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
}

View 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
// }
//}
}

View File

@@ -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
}
}
}

View 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
}
}
}

View 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
}
}
}

View 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
}

View 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
}
}
}

View 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
}
}

View 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
// }
// }
// }
//
//}
}

View 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
}
}
}

View 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
}
}
}

View 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
}

View 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
}
}
}

View 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
}
}
}

View 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"`
}

View 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")
}

View 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
}

View 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
}

View 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()
}

View 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()
}

View 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()
}

View 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()
}

View 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()
//}

View 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)
}

View 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()
}