From 1dc5a9dbf9a54cc41db534594f2fed7193b88181 Mon Sep 17 00:00:00 2001 From: Arnaud Date: Tue, 16 Sep 2025 14:49:30 +0200 Subject: [PATCH] Add async method with callabck for Codex start --- examples/golang/codex.go | 56 +++++++++++++++++++++------------------- 1 file changed, 29 insertions(+), 27 deletions(-) diff --git a/examples/golang/codex.go b/examples/golang/codex.go index 34b43aec..e620bce5 100644 --- a/examples/golang/codex.go +++ b/examples/golang/codex.go @@ -330,30 +330,44 @@ func (self *CodexNode) CodexRepo() (string, error) { return bridge.wait() } -// CodexStart returns the bridgeCtx to allow the caller -// to wait for the operation to complete or not. -// TODO: be consistent and do not free the bridgeCtx here -func (self *CodexNode) CodexStart() (*bridgeCtx, error) { +func (self *CodexNode) CodexStart() error { bridge := newBridgeCtx() + defer bridge.free() if C.cGoCodexStart(self.ctx, bridge.resp) != C.RET_OK { - return nil, bridge.CallError("cGoCodexStart") + return bridge.CallError("cGoCodexStart") } - return bridge, nil + _, err := bridge.wait() + return err } -// CodexStop returns the bridgeCtx to allow the caller -// to wait for the operation to complete or not. -// TODO: be consistent and do not free the bridgeCtx here -func (self *CodexNode) CodexStop() (*bridgeCtx, error) { +func (self *CodexNode) CodexStartAsync(cb func(error)) error { bridge := newBridgeCtx() + defer bridge.free() - if C.cGoCodexStop(self.ctx, bridge.resp) != C.RET_OK { - return nil, bridge.CallError("cGoCodexStop") + if C.cGoCodexStart(self.ctx, bridge.resp) != C.RET_OK { + return bridge.CallError("cGoCodexStart") } - return bridge, nil + go func() { + _, err := bridge.wait() + cb(err) + }() + + return nil +} + +func (self *CodexNode) CodexStop() error { + bridge := newBridgeCtx() + defer bridge.free() + + if C.cGoCodexStop(self.ctx, bridge.resp) != C.RET_OK { + return bridge.CallError("cGoCodexStop") + } + + _, err := bridge.wait() + return err } func (self *CodexNode) CodexDestroy() error { @@ -430,18 +444,12 @@ func main() { log.Println("Starting Codex...") - bridge, err := node.CodexStart() + err = node.CodexStart() if err != nil { log.Fatal("Error happened:", err.Error()) } - defer bridge.free() - - if _, err := bridge.wait(); err != nil { - log.Fatal("Error happened:", err) - } - log.Println("Codex started...") // Wait for a SIGINT or SIGTERM signal @@ -451,20 +459,14 @@ func main() { log.Println("Stopping the node...") - bridge, err = node.CodexStop() + err = node.CodexStop() if err != nil { log.Fatal("Error happened:", err.Error()) } - defer bridge.free() - log.Println("Codex stopped...") - if _, err := bridge.wait(); err != nil { - log.Fatal("Error happened:", err) - } - log.Println("Destroying the node...") err = node.CodexDestroy()