Browse Source

Add CString casting

Arturo Filastò 7 years ago
parent
commit
4c9d198af3
2 changed files with 18 additions and 31 deletions
  1. 17 28
      Bindings/CXX/main.go
  2. 1 3
      Bindings/CXX/psi.h

+ 17 - 28
Bindings/CXX/main.go

@@ -1,5 +1,6 @@
 package main
 
+
 import "C"
 
 import (
@@ -73,12 +74,10 @@ type StartResult struct {
 
 //export Start
 func Start(configJSON,
-	embeddedServerEntryList string) string {
+	embeddedServerEntryList string) *C.char {
 
 	provider.connected = make(chan bool)
 
-	done := make(chan bool)
-
 	var result StartResult
 
 	startTime := time.Now().UTC()
@@ -92,39 +91,29 @@ func Start(configJSON,
 		fmt.Println(err)
 	}
 
-	go func() {
-		select {
-		case <-connectedCtx.Done():
-			err = connectedCtx.Err()
-			if err != nil {
-				result.ErrorString = err.Error()
-				Stop()
-			}
-			delta := time.Now().UTC().Sub(startTime)
-			result.BootstrapTime = delta.Seconds()
-			done <- true
-		}
-	}()
-
-	go func() {
-		select {
-		case <-provider.connected:
-			delta := time.Now().UTC().Sub(startTime)
-			result.BootstrapTime = delta.Seconds()
-			done <- true
+	select {
+	case <-connectedCtx.Done():
+		err = connectedCtx.Err()
+		if err != nil {
+			result.ErrorString = err.Error()
+			Stop()
 		}
-	}()
-
-	<-done
+		delta := time.Now().UTC().Sub(startTime)
+		result.BootstrapTime = delta.Seconds()
+	case <-provider.connected:
+		delta := time.Now().UTC().Sub(startTime)
+		result.BootstrapTime = delta.Seconds()
+		cancel()
+	}
 
 	b, err := json.Marshal(result)
 	if err != nil {
 		fmt.Printf("Error in marshal: %s", err.Error())
-		return "error"
+		return C.CString("error")
 	}
 	retStr := string(b)
 	fmt.Printf("retStr: %s\n", retStr)
-	return retStr
+	return C.CString(retStr)
 }
 
 //export Stop

+ 1 - 3
Bindings/CXX/psi.h

@@ -53,12 +53,10 @@ extern "C" {
 #endif
 
 
-extern GoUint8 Start(GoString p0);
+extern char* Start(GoString p0, GoString p1);
 
 extern GoUint8 Stop();
 
-extern GoUint8 RegisterCallback(GoString p0, void* p1);
-
 #ifdef __cplusplus
 }
 #endif