upgrade-dev v2.3.38

This commit is contained in:
杨红岩 2023-03-25 23:19:40 +08:00
parent b6ead27f68
commit 58417f3b89
4 changed files with 149 additions and 86 deletions

View File

@ -10,12 +10,18 @@
package bind
import "sync"
var bind = &v8bind{fieldCollection: make(map[string]JSValue)}
type v8bind struct {
fieldCollection map[string]JSValue
lock sync.Mutex
}
func (m *v8bind) Add(name string, value JSValue) {
// set 添加或修改
func (m *v8bind) set(name string, value JSValue) {
m.lock.Lock()
defer m.lock.Unlock()
m.fieldCollection[name] = value
}

View File

@ -18,22 +18,18 @@ import (
"github.com/energye/energy/pkgs/json"
)
const (
null = "null"
undefined = "Undefined"
)
// JSValue
//
// GO和JS通用变量类型
// GO和JS动态变量类型
type JSValue interface {
Name() string //当前变量绑定的名称
Bytes() []byte //变量值转换为字节
SetValue(value any) //设置新值
Integer() int //返回 Integer 类型
Double() float64 //返回 Double 类型
String() string //返回 String 类型
Boolean() bool //返回 Boolean 类型
Object() JSObject //返回 Object 类型
Array() JSArray //返回 Array 类型
Null() JSNull //返回 Null 类型
Undefined() JSUndefined //返回 Undefined
Function() JSFunction //返回 Function
IsInteger() bool //是否 Integer
IsDouble() bool //是否 Double
IsString() bool //是否 String
@ -58,12 +54,12 @@ type JSValue interface {
// V8Value 绑定到JS的字段
type V8Value struct {
name string
value *json.JsonData
value json.JSON
}
// Bytes 值转换为字节
func (m *V8Value) Bytes() []byte {
return nil
return m.value.Bytes()
}
// SetValue 设置值
@ -75,51 +71,6 @@ func (m *V8Value) Name() string {
return m.name
}
func (m *V8Value) String() string {
if m.IsString() {
return m.value.String()
}
return ""
}
func (m *V8Value) Integer() int {
return m.value.Int()
}
func (m *V8Value) Double() float64 {
return m.value.Float()
}
func (m *V8Value) Boolean() bool {
return m.value.Bool()
}
func (m *V8Value) Object() JSObject {
if m.IsArray() {
}
return nil
}
func (m *V8Value) Array() JSArray {
if m.IsArray() {
}
return nil
}
func (m *V8Value) Null() JSNull {
return nil
}
func (m *V8Value) Undefined() JSUndefined {
return nil
}
func (m *V8Value) Function() JSFunction {
return nil
}
func (m *V8Value) IsString() bool {
return m.value.IsString()
}
@ -145,127 +96,231 @@ func (m *V8Value) IsObject() bool {
}
func (m *V8Value) IsFunction() bool {
return false
return m.value.Type() == consts.GO_VALUE_FUNC
}
func (m *V8Value) IsNull() bool {
return m.value == nil
return m.value.Type() == consts.GO_VALUE_NIL
}
func (m *V8Value) IsUndefined() bool {
return m.value == nil
return m.value.Type() == consts.GO_VALUE_NIL
}
func (m *V8Value) AsString() JSString {
return nil
if m.IsString() {
v := new(jsString)
v.name = m.name
v.value = m.value.JsonData()
bind.set(m.name, v)
m.free()
return v
}
return nil // default
}
func (m *V8Value) AsInteger() JSInteger {
return nil
if m.IsInteger() {
v := new(jsInteger)
v.name = m.name
v.value = m.value.JsonData()
bind.set(m.name, v)
m.free()
return v
}
return nil // default
}
func (m *V8Value) AsDouble() JSDouble {
return nil
if m.IsDouble() {
v := new(jsDouble)
v.name = m.name
v.value = m.value.JsonData()
bind.set(m.name, v)
m.free()
return v
}
return nil // default
}
func (m *V8Value) AsBoolean() JSBoolean {
return nil
if m.IsBoolean() {
v := new(jsBoolean)
v.name = m.name
v.value = m.value.JsonData()
bind.set(m.name, v)
m.free()
return v
}
return nil // default
}
func (m *V8Value) AsNull() JSNull {
return nil
if m.IsNull() {
v := new(jsNull)
v.name = m.name
v.value = m.value.JsonData()
bind.set(m.name, v)
m.free()
return v
}
return nil // default
}
func (m *V8Value) AsUndefined() JSUndefined {
return nil
if m.IsUndefined() {
v := new(jsUndefined)
v.name = m.name
v.value = m.value.JsonData()
bind.set(m.name, v)
m.free()
return v
}
return nil // default
}
func (m *V8Value) AsFunction() JSFunction {
return nil
if m.IsFunction() {
v := new(jsFunction)
v.name = m.name
v.value = m.value.JsonData()
bind.set(m.name, v)
m.free()
return v
}
return nil // default
}
func (m *V8Value) AsObject() JSObject {
return nil
if m.IsObject() {
v := new(jsObject)
v.name = m.name
v.value = m.value.JsonData()
bind.set(m.name, v)
m.free()
return v
}
return nil // default
}
func (m *V8Value) AsArray() JSArray {
return nil
if m.IsArray() {
v := new(jsArray)
v.name = m.name
v.value = m.value.JsonData()
bind.set(m.name, v)
m.free()
return v
}
return nil // default
}
func (m *V8Value) AsV8Value() JSValue {
return m
}
func (m *V8Value) free() {
if m.value != nil {
m.name = ""
m.value.Free()
m.value = nil
}
}
// NewInteger GO&JS 数字类型
func NewInteger(name string, value int) JSInteger {
if name == "" {
return nil
}
v := new(jsInteger)
v.name = name
v.value = &json.JsonData{T: consts.GO_VALUE_INT, V: value, S: 4}
bind.Add(name, v)
bind.set(name, v)
return v
}
// NewString GO&JS 字符串类型
func NewString(name, value string) JSString {
if name == "" {
return nil
}
v := new(jsString)
v.name = name
v.value = &json.JsonData{T: consts.GO_VALUE_STRING, V: value, S: len(value)}
bind.Add(name, v)
bind.set(name, v)
return v
}
// NewDouble GO&JS 浮点类型
func NewDouble(name string, value float64) JSDouble {
if name == "" {
return nil
}
v := new(jsDouble)
v.name = name
v.value = &json.JsonData{T: consts.GO_VALUE_FLOAT64, V: value, S: 8}
bind.Add(name, v)
bind.set(name, v)
return v
}
// NewBoolean GO&JS 布尔类型
func NewBoolean(name string, value bool) JSBoolean {
if name == "" {
return nil
}
v := new(jsBoolean)
v.name = name
v.value = &json.JsonData{T: consts.GO_VALUE_BOOL, V: value, S: 1}
bind.Add(name, v)
bind.set(name, v)
return v
}
// NewNull GO&JS 空类型
func NewNull(name string) JSNull {
if name == "" {
return nil
}
v := new(jsNull)
v.name = name
v.value = &json.JsonData{T: consts.GO_VALUE_NIL, V: "null", S: 4}
bind.Add(name, v)
v.value = &json.JsonData{T: consts.GO_VALUE_NIL, V: null, S: len(null)}
bind.set(name, v)
return v
}
// NewUndefined GO&JS 未定义类型
func NewUndefined(name string) JSUndefined {
if name == "" {
return nil
}
v := new(jsUndefined)
v.name = name
v.value = &json.JsonData{T: consts.GO_VALUE_NIL, V: "undefined", S: 9}
bind.Add(name, v)
v.value = &json.JsonData{T: consts.GO_VALUE_NIL, V: undefined, S: len(undefined)}
bind.set(name, v)
return v
}
// NewFunction GO&JS 函数类型
func NewFunction(name string, fn any) JSFunction {
if name == "" {
return nil
}
v := new(jsFunction)
v.name = name
v.value = &json.JsonData{T: consts.GO_VALUE_FUNC, V: fn, S: 0}
bind.Add(name, v)
bind.set(name, v)
return v
}
// NewObject GO&JS 对象类型
func NewObject(name string, object any) JSObject {
if name == "" {
return nil
}
if vv := json.NewJSONObject(object); vv != nil {
v := new(jsObject)
v.name = name
v.value = vv.JsonData()
bind.Add(name, v)
bind.set(name, v)
return v
}
return nil
@ -273,11 +328,14 @@ func NewObject(name string, object any) JSObject {
// NewArray GO&JS 数组类型
func NewArray(name string, array any) JSArray {
if name == "" {
return nil
}
if vv := json.NewJSONArray(array); vv != nil {
v := new(jsArray)
v.name = name
v.value = vv.JsonData()
bind.Add(name, v)
bind.set(name, v)
return v
}
return nil

View File

@ -13,13 +13,11 @@
// 静态类型是不可变类型
package bind
// Bind V8Value
// Bind 绑定Go类型
//
// 变量和函数绑定, 在Go中定义的字段绑定到JS字段中, 在Go中定义的函数导出到JS
// 变量和函数绑定, 在Go中定义的字段绑定到JS中, 在Go中定义的函数导出到JS
//
// 支持类型 String = string , Integer = int32 , Double = float64, Boolean = bool, Function = func, Objects = struct | map, JSONArray = Slice
//
// 主进程和子进程
// 支持类型 String = string , Integer = int32 , Double = float64, Boolean = bool, Function = func, Object = struct | map, Array = Slice
func Bind(name string, bind any) error {
return nil
}

View File

@ -42,6 +42,7 @@ func main() {
fmt.Println("nullKey", nullKey.Value())
undefinedKey := bind.NewUndefined("undefinedKey")
fmt.Println("undefinedKey", undefinedKey.Value())
bind.Bind("", "")
//内置http服务链接安全配置
cef.SetBrowserProcessStartAfterCallback(func(b bool) {