From 7c3e5449560c5799215331841ac5e3c8e4c8bace Mon Sep 17 00:00:00 2001 From: Vishesh 'ironeagle' Bangotra Date: Tue, 25 Nov 2025 17:09:00 +0530 Subject: [PATCH] hello world --- .gitignore | 3 ++ docker-compose.yml | 70 ++++++++++++++++++++++++++++++++++++++++++++++ go.mod | 7 +++++ go.sum | 10 +++++++ local.yml | 9 ++++++ main.go | 1 + plugins/main.go | 36 ++++++++++++++++++++++++ 7 files changed, 136 insertions(+) create mode 100644 .gitignore create mode 100644 docker-compose.yml create mode 100644 go.mod create mode 100644 go.sum create mode 100644 local.yml create mode 100644 main.go create mode 100644 plugins/main.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..bd78f87 --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +.idea +/vendor/ +/build/ \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..334a353 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,70 @@ +version: '3' +services: + postgres: + command: postgres -c shared_preload_libraries=pg_stat_statements -c pg_stat_statements.track=all + container_name: template_nk_postgres + environment: + - POSTGRES_DB=nakama + - POSTGRES_PASSWORD=localdb + expose: + - "8080" + - "5432" + image: postgres:12.2-alpine + ports: + - "5432:5432" + - "8080:8080" + healthcheck: + test: ["CMD", "pg_isready", "-U", "postgres", "-d", "nakama"] + interval: 3s + timeout: 3s + retries: 5 + volumes: + - data:/var/lib/postgresql/data + + plugin-builder: + image: heroiclabs/nakama-pluginbuilder:3.21.0 + container_name: nk_plugin_builder + working_dir: /workspace + volumes: + - ./:/workspace + entrypoint: + - sh + - -c + - | + mkdir -p build + go mod tidy + go build --trimpath --buildmode=plugin -o build/main.so ./plugins + + nakama: + image: heroiclabs/nakama:3.21.0 + container_name: nk_backend + depends_on: + - postgres + entrypoint: + - "/bin/sh" + - "-ecx" + - > + /nakama/nakama migrate up --database.address postgres:localdb@postgres:5432/nakama?sslmode=disable && + exec /nakama/nakama --config /nakama/data/local.yml --database.address postgres:localdb@postgres:5432/nakama?sslmode=disable + volumes: + - ./local.yml:/nakama/data/local.yml + - ./build:/nakama/data/modules + expose: + - "7349" + - "7350" + - "7351" + healthcheck: + test: ["CMD", "/nakama/nakama", "healthcheck"] + interval: 10s + timeout: 5s + retries: 5 + links: + - "postgres:db" + ports: + - "7349:7349" + - "7350:7350" + - "7351:7351" + restart: unless-stopped + +volumes: + data: diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..0f308b7 --- /dev/null +++ b/go.mod @@ -0,0 +1,7 @@ +module git.aetoskia.com/lila-games/tic-tac-toe + +go 1.21 + +require github.com/heroiclabs/nakama-common v1.31.0 + +require google.golang.org/protobuf v1.31.0 // indirect diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..a3f0bb8 --- /dev/null +++ b/go.sum @@ -0,0 +1,10 @@ +github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= +github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU= +github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/heroiclabs/nakama-common v1.31.0 h1:oaJbwVRUiFXA77gXF3XNrGCmR0CXf7+2vXEvaBLkP6w= +github.com/heroiclabs/nakama-common v1.31.0/go.mod h1:Os8XeXGvHAap/p6M/8fQ3gle4eEXDGRQmoRNcPQTjXs= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= +google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= +google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= diff --git a/local.yml b/local.yml new file mode 100644 index 0000000..52cd663 --- /dev/null +++ b/local.yml @@ -0,0 +1,9 @@ +console: + max_message_size_bytes: 409600 +logger: + level: "DEBUG" +session: + token_expiry_sec: 7200 # 2 hours +socket: + max_message_size_bytes: 4096 # reserved buffer + max_request_size_bytes: 131072 diff --git a/main.go b/main.go new file mode 100644 index 0000000..06ab7d0 --- /dev/null +++ b/main.go @@ -0,0 +1 @@ +package main diff --git a/plugins/main.go b/plugins/main.go new file mode 100644 index 0000000..af1cf87 --- /dev/null +++ b/plugins/main.go @@ -0,0 +1,36 @@ +package main + +import ( + "context" + "database/sql" + + "github.com/heroiclabs/nakama-common/runtime" +) + +func HelloWorld( + ctx context.Context, + logger runtime.Logger, + db *sql.DB, + nk runtime.NakamaModule, + payload string, +) (string, error) { + logger.Info("HelloWorld RPC called — payload: %s", payload) + return `{"message": "Hello from Go RPC!"}`, nil +} + +// Required module initializer +func InitModule( + ctx context.Context, + logger runtime.Logger, + db *sql.DB, + nk runtime.NakamaModule, + initializer runtime.Initializer, +) error { + if err := initializer.RegisterRpc("hello_world", HelloWorld); err != nil { + logger.Error("Failed to register RPC: %v", err) + return err + } + + logger.Info("Go module loaded successfully!") + return nil +}