bindbox-mini/utils/nakama-adapter.js

72 lines
1.8 KiB
JavaScript

// Nakama SDK 小程序适配器
// 将 uni-app 的 connectSocket 和 Storage 适配到 Web 标准接口
export const WebSocketAdapter = {
build: function (url) {
const socketTask = uni.connectSocket({
url: url,
complete: () => { }
});
const webSocket = {
url: url,
readyState: 0, // CONNECTING
onopen: null,
onclose: null,
onerror: null,
onmessage: null,
send: (data) => {
socketTask.send({
data: data
});
},
close: () => {
socketTask.close();
}
};
socketTask.onOpen(() => {
webSocket.readyState = 1; // OPEN
if (webSocket.onopen) {
webSocket.onopen({ type: 'open' });
}
});
socketTask.onClose((res) => {
webSocket.readyState = 3; // CLOSED
if (webSocket.onclose) {
webSocket.onclose({ code: res.code, reason: res.reason, wasClean: true });
}
});
socketTask.onError((err) => {
if (webSocket.onerror) {
webSocket.onerror({ error: err, message: err.errMsg });
}
});
socketTask.onMessage((res) => {
if (webSocket.onmessage) {
webSocket.onmessage({ data: res.data });
}
});
return webSocket;
}
};
export const localStorageAdapter = {
getItem: (key) => {
return uni.getStorageSync(key);
},
setItem: (key, value) => {
uni.setStorageSync(key, value);
},
removeItem: (key) => {
uni.removeStorageSync(key);
},
clear: () => {
uni.clearStorageSync();
}
};