@@ -5,18 +5,23 @@ import (
5
5
"encoding/binary"
6
6
"encoding/json"
7
7
"fmt"
8
+ peer "gx/ipfs/QmYVXrKrKHDC9FobgmcmshCDyWwdrfwfanNQN4oxJ9Fk3h/go-libp2p-peer"
8
9
9
- "github.com/btcsuite/btcutil/base58"
10
+ "github.com/OpenBazaar/openbazaar-go/pb"
11
+ "github.com/golang/protobuf/ptypes/any"
10
12
11
13
"gx/ipfs/QmerPMzPk1mJVowm8KgmoknWa4yCYvvugMPsgWmDNUvDLW/go-multihash"
12
14
15
+ "github.com/btcsuite/btcutil/base58"
16
+
13
17
"github.com/gorilla/websocket"
14
18
)
15
19
16
20
type WebRelayManager struct {
17
21
webrelays []string
18
22
peerID string
19
23
connections []* websocket.Conn
24
+ obService NetworkService
20
25
}
21
26
22
27
type EncryptedMessage struct {
@@ -34,24 +39,34 @@ type SubscribeMessage struct {
34
39
SubscriptionKey string `json:"subscriptionKey"`
35
40
}
36
41
42
+ type SubscribeResponse struct {
43
+ Subscribe string `json:"subscribe"`
44
+ }
45
+
37
46
func NewWebRelayManager (webrelays []string , sender string ) * WebRelayManager {
47
+ return & WebRelayManager {webrelays , sender , nil , nil }
48
+ }
49
+
50
+ func (wrm * WebRelayManager ) ConnectToRelays (service NetworkService ) {
51
+
52
+ // Set WRM service
53
+ wrm .obService = service
38
54
39
55
// Establish connections
40
56
var conns []* websocket.Conn
41
- for _ , relay := range webrelays {
57
+ for _ , relay := range wrm . webrelays {
42
58
43
59
// Connect and subscribe to websocket server
44
- conn , err := connectToServer (relay , sender )
60
+ conn , err := wrm . connectToServer (relay , wrm . peerID )
45
61
if err != nil {
46
62
log .Error ("Could not connect to: %s" , relay )
47
63
}
48
64
49
65
conns = append (conns , conn )
50
66
}
51
- return & WebRelayManager {webrelays , sender , conns }
52
67
}
53
68
54
- func connectToServer (relay string , sender string ) (* websocket.Conn , error ) {
69
+ func ( wrm * WebRelayManager ) connectToServer (relay string , sender string ) (* websocket.Conn , error ) {
55
70
// Generate subscription key for web relay
56
71
peerIDMultihash , _ := multihash .FromB58String (sender )
57
72
decoded , _ := multihash .Decode (peerIDMultihash )
@@ -102,7 +117,7 @@ func connectToServer(relay string, sender string) (*websocket.Conn, error) {
102
117
return nil , err
103
118
}
104
119
105
- fmt .Printf ("Successfully connected and subscribed to: %s\n " , relay )
120
+ fmt .Printf ("Successfully connected to %s and subscribed to: %s\n " , relay , base58 . Encode ( subscriptionKey ) )
106
121
107
122
go func () {
108
123
for {
@@ -115,10 +130,30 @@ func connectToServer(relay string, sender string) (*websocket.Conn, error) {
115
130
// print out that message for clarity
116
131
fmt .Printf ("Received incoming message from relay: %s\n " , string (p ))
117
132
118
- //if err := c.WriteMessage(messageType, p); err != nil {
119
- // fmt.Println(err)
120
- // //return nil, err
121
- //}
133
+ if string (p ) == "{\" subscribe\" : true}" {
134
+ log .Debugf ("Received subscribe success message" )
135
+ } else {
136
+ // turn encrypted message into OFFLINE_RELAY and process normally
137
+ m := new (pb.Message )
138
+ m .MessageType = pb .Message_OFFLINE_RELAY
139
+ m .Payload = & any.Any {Value : p }
140
+
141
+ handler := wrm .obService .HandlerForMsgType (m .MessageType )
142
+
143
+ peerID , _ := peer .IDB58Decode (sender )
144
+
145
+ if peerID != "" {
146
+ m , err = handler (peerID , m , nil )
147
+ if err != nil {
148
+ if m != nil {
149
+ log .Debugf ("%s handle message error: %s" , m .MessageType .String (), err .Error ())
150
+ } else {
151
+ log .Errorf ("Error: %s" , err .Error ())
152
+ }
153
+ }
154
+ log .Debugf ("Received OFFLINE_RELAY2 message from %s" , peerID .Pretty ())
155
+ }
156
+ }
122
157
123
158
}
124
159
}()
0 commit comments