diff --git a/c_wrapper/build_dll.bat b/c_wrapper/build_dll.bat index a514873..b675feb 100644 --- a/c_wrapper/build_dll.bat +++ b/c_wrapper/build_dll.bat @@ -1,2 +1,2 @@ -go build -buildmode=c-shared -trimpath -ldflags="-s -w" -o openimsdk.dll export.go constant.go protocol.go +go build -buildmode=c-shared -trimpath -ldflags="-s -w" -o openimsdk.dll export.go constant.go protocol.go tools.go diff --git a/c_wrapper/export.go b/c_wrapper/export.go index 5bd82a8..661c265 100644 --- a/c_wrapper/export.go +++ b/c_wrapper/export.go @@ -2,10 +2,10 @@ package main /* #include -typedef void (*CB_I_I_S)(int,int,char *); +typedef void (*CB_I_S)(int,char *); typedef void (*CB_I_S_S)(int,char *,char *); typedef void (*CB_I_S_S_I)(int,char *,char *,int); -extern void Call_CB_I_I_S(CB_I_I_S func,int event,int errCode,char* errMsg); +extern void Call_CB_I_S(CB_I_S func,int event,char* data); extern void Call_CB_I_S_S(CB_I_S_S func,int errCode,char* errMsg,char* data); extern void Call_CB_I_S_S_I(CB_I_S_S_I func,int errCode,char* errMsg,char* data,int progress); */ @@ -15,33 +15,38 @@ import ( "open_im_sdk/open_im_sdk" ) +type Base struct { + ErrCode int32 `json:"errCode"` + ErrMsg string `json:"errMsg"` +} type ConnCallback struct { - cCallback C.CB_I_I_S + cCallback C.CB_I_S } -func NewConnCallback(cCallback C.CB_I_I_S) *ConnCallback { +func NewConnCallback(cCallback C.CB_I_S) *ConnCallback { return &ConnCallback{cCallback: cCallback} } func (c ConnCallback) OnConnecting() { - C.Call_CB_I_I_S(c.cCallback, CONNECTING, NO_ERR, NO_ERR_MSG) + C.Call_CB_I_S(c.cCallback, CONNECTING, NO_DATA) } func (c ConnCallback) OnConnectSuccess() { - C.Call_CB_I_I_S(c.cCallback, CONNECT_SUCCESS, NO_ERR, NO_ERR_MSG) + C.Call_CB_I_S(c.cCallback, CONNECT_SUCCESS, NO_DATA) } func (c ConnCallback) OnConnectFailed(errCode int32, errMsg string) { - C.Call_CB_I_I_S(c.cCallback, CONNECT_FAILED, C.int(errCode), C.CString(errMsg)) + + C.Call_CB_I_S(c.cCallback, CONNECT_FAILED, C.CString(StructToJsonString(Base{ErrCode: errCode, ErrMsg: errMsg}))) } func (c ConnCallback) OnKickedOffline() { - C.Call_CB_I_I_S(c.cCallback, KICKED_OFFLINE, NO_ERR, NO_ERR_MSG) + C.Call_CB_I_S(c.cCallback, KICKED_OFFLINE, NO_DATA) } func (c ConnCallback) OnUserTokenExpired() { - C.Call_CB_I_I_S(c.cCallback, USER_TOKEN_EXPIRED, NO_ERR, NO_ERR_MSG) + C.Call_CB_I_S(c.cCallback, USER_TOKEN_EXPIRED, NO_DATA) } type SendMessageCallback struct { @@ -82,7 +87,7 @@ func (b BaseCallback) OnSuccess(data string) { //export init_sdk func init_sdk( - cCallback C.CB_I_I_S, + cCallback C.CB_I_S, operationID *C.char, config *C.char) bool { callback := NewConnCallback(cCallback) return open_im_sdk.InitSDK(callback, C.GoString(operationID), C.GoString(config)) diff --git a/c_wrapper/protocol.go b/c_wrapper/protocol.go index 9d985ca..018f72d 100644 --- a/c_wrapper/protocol.go +++ b/c_wrapper/protocol.go @@ -2,14 +2,14 @@ package main /* #include -typedef void (*CB_I_I_S)(int,int,char *); +typedef void (*CB_I_S)(int,char *); typedef void (*CB_I_S_S)(int,char *,char *); typedef void (*CB_I_S_S_I)(int,char *,char *,int); __attribute__((weak)) -void Call_CB_I_I_S(CB_I_I_S func,int event,int errCode,char* errMsg) +void Call_CB_I_S(CB_I_S func,int event,char* data) { - func(event,errCode,errMsg); + func(event,data); } __attribute__((weak)) void Call_CB_I_S_S(CB_I_S_S func,int errCode,char* errMsg,char* data) diff --git a/c_wrapper/tools.go b/c_wrapper/tools.go index f63c39e..d282f49 100644 --- a/c_wrapper/tools.go +++ b/c_wrapper/tools.go @@ -1,5 +1,13 @@ package main +import "encoding/json" + func parseBool() bool { return false } + +func StructToJsonString(param interface{}) string { + dataType, _ := json.Marshal(param) + dataString := string(dataType) + return dataString +}