Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
energye
energy
提交
0bcbc514
energy
项目概览
energye
/
energy
通知
13
Star
2
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
energy
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0bcbc514
编写于
3月 16, 2023
作者:
yanghye
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
upgrade-dev v2.3.10
上级
79290955
变更
8
隐藏空白更改
内联
并排
Showing
8 changed file
with
40 addition
and
156 deletion
+40
-156
cef/cef-browser-main-window.go
cef/cef-browser-main-window.go
+9
-2
cef/cef-chromium-proc.go
cef/cef-chromium-proc.go
+0
-5
cef/cef-chromium.go
cef/cef-chromium.go
+0
-125
cef/cef-ipc-render.go
cef/cef-ipc-render.go
+6
-5
cef/cef-types-v8-handler.go
cef/cef-types-v8-handler.go
+1
-1
cef/cef-types-v8-value.go
cef/cef-types-v8-value.go
+18
-13
cef/cef-types.go
cef/cef-types.go
+1
-0
example/dev-test/ipc-event/ipc-event.go
example/dev-test/ipc-event/ipc-event.go
+5
-5
未找到文件。
cef/cef-browser-main-window.go
浏览文件 @
0bcbc514
...
...
@@ -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
...
...
cef/cef-chromium-proc.go
浏览文件 @
0bcbc514
...
...
@@ -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--------
...
...
cef/cef-chromium.go
浏览文件 @
0bcbc514
...
...
@@ -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
//}
cef/cef-ipc-render.go
浏览文件 @
0bcbc514
...
...
@@ -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
)
...
...
cef/cef-types-v8-handler.go
浏览文件 @
0bcbc514
...
...
@@ -86,7 +86,7 @@ func init() {
*
exceptionPtr
=
0
}
*
resultPtr
=
result
//
arguments.Free()
arguments
.
Free
()
object
.
Free
()
default
:
return
false
...
...
cef/cef-types-v8-value.go
浏览文件 @
0bcbc514
...
...
@@ -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
}
...
...
cef/cef-types.go
浏览文件 @
0bcbc514
...
...
@@ -389,6 +389,7 @@ type ICefV8Value struct {
valueType
V8ValueType
valueByIndex
[]
*
ICefV8Value
valueByKeys
map
[
string
]
*
ICefV8Value
cantFree
bool
}
// ICefV8ValueKeys
...
...
example/dev-test/ipc-event/ipc-event.go
浏览文件 @
0bcbc514
...
...
@@ -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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录