From 297e5f59f731374130b41b9c6344ff65e9e76f35 Mon Sep 17 00:00:00 2001 From: Hasan Date: Wed, 8 Jan 2025 23:53:51 +0500 Subject: [PATCH 1/4] rabbitmq connection --- cmd/server/main.go | 22 ++++++++++++++++++++-- go.mod | 2 ++ go.sum | 2 ++ 3 files changed, 24 insertions(+), 2 deletions(-) diff --git a/cmd/server/main.go b/cmd/server/main.go index 58622c6a1..6a976bf5f 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -1,7 +1,25 @@ package main -import "fmt" +import ( + "fmt" + "log" + "os" + "os/signal" + + amqp "github.com/rabbitmq/amqp091-go" +) func main() { - fmt.Println("Starting Peril server...") + const rabbitmqConnection = "amqp://guest:guest@localhost:5672/" + + conn, err := amqp.Dial(rabbitmqConnection) + if err != nil { + log.Fatalf("could not connect to RabbitMQ: %v", err) + } + defer conn.Close() + fmt.Println("Peril game server connected to RabbitMQ!") + + signalChan := make(chan os.Signal, 1) + signal.Notify(signalChan, os.Interrupt) + <-signalChan } diff --git a/go.mod b/go.mod index 6bfacb3f0..cabfc2f4b 100644 --- a/go.mod +++ b/go.mod @@ -1,3 +1,5 @@ module github.com/bootdotdev/learn-pub-sub-starter go 1.22.1 + +require github.com/rabbitmq/amqp091-go v1.10.0 // indirect diff --git a/go.sum b/go.sum index e69de29bb..f4cf4f333 100644 --- a/go.sum +++ b/go.sum @@ -0,0 +1,2 @@ +github.com/rabbitmq/amqp091-go v1.10.0 h1:STpn5XsHlHGcecLmMFCtg7mqq0RnD+zFr4uzukfVhBw= +github.com/rabbitmq/amqp091-go v1.10.0/go.mod h1:Hy4jKW5kQART1u+JkDTF9YYOQUHXqMuhrgxOEeS7G4o= From a9c28820671720b23e8ef9c21c8fe5c766c0c288 Mon Sep 17 00:00:00 2001 From: Hasan <123514871+imhasandl@users.noreply.github.com> Date: Wed, 8 Jan 2025 23:55:53 +0500 Subject: [PATCH 2/4] Update README.md --- README.md | 2 -- 1 file changed, 2 deletions(-) diff --git a/README.md b/README.md index 071a2061a..43161c08c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1 @@ # learn-pub-sub-starter (Peril) - -This is the starter code used in Boot.dev's [Learn Pub/Sub](https://learn.boot.dev/learn-pub-sub) course. From c72463858da1383530647cfc55409fdfa7dfb80a Mon Sep 17 00:00:00 2001 From: Hasan Date: Thu, 9 Jan 2025 22:15:42 +0500 Subject: [PATCH 3/4] docker file --- .gitignore | 2 +- Dockerfile | 2 ++ go.mod | 4 ++-- go.sum | 2 ++ internal/gamelogic/logs.go | 2 +- internal/gamelogic/pause.go | 2 +- 6 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 Dockerfile diff --git a/.gitignore b/.gitignore index 397b4a762..6ab38c85c 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -*.log +.log diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 000000000..6c811a0be --- /dev/null +++ b/Dockerfile @@ -0,0 +1,2 @@ +FROM rabbitmq:3.13-management +RUN rabbitmq-plugins enable rabbitmq_stomp \ No newline at end of file diff --git a/go.mod b/go.mod index cabfc2f4b..7514e3d4c 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,5 @@ -module github.com/bootdotdev/learn-pub-sub-starter +module github.com/imhasandl/pub-sub-starter go 1.22.1 -require github.com/rabbitmq/amqp091-go v1.10.0 // indirect +require github.com/rabbitmq/amqp091-go v1.10.0 diff --git a/go.sum b/go.sum index f4cf4f333..024eebe75 100644 --- a/go.sum +++ b/go.sum @@ -1,2 +1,4 @@ github.com/rabbitmq/amqp091-go v1.10.0 h1:STpn5XsHlHGcecLmMFCtg7mqq0RnD+zFr4uzukfVhBw= github.com/rabbitmq/amqp091-go v1.10.0/go.mod h1:Hy4jKW5kQART1u+JkDTF9YYOQUHXqMuhrgxOEeS7G4o= +go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= +go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= diff --git a/internal/gamelogic/logs.go b/internal/gamelogic/logs.go index f9af79fc8..4e69dbf33 100644 --- a/internal/gamelogic/logs.go +++ b/internal/gamelogic/logs.go @@ -6,7 +6,7 @@ import ( "os" "time" - "github.com/bootdotdev/learn-pub-sub-starter/internal/routing" + "github.com/imhasandl/pub-sub-starter/internal/routing" ) const logsFile = "game.log" diff --git a/internal/gamelogic/pause.go b/internal/gamelogic/pause.go index 5874f3c0b..ebb8e186e 100644 --- a/internal/gamelogic/pause.go +++ b/internal/gamelogic/pause.go @@ -3,7 +3,7 @@ package gamelogic import ( "fmt" - "github.com/bootdotdev/learn-pub-sub-starter/internal/routing" + "github.com/imhasandl/pub-sub-starter/internal/routing" ) func (gs *GameState) HandlePause(ps routing.PlayingState) { From d7aced2e1be9951f7d3bb30792ed304e8aef48d1 Mon Sep 17 00:00:00 2001 From: Hasan Date: Thu, 9 Jan 2025 22:54:00 +0500 Subject: [PATCH 4/4] publish json --- Dockerfile | 2 -- cmd/server/main.go | 20 ++++++++++++++++++++ internal/pubsub/publish.go | 30 ++++++++++++++++++++++++++++++ 3 files changed, 50 insertions(+), 2 deletions(-) delete mode 100644 Dockerfile create mode 100644 internal/pubsub/publish.go diff --git a/Dockerfile b/Dockerfile deleted file mode 100644 index 6c811a0be..000000000 --- a/Dockerfile +++ /dev/null @@ -1,2 +0,0 @@ -FROM rabbitmq:3.13-management -RUN rabbitmq-plugins enable rabbitmq_stomp \ No newline at end of file diff --git a/cmd/server/main.go b/cmd/server/main.go index 6a976bf5f..9d1e016cc 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -6,6 +6,8 @@ import ( "os" "os/signal" + "github.com/imhasandl/pub-sub-starter/internal/pubsub" + "github.com/imhasandl/pub-sub-starter/internal/routing" amqp "github.com/rabbitmq/amqp091-go" ) @@ -22,4 +24,22 @@ func main() { signalChan := make(chan os.Signal, 1) signal.Notify(signalChan, os.Interrupt) <-signalChan + + publishCh, err := conn.Channel() + if err != nil { + log.Fatalf("could not create channel: %v", err) + } + + err = pubsub.PublishJSON( + publishCh, + routing.ExchangePerilDirect, + routing.PauseKey, + routing.PlayingState{ + IsPaused: true, + }, + ) + if err != nil { + log.Printf("could not publish time: %v", err) + } + fmt.Println("Pause message sent!") } diff --git a/internal/pubsub/publish.go b/internal/pubsub/publish.go new file mode 100644 index 000000000..142ed2dc4 --- /dev/null +++ b/internal/pubsub/publish.go @@ -0,0 +1,30 @@ +package pubsub + +import ( + "context" + "encoding/json" + + amqp "github.com/rabbitmq/amqp091-go" +) + + +func PublishJSON[T any](ch *amqp.Channel, exchange, key string, val T) error { + dat, err := json.Marshal(val) + if err != nil { + return err + } + + err = ch.PublishWithContext( + context.Background(), + exchange, + key, + false, + false, + amqp.Publishing{ + ContentType: "application/json", + Body: dat, + }, + ) + + return err +} \ No newline at end of file