提交 0bcbc514 编写于 作者: yanghye's avatar yanghye

upgrade-dev v2.3.10

上级 79290955
......@@ -93,8 +93,15 @@ func (m *lclBrowserWindow) OnFormCreate(sender lcl.IObject) {
m.cwcap = &customWindowCaption{
bw: &m.LCLBrowserWindow,
}
//设置 CEF Chromium IPC
ipc.SetProcessMessage(m.chromium.(*TCEFChromium))
go func() {
for true {
if m.chromium.Initialized() {
//设置 CEF Chromium IPC
ipc.SetProcessMessage(m.chromium.(*TCEFChromium))
break
}
}
}()
}
// MainWindow
......
......@@ -727,10 +727,6 @@ func (m *TCEFChromium) SendProcessMessage(targetProcess CefProcessId, message *I
}
func (m *TCEFChromium) SendProcessMessageForIPC(messageId int32, name string, targetProcess CefProcessId, target ipc.ITarget, data ...any) {
if m.isSending {
return
}
m.isSending = true
if target == nil || target.GetBrowserId() <= 0 || target.GetFrameId() <= 0 {
message := ProcessMessageRef.new(internalProcessMessageIPCOn)
argument := message.ArgumentList()
......@@ -760,7 +756,6 @@ func (m *TCEFChromium) SendProcessMessageForIPC(messageId int32, name string, ta
}
}
}
m.isSending = false
}
//--------TCEFChromium proc begin--------
......
......@@ -35,7 +35,6 @@ type TCEFChromium struct {
browserHandle types.HWND
widgetHandle types.HWND
renderHandle types.HWND
isSending bool
}
// NewChromium 创建一个新的 TCEFChromium
......@@ -79,127 +78,3 @@ func (m *TCEFChromium) Instance() uintptr {
func (m *TCEFChromium) ExecuteJavaScript(code, scriptURL string, startLine int32) {
_CEFChromium_ExecuteJavaScript(uintptr(m.instance), code, scriptURL, startLine)
}
//
//// Emit
//// 触发JS监听的事件-异步执行
////
//// EmitTarget 接收目标, nil:mainBrowser&mainFrame, 可传递browser和指定浏览器窗口,JS监听事件的接收
//func (m *TCEFChromium) Emit(eventName string, args ipc.IArgumentList, target ipc.IEmitTarget) ProcessMessageError {
// if eventName == "" {
// return PMErr_NAME_IS_NULL
// }
// m.emitLock.Lock()
// defer m.emitLock.Unlock()
// var (
// browseId int32
// frameId int64
// )
// if args == nil {
// args = ipc.NewArgumentList()
// }
// if target == nil {
// bsr := m.Browser()
// browseId = bsr.Identifier()
// frameId = bsr.MainFrame().Identifier()
// } else {
// browseId = target.GetBrowserId()
// frameId = target.GetFrameId()
// if m.BrowserById(browseId).GetFrameById(frameId) == nil {
// return PMErr_NOT_FOUND_FRAME
// }
// }
// var idx = args.Size()
// args.SetInt32(idx, int32(Tm_Async))
// args.SetInt32(idx+1, 0)
// args.SetString(idx+2, eventName, true)
// m.browseEmitJsOnEvent(browseId, frameId, ipc.Ln_IPC_GoEmitJS, args)
// return PME_OK
//}
//
//// EmitAndCallback
//// 触发JS监听的事件-异步执行-带回调
////
//// EmitTarget 接收目标, nil = mainBrowser mainFrame
//func (m *TCEFChromium) EmitAndCallback(eventName string, args ipc.IArgumentList, target ipc.IEmitTarget, callback ipc.IPCCallback) ProcessMessageError {
// if eventName == "" {
// return PMErr_NAME_IS_NULL
// }
// m.emitLock.Lock()
// defer m.emitLock.Unlock()
// var (
// browseId int32
// frameId int64
// ipcId = executeJS.msgID.New()
// idx = args.Size()
// )
// if args == nil {
// args = ipc.NewArgumentList()
// }
// if target == nil {
// bsr := m.Browser()
// browseId = bsr.Identifier()
// frameId = bsr.MainFrame().Identifier()
// } else {
// browseId = target.GetBrowserId()
// frameId = target.GetFrameId()
// if m.BrowserById(browseId).GetFrameById(frameId) == nil {
// return PMErr_NOT_FOUND_FRAME
// }
// }
// args.SetInt32(idx, int32(Tm_Callback))
// args.SetInt32(idx+1, ipcId)
// args.SetString(idx+2, eventName, true)
// executeJS.emitCallback.EmitCollection.Store(ipcId, callback)
// m.browseEmitJsOnEvent(browseId, frameId, ipc.Ln_IPC_GoEmitJS, args)
// return PME_OK
//}
//
//// EmitAndReturn
//// 触发JS监听的事件-同步执行-阻塞UI主线程
////
//// 使用不当会造成 UI线程 锁死,一搬不在与JS监听中使用,与其它子进程通信时使用
////
//// EmitTarget 接收目标, nil = mainBrowser mainFrame
//func (m *TCEFChromium) EmitAndReturn(eventName string, args ipc.IArgumentList, target ipc.IEmitTarget) (ipc.IIPCContext, ProcessMessageError) {
// if eventName == "" {
// return nil, PMErr_NAME_IS_NULL
// }
// m.emitLock.Lock()
// defer m.emitLock.Unlock()
// var (
// browseId int32
// frameId int64
// ipcId = executeJS.msgID.New()
// idx = args.Size()
// )
// if args == nil {
// args = ipc.NewArgumentList()
// }
// if target == nil {
// bsr := m.Browser()
// browseId = bsr.Identifier()
// frameId = bsr.MainFrame().Identifier()
// } else {
// browseId = target.GetBrowserId()
// frameId = target.GetFrameId()
// if m.BrowserById(browseId).GetFrameById(frameId) == nil {
// return nil, PMErr_NOT_FOUND_FRAME
// }
// }
// args.SetInt32(idx, int32(Tm_Sync))
// args.SetInt32(idx+1, ipcId)
// args.SetString(idx+2, eventName, true)
// var callback = func(emitAsync *ipc.EmitSyncCollection, ipcId int32) ipc.IIPCContext {
// emitAsync.Mutex.Lock()
// defer emitAsync.Mutex.Unlock()
// var chn = make(chan ipc.IIPCContext)
// var ret ipc.IIPCContext
// emitAsync.EmitCollection.Store(ipcId, chn)
// ret = <-chn //锁住当前线程
// executeJS.emitSync.EmitCollection.Delete(ipcId)
// return ret
// }
// m.browseEmitJsOnEvent(browseId, frameId, ipc.Ln_IPC_GoEmitJS, args)
// return callback(executeJS.emitSync, ipcId), PME_OK
//}
......@@ -90,10 +90,10 @@ func (m *ipcRenderProcess) ipcJSOnEvent(name string, object *ICefV8Value, argume
exception.SetValue("ipc.on event callback should be a function")
return
}
onCallback.SetCanNotFree(true)
onNameValue = onName.GetStringValue()
//ipc on
m.onHandler.addCallback(onNameValue, &ipcCallback{arguments: arguments, context: V8ContextRef.Current(), function: V8ValueRef.UnWrap(onCallback)})
m.onHandler.addCallback(onNameValue, &ipcCallback{ /*arguments: arguments, */ context: V8ContextRef.Current(), function: V8ValueRef.UnWrap(onCallback)})
result = true
return
}
......@@ -242,10 +242,11 @@ func (m *ipcRenderProcess) ipcJSExecuteGoEvent(name string, object *ICefV8Value,
//回调函数
if emitCallback != nil {
//回调函数临时存放到缓存中
emitCallback.SetCanNotFree(true)
messageId = ipcRender.emitHandler.addCallback(&ipcCallback{
arguments: arguments,
context: context,
function: V8ValueRef.UnWrap(emitCallback),
//arguments: arguments,
context: context,
function: V8ValueRef.UnWrap(emitCallback),
})
}
ipcEmitMessage = ProcessMessageRef.new(internalProcessMessageIPCEmit)
......
......@@ -86,7 +86,7 @@ func init() {
*exceptionPtr = 0
}
*resultPtr = result
//arguments.Free()
arguments.Free()
object.Free()
default:
return false
......
......@@ -495,11 +495,15 @@ func (m *ICefV8Value) RejectPromise(errorMsg string) bool {
return api.GoBool(r1)
}
func (m *ICefV8Value) SetCanNotFree(v bool) {
m.cantFree = v
}
func (m *ICefV8Value) Free() {
if m.instance != nil {
if m.valueByIndex != nil {
for _, v := range m.valueByIndex {
if v != nil && v.instance != nil {
if v != nil {
v.Free()
}
}
......@@ -507,7 +511,7 @@ func (m *ICefV8Value) Free() {
}
if m.valueByKeys != nil {
for _, v := range m.valueByKeys {
if v != nil && v.instance != nil {
if v != nil {
v.Free()
}
}
......@@ -515,8 +519,10 @@ func (m *ICefV8Value) Free() {
}
//var data = m.Instance()
//imports.Proc(internale_CefV8Value_Free).Call(uintptr(unsafe.Pointer(&data)))
m.base.Free(m.Instance())
m.instance = nil
if !m.cantFree {
m.base.Free(m.Instance())
m.instance = nil
}
}
}
......@@ -577,19 +583,17 @@ func (m *TCefV8ValueArray) Free() {
if m == nil {
return
}
if m.instance != nil {
if m.argumentsCollect != nil {
for _, v := range m.argumentsCollect {
if v != nil && v.instance != nil {
v.Free()
}
if m.argumentsCollect != nil {
for _, v := range m.argumentsCollect {
if v != nil && v.instance != nil {
v.Free()
}
}
m.instance = nil
m.arguments = 0
m.argumentsCollect = nil
m.argumentsLength = 0
}
m.instance = nil
m.arguments = 0
m.argumentsLength = 0
}
func (m *TCefV8ValueArray) Add(value *ICefV8Value) {
......@@ -759,6 +763,7 @@ func (*cefV8Value) NewPromise() *ICefV8Value {
func (*cefV8Value) UnWrap(data *ICefV8Value) *ICefV8Value {
var result uintptr
imports.Proc(internale_CefV8ValueRef_UnWrap).Call(data.Instance(), uintptr(unsafe.Pointer(&result)))
data.base.Free(data.Instance())
data.instance = unsafe.Pointer(result)
return data
}
......
......@@ -389,6 +389,7 @@ type ICefV8Value struct {
valueType V8ValueType
valueByIndex []*ICefV8Value
valueByKeys map[string]*ICefV8Value
cantFree bool
}
// ICefV8ValueKeys
......
......@@ -159,11 +159,11 @@ func main() {
server.Assets = &resources
go server.StartHttpServer()
go func() {
for {
time.Sleep(time.Second / 1000)
onTestName1Emit++
ipc.Emit("onTestName1", r0, r1+testGoEmit, r2, r3, r4, r5, r6, r7, r8, r9, r10)
}
//for {
// time.Sleep(time.Second / 1000)
// onTestName1Emit++
// ipc.Emit("onTestName1", r0, r1+testGoEmit, r2, r3, r4, r5, r6, r7, r8, r9, r10)
//}
}()
})
//运行应用
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册