@@ -14,8 +14,9 @@ import (
14
14
)
15
15
16
16
type WebRelayManager struct {
17
- webrelays []string
18
- peerID string
17
+ webrelays []string
18
+ peerID string
19
+ connections []* websocket.Conn
19
20
}
20
21
21
22
type EncryptedMessage struct {
@@ -34,34 +35,25 @@ type SubscribeMessage struct {
34
35
}
35
36
36
37
func NewWebRelayManager (webrelays []string , sender string ) * WebRelayManager {
37
- return & WebRelayManager {webrelays , sender }
38
- }
39
38
40
- func (wrm * WebRelayManager ) SendRelayMessage (ciphertext string , recipient string ) {
41
- encryptedmessage := EncryptedMessage {
42
- Message : ciphertext ,
43
- Recipient : recipient ,
44
- }
39
+ // Establish connections
40
+ var conns []* websocket.Conn
41
+ for _ , relay := range webrelays {
45
42
46
- data , _ := json .Marshal (encryptedmessage )
43
+ // Connect and subscribe to websocket server
44
+ conn , err := connectToServer (relay , sender )
45
+ if err != nil {
46
+ log .Error ("Could not connect to: %s" , relay )
47
+ }
47
48
48
- typedmessage := TypedMessage {
49
- Type : "EncryptedMessage" ,
50
- Data : data ,
49
+ conns = append (conns , conn )
51
50
}
52
-
53
- outgoing , _ := json .Marshal (typedmessage )
54
- fmt .Println (string (outgoing ))
55
-
56
- // Transmit the encrypted message to the webrelay
57
- wrm .authToWebRelay (wrm .webrelays [0 ], outgoing )
58
-
51
+ return & WebRelayManager {webrelays , sender , conns }
59
52
}
60
53
61
- func (wrm * WebRelayManager ) authToWebRelay (server string , msg []byte ) {
62
-
54
+ func connectToServer (relay string , sender string ) (* websocket.Conn , error ) {
63
55
// Generate subscription key for web relay
64
- peerIDMultihash , _ := multihash .FromB58String (wrm . peerID )
56
+ peerIDMultihash , _ := multihash .FromB58String (sender )
65
57
decoded , _ := multihash .Decode (peerIDMultihash )
66
58
digest := decoded .Digest
67
59
prefix := digest [:8 ]
@@ -81,7 +73,7 @@ func (wrm *WebRelayManager) authToWebRelay(server string, msg []byte) {
81
73
82
74
// Generate subscribe message
83
75
subscribeMessage := SubscribeMessage {
84
- UserID : wrm . peerID ,
76
+ UserID : sender ,
85
77
SubscriptionKey : base58 .Encode (subscriptionKey ),
86
78
}
87
79
@@ -90,29 +82,60 @@ func (wrm *WebRelayManager) authToWebRelay(server string, msg []byte) {
90
82
Type : "SubscribeMessage" ,
91
83
Data : data ,
92
84
}
93
- fmt .Println (typedmessage )
85
+ fmt .Println ("Sending SubscribeMessage:" , typedmessage )
94
86
95
87
socketmessage , _ := json .Marshal (typedmessage )
96
88
97
89
// Connect to websocket server
98
- fmt .Printf ("connecting to %s\n " , server )
90
+ fmt .Printf ("Connecting to relay server: %s\n " , relay )
99
91
100
- c , _ , err := websocket .DefaultDialer .Dial (server , nil )
92
+ c , _ , err := websocket .DefaultDialer .Dial (relay , nil )
101
93
if err != nil {
102
94
log .Fatal ("dial:" , err )
95
+ return nil , err
103
96
}
104
- defer c .Close ()
105
97
106
98
err = c .WriteMessage (websocket .TextMessage , socketmessage )
107
99
if err != nil {
108
100
fmt .Println ("write:" , err )
109
- return
101
+ return nil , err
110
102
}
111
103
112
- err = c .WriteMessage (websocket .TextMessage , msg )
113
- if err != nil {
114
- fmt .Println ("write:" , err )
115
- return
104
+ fmt .Printf ("Successfully connected and subscribed to: %s\n " , relay )
105
+
106
+ return c , nil
107
+ }
108
+
109
+ func (wrm * WebRelayManager ) SendRelayMessage (ciphertext string , recipient string ) {
110
+ encryptedmessage := EncryptedMessage {
111
+ Message : ciphertext ,
112
+ Recipient : recipient ,
113
+ }
114
+
115
+ data , _ := json .Marshal (encryptedmessage )
116
+
117
+ typedmessage := TypedMessage {
118
+ Type : "EncryptedMessage" ,
119
+ Data : data ,
120
+ }
121
+
122
+ outgoing , _ := json .Marshal (typedmessage )
123
+ fmt .Println (string (outgoing ))
124
+
125
+ // Transmit the encrypted message to the webrelay
126
+ wrm .authToWebRelay (wrm .webrelays [0 ], outgoing )
127
+
128
+ }
129
+
130
+ func (wrm * WebRelayManager ) authToWebRelay (server string , msg []byte ) {
131
+
132
+ for _ , conn := range wrm .connections {
133
+ err := conn .WriteMessage (websocket .TextMessage , msg )
134
+ if err != nil {
135
+ fmt .Println ("write:" , err )
136
+ return
137
+ }
138
+ fmt .Printf ("Successfully sent message to relay: %s\n " , conn .RemoteAddr ())
116
139
}
117
140
118
141
}
0 commit comments