Skip to content
This repository was archived by the owner on Mar 28, 2023. It is now read-only.

Commit 38d435f

Browse files
committed
Reconnection to web relay
1 parent 8687fad commit 38d435f

File tree

1 file changed

+33
-19
lines changed

1 file changed

+33
-19
lines changed

net/web_relay_manager.go

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@ import (
44
"crypto/sha256"
55
"encoding/binary"
66
"encoding/json"
7-
"fmt"
87
peer "gx/ipfs/QmYVXrKrKHDC9FobgmcmshCDyWwdrfwfanNQN4oxJ9Fk3h/go-libp2p-peer"
8+
"time"
99

1010
"github.com/OpenBazaar/openbazaar-go/pb"
1111
"github.com/golang/protobuf/ptypes/any"
@@ -62,7 +62,7 @@ func (wrm *WebRelayManager) ConnectToRelays(service NetworkService) {
6262
log.Error("Could not connect to: %s", relay)
6363
}
6464

65-
conns = append(conns, conn)
65+
wrm.connections = append(conns, conn)
6666
}
6767
}
6868

@@ -97,38 +97,36 @@ func (wrm *WebRelayManager) connectToServer(relay string, sender string) (*webso
9797
Type: "SubscribeMessage",
9898
Data: data,
9999
}
100-
fmt.Println("Sending SubscribeMessage:", typedmessage)
101100

102101
socketmessage, _ := json.Marshal(typedmessage)
103102

104-
fmt.Println(string(socketmessage))
105103
// Connect to websocket server
106-
fmt.Printf("Connecting to relay server: %s\n", relay)
104+
log.Debugf("Connecting to relay server: %s\n", relay)
107105

108106
c, _, err := websocket.DefaultDialer.Dial(relay, nil)
109107
if err != nil {
110-
log.Fatal("dial:", err)
108+
log.Error("dial:", err)
111109
return nil, err
112110
}
113111

114112
err = c.WriteMessage(websocket.TextMessage, socketmessage)
115113
if err != nil {
116-
fmt.Println("write:", err)
114+
log.Debugf("write:", err)
117115
return nil, err
118116
}
119117

120-
fmt.Printf("Successfully connected to %s and subscribed to: %s\n", relay, base58.Encode(subscriptionKey))
118+
log.Debugf("Successfully connected to %s and subscribed to: %s\n", relay, base58.Encode(subscriptionKey))
121119

122120
go func() {
123121
for {
124122
// read in a message
125123
_, p, err := c.ReadMessage()
126124
if err != nil {
127-
fmt.Println(err)
125+
log.Debugf("Connection to relay has an error: %s", err)
126+
log.Debugf("Attempting to reconnect to the relay...")
127+
wrm.reconnectToRelay(relay, sender)
128128
break
129129
}
130-
// print out that message for clarity
131-
fmt.Printf("Received incoming message from relay: %s\n", string(p))
132130

133131
if string(p) == "{\"subscribe\": true}" {
134132
log.Debugf("Received subscribe success message")
@@ -161,6 +159,17 @@ func (wrm *WebRelayManager) connectToServer(relay string, sender string) (*webso
161159
return c, nil
162160
}
163161

162+
func (wrm *WebRelayManager) reconnectToRelay(relay string, sender string) {
163+
conn, err := wrm.connectToServer(relay, wrm.peerID)
164+
if err != nil {
165+
log.Error("Could not connect to: %s", relay)
166+
time.Sleep(10 * time.Second)
167+
wrm.reconnectToRelay(relay, wrm.peerID)
168+
} else {
169+
wrm.connections = append(wrm.connections, conn)
170+
}
171+
}
172+
164173
func (wrm *WebRelayManager) SendRelayMessage(ciphertext string, recipient string) {
165174
encryptedmessage := EncryptedMessage{
166175
Message: ciphertext,
@@ -175,22 +184,27 @@ func (wrm *WebRelayManager) SendRelayMessage(ciphertext string, recipient string
175184
}
176185

177186
outgoing, _ := json.Marshal(typedmessage)
178-
fmt.Println(string(outgoing))
187+
log.Debugf("Sending encrypted relay message: %s", string(outgoing))
179188

180189
// Transmit the encrypted message to the webrelay
181190
wrm.authToWebRelay(wrm.webrelays[0], outgoing)
182-
183191
}
184192

185193
func (wrm *WebRelayManager) authToWebRelay(server string, msg []byte) {
186-
187194
for _, conn := range wrm.connections {
188-
err := conn.WriteMessage(websocket.TextMessage, msg)
189-
if err != nil {
190-
fmt.Println("write:", err)
191-
return
195+
if conn != nil {
196+
err := conn.WriteMessage(websocket.TextMessage, msg)
197+
if err != nil {
198+
log.Debugf("write:", err)
199+
} else {
200+
log.Debugf("Successfully sent message to relay: %s\n", conn.RemoteAddr())
201+
}
202+
192203
}
193-
fmt.Printf("Successfully sent message to relay: %s\n", conn.RemoteAddr())
204+
}
205+
206+
if len(wrm.connections) == 0 {
207+
log.Debugf("There are no websocket connections to send relay message to")
194208
}
195209

196210
}

0 commit comments

Comments
 (0)