summaryrefslogtreecommitdiff
path: root/exes/all/main.go
diff options
context:
space:
mode:
Diffstat (limited to 'exes/all/main.go')
-rw-r--r--exes/all/main.go72
1 files changed, 72 insertions, 0 deletions
diff --git a/exes/all/main.go b/exes/all/main.go
new file mode 100644
index 0000000..0d15450
--- /dev/null
+++ b/exes/all/main.go
@@ -0,0 +1,72 @@
+package main
+
+/*
+#cgo LDFLAGS: -Lbuild -lall
+#include "./build/all.h"
+*/
+import "C"
+
+import (
+ "fmt"
+ "os"
+ "os/signal"
+ "syscall"
+ "time"
+
+ "github.com/Jeffail/gabs"
+ "github.com/alicebob/miniredis/v2"
+
+ server "github.com/nats-io/nats-server/v2/server"
+)
+
+func main() {
+ // Intialise les logs de la librarie Rust
+ C.init_logs()
+ // Charge la configuration
+ str := C.GoString(C.load_config())
+
+ // Démarre une instance MiniRedis
+ mr := miniredis.NewMiniRedis()
+ err := mr.Start()
+
+ if err != nil {
+ panic(err)
+ }
+
+ // Démarre un serveur Nats
+ opts := &server.Options{}
+ opts.Host = "0.0.0.0"
+ ns, err := server.NewServer(opts)
+
+ if err != nil {
+ panic(err)
+ }
+
+ go ns.Start()
+
+ if !ns.ReadyForConnections(4 * time.Second) {
+ panic("not ready for connection")
+ }
+
+ // Edite le json de configuration donné
+ // Et injecte la configuration des servers Nats et MiniRedis
+ json, _ := gabs.ParseJSON([]byte(str))
+ json.Set(fmt.Sprintf("redis://%s", mr.Addr()), "redis", "url")
+ json.Set("localhost", "nats", "host")
+ json.Set(1, "webhook", "discord", "client_id")
+
+ // Démarre une instance de nova
+ instance := C.start_instance(C.CString(json.String()))
+
+ // Wait for a SIGINT
+ c := make(chan os.Signal, 1)
+ signal.Notify(c,
+ syscall.SIGHUP,
+ syscall.SIGINT,
+ syscall.SIGTERM,
+ syscall.SIGQUIT)
+ <-c
+
+ println("Arret de nova all in one")
+ C.stop_instance(instance)
+}