Skip to content

Commit

Permalink
Bump go-spacemesh to 1.0.8
Browse files Browse the repository at this point in the history
  • Loading branch information
kacpersaw committed Aug 3, 2023
1 parent fbf2894 commit fe472cc
Show file tree
Hide file tree
Showing 4 changed files with 1,012 additions and 121 deletions.
170 changes: 86 additions & 84 deletions client/client.go
Original file line number Diff line number Diff line change
@@ -1,43 +1,45 @@
package client

import (
// "bytes"
"net/http"
"time"
"fmt"

"github.com/spacemeshos/go-spacemesh/log"
// "bytes"
"net/http"
"time"

"github.com/gorilla/websocket"
"github.com/spacemeshos/go-spacemesh/log"

"github.com/gorilla/websocket"
)

const (
// Time allowed to write a message to the peer.
writeWait = 10 * time.Second
// Time allowed to write a message to the peer.
writeWait = 10 * time.Second

// Time allowed to read the next pong message from the peer.
pongWait = 60 * time.Second
// Time allowed to read the next pong message from the peer.
pongWait = 60 * time.Second

// Send pings to peer with this period. Must be less than pongWait.
pingPeriod = (pongWait * 9) / 10
// Send pings to peer with this period. Must be less than pongWait.
pingPeriod = (pongWait * 9) / 10

// Maximum message size allowed from peer.
maxReadSize = 512
// Maximum message size allowed from peer.
maxReadSize = 512
)

var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 4096,
ReadBufferSize: 1024,
WriteBufferSize: 4096,
}

// Client is a middleman between the websocket connection and the bus.
type Client struct {
bus *Bus
bus *Bus

// The websocket connection.
conn *websocket.Conn
// The websocket connection.
conn *websocket.Conn

// Buffered channel of outbound messages.
send chan []byte
// Buffered channel of outbound messages.
send chan []byte
}

// readPump pumps messages from the websocket connection to the bus.
Expand All @@ -46,24 +48,24 @@ type Client struct {
// ensures that there is at most one reader on a connection by executing all
// reads from this goroutine.
func (c *Client) readPump() {
log.Info("Start client read pump")
defer func() {
c.bus.Unregister <- c
c.conn.Close()
log.Info("Stop client read pump")
}()
c.conn.SetReadLimit(maxReadSize)
c.conn.SetReadDeadline(time.Now().Add(pongWait))
c.conn.SetPongHandler(func(string) error { c.conn.SetReadDeadline(time.Now().Add(pongWait)); return nil })
for {
_, _, err := c.conn.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
log.Error("error: %v", err)
}
break
}
}
log.Info("Start client read pump")
defer func() {
c.bus.Unregister <- c
c.conn.Close()
log.Info("Stop client read pump")
}()
c.conn.SetReadLimit(maxReadSize)
c.conn.SetReadDeadline(time.Now().Add(pongWait))
c.conn.SetPongHandler(func(string) error { c.conn.SetReadDeadline(time.Now().Add(pongWait)); return nil })
for {
_, _, err := c.conn.ReadMessage()
if err != nil {
if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
log.Err(fmt.Errorf("error: %v", err))
}
break
}
}
}

// writePump pumps messages from the bus to the websocket connection.
Expand All @@ -72,54 +74,54 @@ func (c *Client) readPump() {
// application ensures that there is at most one writer to a connection by
// executing all writes from this goroutine.
func (c *Client) writePump() {
log.Info("Start client write pump")
ticker := time.NewTicker(pingPeriod)
defer func() {
ticker.Stop()
c.conn.Close()
log.Info("Stop client write pump")
}()
for {
select {
case message, ok := <-c.send:
c.conn.SetWriteDeadline(time.Now().Add(writeWait))
if !ok {
// The bus closed the channel.
c.conn.WriteMessage(websocket.CloseMessage, []byte{})
return
}

w, err := c.conn.NextWriter(websocket.TextMessage)
if err != nil {
return
}
w.Write(message)

if err := w.Close(); err != nil {
return
}
case <-ticker.C:
c.conn.SetWriteDeadline(time.Now().Add(writeWait))
if err := c.conn.WriteMessage(websocket.PingMessage, nil); err != nil {
return
}
}
}
log.Info("Start client write pump")
ticker := time.NewTicker(pingPeriod)
defer func() {
ticker.Stop()
c.conn.Close()
log.Info("Stop client write pump")
}()
for {
select {
case message, ok := <-c.send:
c.conn.SetWriteDeadline(time.Now().Add(writeWait))
if !ok {
// The bus closed the channel.
c.conn.WriteMessage(websocket.CloseMessage, []byte{})
return
}

w, err := c.conn.NextWriter(websocket.TextMessage)
if err != nil {
return
}
w.Write(message)

if err := w.Close(); err != nil {
return
}
case <-ticker.C:
c.conn.SetWriteDeadline(time.Now().Add(writeWait))
if err := c.conn.WriteMessage(websocket.PingMessage, nil); err != nil {
return
}
}
}
}

// serveWs handles websocket requests from the peer.
func ServeWs(bus *Bus, w http.ResponseWriter, r *http.Request) {
upgrader.CheckOrigin = func(r *http.Request) bool { return true }
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Error("Serve WS error: %v", err)
return
}
client := &Client{bus: bus, conn: conn, send: make(chan []byte, 256)}
client.bus.Register <- client

// Allow collection of memory referenced by the caller by doing all work in
// new goroutines.
go client.writePump()
go client.readPump()
upgrader.CheckOrigin = func(r *http.Request) bool { return true }
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Err(fmt.Errorf("Serve WS error: %v", err))
return
}
client := &Client{bus: bus, conn: conn, send: make(chan []byte, 256)}
client.bus.Register <- client

// Allow collection of memory referenced by the caller by doing all work in
// new goroutines.
go client.writePump()
go client.readPump()
}
4 changes: 2 additions & 2 deletions dash-backend.go
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ func main() {

history, err := history.NewHistory(nil, bus, mongoDbUrlStringFlag, mongoDbNameStringFlag)
if err != nil {
log.Error("Create History service error: %v", err)
log.Err(fmt.Errorf("Create History service error: %v", err))
return err
}
go history.Run()
Expand All @@ -107,7 +107,7 @@ func main() {

err = http.ListenAndServe(listenStringFlag, nil)
if err != nil {
log.Error("Create HTTP ssrver error: %v", err)
log.Err(fmt.Errorf("Create HTTP ssrver error: %v", err))
return err
}

Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ go 1.13

require (
github.com/gorilla/websocket v1.5.0
github.com/spacemeshos/explorer-backend v1.0.0
github.com/spacemeshos/go-spacemesh v0.3.12-beta.0
github.com/spacemeshos/explorer-backend v1.0.1
github.com/spacemeshos/go-spacemesh v1.0.8
github.com/urfave/cli/v2 v2.23.7
go.mongodb.org/mongo-driver v1.11.1
)
Loading

0 comments on commit fe472cc

Please sign in to comment.