energy/cef/init.go
2024-10-02 19:52:12 +08:00

129 lines
3.7 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//----------------------------------------
//
// Copyright © yanghy. All Rights Reserved.
//
// Licensed under Apache License Version 2.0, January 2004
//
// https://www.apache.org/licenses/LICENSE-2.0
//
//----------------------------------------
// Energy Global initialization
package cef
import (
_ "github.com/energye/energy/v2/cef/internal/def"
. "github.com/energye/energy/v2/cef/process"
. "github.com/energye/energy/v2/common"
"github.com/energye/energy/v2/common/imports"
"github.com/energye/energy/v2/common/imports/tempdll"
"github.com/energye/golcl/energy/emfs"
"github.com/energye/golcl/energy/inits"
"github.com/energye/golcl/lcl"
"github.com/energye/golcl/lcl/api"
"github.com/energye/golcl/lcl/api/dllimports"
"github.com/energye/golcl/pkgs/libname"
"github.com/energye/golcl/pkgs/macapp"
"os"
)
// GlobalInit 全局初始化
//
// 需要手动调用的函数,在main函数中调用
//
// 参数:
// libs 内置到应用程序的类库
// resources 内置到应用程序的资源文件
//
// MacOS开发环境需命令行参数[env=dev]以正常运行
func GlobalInit(libs emfs.IEmbedFS, resources emfs.IEmbedFS) {
if IsDarwin() {
macapp.MacApp.IsCEF(true)
//MacOSX环境, ide开发环境需命令行参数[energy_env=dev]以保证应用正常运行
var env = func() string {
energyEnv, env := Args.Args("energy_env"), Args.Args("env")
if energyEnv != "" {
return energyEnv
}
if env != "" {
return env
}
return ""
}()
if env != "" {
macapp.MacApp.SetEnergyEnv(macapp.ENERGY_ENV(env))
}
}
// lcl 初始化时回调如果设置了该回调函数需要通过该函数返回liblcl库
api.SetLoadLibCallback(func() (liblcl dllimports.DLL, err error) {
// load liblcl
// liblcl name, 不为空时表示自定义加载目录
if libname.LibName == "" {
// 如果使用内置dll编译,则通过该方式加载动态库
path, fullPath, ok := tempdll.CheckAndReleaseDLL(libname.GetDLLName())
if ok {
libname.LibName = fullPath
// 设置到tempDllDir, 使用tempdll将最优先从该目录加载
libname.SetTempDllDir(path)
}
}
if IsDarwin() { // MacOS固定加载目录
//MacOSX从Frameworks加载
libname.LibName = "@executable_path/../Frameworks/" + libname.GetDLLName()
} else if libname.LibName == "" {
libname.LibName = libname.LibPath(libname.GetDLLName())
}
if libname.LibName != "" {
liblcl, err = dllimports.NewDLL(libname.LibName)
}
if liblcl == 0 {
if err != nil {
println("LoadLibrary liblcl ERROR:", err.Error())
}
panic(`Hint:
Golcl dependency library liblcl was not found
Please check whether liblcl exists locally
If local liblcl exist, please put it in the specified location, If it does not exist, please download it from the Energy official website.
Configuration Location:
1. Current program execution directory
2. USER_HOME/golcl/
3. Environment variables LCL_HOME or ENERGY_HOME
environment variable LCL_HOME is configured preferentially in the non-energy framework
environment variable ENERGY_HOME takes precedence in the Energy framework
ENERGY_HOME environment variable is recommended
`)
}
// 加载完成设置到libenergy全局
imports.LibEnergy().SetOk(true)
imports.LibEnergy().SetDll(liblcl)
imports.LibLCLExt().SetOk(true)
imports.LibLCLExt().SetDll(liblcl)
return
})
emfs.SetEMFS(libs, resources)
// go lcl init
inits.InitAll()
// macos command line
if IsDarwin() {
argsList := lcl.NewStringList()
for _, v := range os.Args {
argsList.Add(v)
}
// 手动设置进程命令参数
SetCommandLine(argsList)
argsList.Free()
}
// main thread run call
applicationQueueAsyncCallInit()
}
// v8init v8初始化
func v8init() {
if Args.IsMain() || Args.IsRender() {
//ipc初始化
ipcInit()
}
}