}
*/
import "C"
-import "unsafe"
-
import (
- "time"
- scoringmgr "scoringmgr"
+ "unsafe"
+
+ scoringmgr "scoringmgr"
+ "time"
)
-func LoadScoringAdd(libPath string, intervalMs int) {
+// LoadScoringAdd function
+func LoadScoringAdd(libPath string, intervalMs int, scoreChan chan float64) {
+
+ sym := C.CString("add")
+ defer C.free(unsafe.Pointer(sym))
+
+ lib := C.CString(libPath)
+ defer C.free(unsafe.Pointer(lib))
- sym := C.CString("add")
- defer C.free(unsafe.Pointer(sym))
+ handle, err := C.dlopen(lib, C.RTLD_LAZY)
+ defer C.dlclose(handle)
- lib := C.CString(libPath)
- defer C.free(unsafe.Pointer(lib))
+ if err != nil {
+ scoringmgr.ELog.Fatal("dlopen error occured")
+ }
- handle, err := C.dlopen(lib , C.RTLD_LAZY)
- defer C.dlclose(handle)
+ symbolPtr, symbolErr := C.dlsym(handle, sym)
+ if symbolErr != nil {
+ scoringmgr.ELog.Fatal("symbol error occured")
+ }
- if err != nil {
- scoringmgr.ELog.Fatal("dlopen error occured")
- }
-
- symbolPtr, symbolErr := C.dlsym(handle, sym)
- if symbolErr != nil {
- scoringmgr.ELog.Fatal("symbol error occured")
- }
+ for {
+ select {
+ case scoreChan <- float64(C.wrap_add(symbolPtr, C.int(2), 3)):
+ scoringmgr.ILog.Println(C.wrap_add(symbolPtr, C.int(2), 3))
+ default:
+ go func() {
+ <-scoreChan
+ scoreChan <- float64(C.wrap_add(symbolPtr, C.int(2), 3))
+ }()
+ }
- for {
- scoringmgr.ILog.Println(C.wrap_add(symbolPtr,2,3))
- time.Sleep(time.Duration(intervalMs) * time.Millisecond)
- }
+ time.Sleep(time.Duration(intervalMs) * time.Millisecond)
+ }
- return
+ // return
}