| 333 | } |
| 334 | |
| 335 | func (d *NapiGoInstanceCallbackData) CreateCallback( |
| 336 | env Env, |
| 337 | name string, |
| 338 | cb Callback, |
| 339 | ) (Value, Status) { |
| 340 | d.Lock.Lock() |
| 341 | defer d.Lock.Unlock() |
| 342 | |
| 343 | cname := C.CString(name) |
| 344 | defer C.free(unsafe.Pointer(cname)) |
| 345 | |
| 346 | callbackState := d.insert(cb) |
| 347 | |
| 348 | var result Value |
| 349 | status := Status(C.napi_create_function( |
| 350 | C.napi_env(env), |
| 351 | cname, |
| 352 | C.size_t(len([]byte(name))), |
| 353 | C.napi_callback(C.ExecuteCallback), |
| 354 | unsafe.Pointer(&callbackState.ID), |
| 355 | (*C.napi_value)(unsafe.Pointer(&result)), |
| 356 | )) |
| 357 | |
| 358 | if status == StatusOK { |
| 359 | status = Status(C.napi_add_finalizer( |
| 360 | C.napi_env(env), |
| 361 | C.napi_value(result), |
| 362 | unsafe.Pointer(&callbackState.ID), |
| 363 | C.napi_finalize(C.DeleteCallbackData), |
| 364 | nil, |
| 365 | nil, |
| 366 | )) |
| 367 | } |
| 368 | |
| 369 | return result, status |
| 370 | } |
| 371 | |
| 372 | func (d *NapiGoInstanceCallbackData) GetCallback( |
| 373 | id NapiGoCallbackID, |