4
4
"crypto/sha256"
5
5
"encoding/binary"
6
6
"encoding/json"
7
- "fmt"
8
7
peer "gx/ipfs/QmYVXrKrKHDC9FobgmcmshCDyWwdrfwfanNQN4oxJ9Fk3h/go-libp2p-peer"
8
+ "time"
9
9
10
10
"github.com/OpenBazaar/openbazaar-go/pb"
11
11
"github.com/golang/protobuf/ptypes/any"
@@ -62,7 +62,7 @@ func (wrm *WebRelayManager) ConnectToRelays(service NetworkService) {
62
62
log .Error ("Could not connect to: %s" , relay )
63
63
}
64
64
65
- conns = append (conns , conn )
65
+ wrm . connections = append (conns , conn )
66
66
}
67
67
}
68
68
@@ -97,38 +97,36 @@ func (wrm *WebRelayManager) connectToServer(relay string, sender string) (*webso
97
97
Type : "SubscribeMessage" ,
98
98
Data : data ,
99
99
}
100
- fmt .Println ("Sending SubscribeMessage:" , typedmessage )
101
100
102
101
socketmessage , _ := json .Marshal (typedmessage )
103
102
104
- fmt .Println (string (socketmessage ))
105
103
// Connect to websocket server
106
- fmt . Printf ("Connecting to relay server: %s\n " , relay )
104
+ log . Debugf ("Connecting to relay server: %s\n " , relay )
107
105
108
106
c , _ , err := websocket .DefaultDialer .Dial (relay , nil )
109
107
if err != nil {
110
- log .Fatal ("dial:" , err )
108
+ log .Error ("dial:" , err )
111
109
return nil , err
112
110
}
113
111
114
112
err = c .WriteMessage (websocket .TextMessage , socketmessage )
115
113
if err != nil {
116
- fmt . Println ("write:" , err )
114
+ log . Debugf ("write:" , err )
117
115
return nil , err
118
116
}
119
117
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 ))
121
119
122
120
go func () {
123
121
for {
124
122
// read in a message
125
123
_ , p , err := c .ReadMessage ()
126
124
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 )
128
128
break
129
129
}
130
- // print out that message for clarity
131
- fmt .Printf ("Received incoming message from relay: %s\n " , string (p ))
132
130
133
131
if string (p ) == "{\" subscribe\" : true}" {
134
132
log .Debugf ("Received subscribe success message" )
@@ -161,6 +159,17 @@ func (wrm *WebRelayManager) connectToServer(relay string, sender string) (*webso
161
159
return c , nil
162
160
}
163
161
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
+
164
173
func (wrm * WebRelayManager ) SendRelayMessage (ciphertext string , recipient string ) {
165
174
encryptedmessage := EncryptedMessage {
166
175
Message : ciphertext ,
@@ -175,22 +184,27 @@ func (wrm *WebRelayManager) SendRelayMessage(ciphertext string, recipient string
175
184
}
176
185
177
186
outgoing , _ := json .Marshal (typedmessage )
178
- fmt . Println ( string (outgoing ))
187
+ log . Debugf ( "Sending encrypted relay message: %s" , string (outgoing ))
179
188
180
189
// Transmit the encrypted message to the webrelay
181
190
wrm .authToWebRelay (wrm .webrelays [0 ], outgoing )
182
-
183
191
}
184
192
185
193
func (wrm * WebRelayManager ) authToWebRelay (server string , msg []byte ) {
186
-
187
194
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
+
192
203
}
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" )
194
208
}
195
209
196
210
}
0 commit comments