提交 8f083af0 编写于 作者: yanghye's avatar yanghye

upgrade-dev v2.3.3

上级 bb6e6a05
......@@ -30,9 +30,9 @@ func appMainRunCallback() {
// renderProcessMessageReceived 渲染进程消息 - 默认实现
func renderProcessMessageReceived(browser *ICefBrowser, frame *ICefFrame, sourceProcess consts.CefProcessId, message *ICefProcessMessage) (result bool) {
if message.Name() == internalProcessMessageIPCEmitReply { //接收回复消息
if message.Name() == internalProcessMessageIPCEmitReply {
result = ipcRender.ipcJSExecuteGoEventMessageReply(browser, frame, sourceProcess, message)
} else if message.Name() == internalProcessMessageIPCOn { // Go触发JS监听事件
} else if message.Name() == internalProcessMessageIPCOn {
result = ipcRender.ipcGoExecuteJSEvent(browser, frame, sourceProcess, message)
}
return
......@@ -41,7 +41,7 @@ func renderProcessMessageReceived(browser *ICefBrowser, frame *ICefFrame, source
// browserProcessMessageReceived 主进程消息 - 默认实现
func browserProcessMessageReceived(browser *ICefBrowser, frame *ICefFrame, sourceProcess consts.CefProcessId, message *ICefProcessMessage) (result bool) {
if message.Name() == internalProcessMessageIPCEmit {
result = ipcBrowser.ipcEmitMessage(browser, frame, sourceProcess, message)
result = ipcBrowser.ipcGoExecuteMethodMessage(browser, frame, sourceProcess, message)
} else if message.Name() == internalProcessMessageIPCOn {
result = ipcBrowser.ipcOnMessage(browser, frame, sourceProcess, message)
}
......
......@@ -727,6 +727,9 @@ func (m *TCEFChromium) SendProcessMessage(targetProcess CefProcessId, message *I
func (m *TCEFChromium) SendProcessMessageForIPC(messageId int32, name string, targetProcess CefProcessId, target ipc.ITarget, data ...any) {
if target == nil || (target.GetBrowserId() <= 0 && target.GetFrameId() <= 0) {
message := ProcessMessageRef.new(internalProcessMessageIPCOn)
argument := message.ArgumentList()
argument.SetInt(0, messageId)
argument.SetString(1, name)
if data != nil && len(data) > 0 {
argumentJSONArray := json.NewJSONArray(nil)
for _, result := range data {
......@@ -737,9 +740,6 @@ func (m *TCEFChromium) SendProcessMessageForIPC(messageId int32, name string, ta
argumentJSONArray.Add(result)
}
}
argument := message.ArgumentList()
argument.SetInt(0, messageId)
argument.SetString(1, name)
binaryValue := BinaryValueRef.New(argumentJSONArray.Bytes())
argument.SetBinary(2, binaryValue)
}
......@@ -749,7 +749,7 @@ func (m *TCEFChromium) SendProcessMessageForIPC(messageId int32, name string, ta
if browse.IsValid() {
frame := browse.GetFrameById(target.GetFrameId())
if frame.IsValid() {
frame.SendProcessMessageForIPC(messageId, name, targetProcess, target, data...)
frame.SendProcessMessageForIPC(messageId, name, targetProcess, target, data)
}
}
}
......
......@@ -24,8 +24,8 @@ type ipcBrowserProcess struct {
onHandler *ipcOnHandler // ipc.on handler
}
// ipcEmitMessage emit message
func (m *ipcBrowserProcess) ipcEmitMessage(browser *ICefBrowser, frame *ICefFrame, sourceProcess consts.CefProcessId, message *ICefProcessMessage) (result bool) {
// ipcGoExecuteMethodMessage 执行 Go 监听函数
func (m *ipcBrowserProcess) ipcGoExecuteMethodMessage(browser *ICefBrowser, frame *ICefFrame, sourceProcess consts.CefProcessId, message *ICefProcessMessage) (result bool) {
result = true
argument := message.ArgumentList()
messageId := argument.GetInt(0)
......@@ -45,6 +45,7 @@ func (m *ipcBrowserProcess) ipcEmitMessage(browser *ICefBrowser, frame *ICefFram
}
ipcContext := ipc.NewContext(browser.Identifier(), frame.Identifier(), argsBytes)
argsBytes = nil
//调用监听函数
if ctxCallback := eventCallback.ContextCallback(); ctxCallback != nil {
ctxCallback.Invoke(ipcContext)
} else if argsCallback := eventCallback.ArgumentCallback(); argsCallback != nil {
......
......@@ -98,10 +98,38 @@ func (m *ipcRenderProcess) ipcJSOnEvent(name string, object *ICefV8Value, argume
return
}
// ipcGoExecuteJSEvent Go ipc.emit JS事件
// ipcGoExecuteJSEvent Go ipc.emit 执行JS事件
func (m *ipcRenderProcess) ipcGoExecuteJSEvent(browser *ICefBrowser, frame *ICefFrame, sourceProcess consts.CefProcessId, message *ICefProcessMessage) (result bool) {
argument := message.ArgumentList()
name := argument.GetString(1)
if callback := ipcRender.onHandler.getCallback(name); callback != nil {
messageId := argument.GetInt(0)
args := argument.GetBinary(2)
var argsBytes []byte
var count uint32
var argsV8ValueArray *TCefV8ValueArray
if args.IsValid() {
size := args.GetSize()
argsBytes = make([]byte, size)
count = args.GetData(argsBytes, 0)
args.Free()
}
if count > 0 {
argsV8ValueArray, _ = ipcValueConvert.BytesToV8ArrayValue(argsBytes)
}
if callback.context.Enter() {
callback.function.ExecuteFunctionWithContext(callback.context, nil, argsV8ValueArray)
callback.context.Exit()
}
if argsV8ValueArray != nil {
argsV8ValueArray.Free()
}
if messageId != 0 { // callback
return true
}
result = true
}
return
}
// ipcJSExecuteGoEvent JS ipc.emit 执行Go事件
......@@ -216,11 +244,14 @@ func (m *ipcRenderProcess) ipcJSExecuteGoEventMessageReply(browser *ICefBrowser,
if isReturn := message.ArgumentList().GetBool(1); isReturn {
//[]byte
binaryValue := message.ArgumentList().GetBinary(2)
size := binaryValue.GetSize()
resultArgsBytes := make([]byte, size)
count := binaryValue.GetData(resultArgsBytes, 0)
binaryValue.Free()
var count uint32
var resultArgsBytes []byte
if binaryValue.IsValid() {
size := binaryValue.GetSize()
resultArgsBytes = make([]byte, size)
count = binaryValue.GetData(resultArgsBytes, 0)
binaryValue.Free()
}
if count > 0 {
//解析 '[]byte' 参数
if callback.context.Enter() {
......
......@@ -121,7 +121,7 @@
}
ipc.on('onTestName1', function (param1, param2, param3) {
msg("onTestName1", param1, param2, param3);
});
ipc.on('onTestName2', function (param1, param2, param3) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册