diff --git a/main.go b/main.go index f7431af..560a7ba 100644 --- a/main.go +++ b/main.go @@ -60,8 +60,6 @@ func realMain() int { return 1 } - go sarc.ReceiveLoop() - srv := server.New(sarc) server := &http.Server{ diff --git a/receiver/client.go b/receiver/client.go index 4f2c149..3149a31 100644 --- a/receiver/client.go +++ b/receiver/client.go @@ -110,7 +110,7 @@ func New(uri *url.URL) (*Client, error) { // ReceiveLoop is a blocking call and it loop over receiving messages over the // websocket and record them internally to be consumed by either Pop() or // Flush(). -func (c *Client) ReceiveLoop() { +func (c *Client) ReceiveLoop() error { log.Print("Starting the receive loop from Signal API") for { @@ -118,7 +118,7 @@ func (c *Client) ReceiveLoop() { if err != nil { log.Printf("error returned by the websocket: %s", err) - return + return err } c.recordMessage(msg) diff --git a/server/server.go b/server/server.go index 0da8285..23f23ca 100644 --- a/server/server.go +++ b/server/server.go @@ -3,6 +3,7 @@ package server import ( "encoding/json" "fmt" + "log" "net/http" "github.com/kalbasit/signal-api-receiver/receiver" @@ -19,13 +20,25 @@ type Server struct { } type client interface { + ReceiveLoop() error Pop() *receiver.Message Flush() []receiver.Message } // New returns a new Server. func New(sarc client) *Server { - return &Server{sarc: sarc} + s := &Server{sarc: sarc} + go s.start() + + return s +} + +func (s *Server) start() { + for { + if err := s.sarc.ReceiveLoop(); err != nil { + log.Printf("Error in the receive loop: %v", err) + } + } } // ServeHTTP implements the http.Handler interface diff --git a/server/server_test.go b/server/server_test.go index e716468..02b2607 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -19,6 +19,10 @@ type mockClient struct { msgs []receiver.Message } +func (mc *mockClient) ReceiveLoop() error { + return nil +} + func (mc *mockClient) Pop() *receiver.Message { if len(mc.msgs) == 0 { return nil