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

Commit 8cdce94

Browse files
committed
Refactor to send message to all relays
Keep connections open and refactor sending outbound messages to all connections.
1 parent e0cc81b commit 8cdce94

File tree

1 file changed

+56
-33
lines changed

1 file changed

+56
-33
lines changed

net/web_relay_manager.go

Lines changed: 56 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,9 @@ import (
1414
)
1515

1616
type WebRelayManager struct {
17-
webrelays []string
18-
peerID string
17+
webrelays []string
18+
peerID string
19+
connections []*websocket.Conn
1920
}
2021

2122
type EncryptedMessage struct {
@@ -34,34 +35,25 @@ type SubscribeMessage struct {
3435
}
3536

3637
func NewWebRelayManager(webrelays []string, sender string) *WebRelayManager {
37-
return &WebRelayManager{webrelays, sender}
38-
}
3938

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 {
4542

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+
}
4748

48-
typedmessage := TypedMessage{
49-
Type: "EncryptedMessage",
50-
Data: data,
49+
conns = append(conns, conn)
5150
}
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}
5952
}
6053

61-
func (wrm *WebRelayManager) authToWebRelay(server string, msg []byte) {
62-
54+
func connectToServer(relay string, sender string) (*websocket.Conn, error) {
6355
// Generate subscription key for web relay
64-
peerIDMultihash, _ := multihash.FromB58String(wrm.peerID)
56+
peerIDMultihash, _ := multihash.FromB58String(sender)
6557
decoded, _ := multihash.Decode(peerIDMultihash)
6658
digest := decoded.Digest
6759
prefix := digest[:8]
@@ -81,7 +73,7 @@ func (wrm *WebRelayManager) authToWebRelay(server string, msg []byte) {
8173

8274
// Generate subscribe message
8375
subscribeMessage := SubscribeMessage{
84-
UserID: wrm.peerID,
76+
UserID: sender,
8577
SubscriptionKey: base58.Encode(subscriptionKey),
8678
}
8779

@@ -90,29 +82,60 @@ func (wrm *WebRelayManager) authToWebRelay(server string, msg []byte) {
9082
Type: "SubscribeMessage",
9183
Data: data,
9284
}
93-
fmt.Println(typedmessage)
85+
fmt.Println("Sending SubscribeMessage:", typedmessage)
9486

9587
socketmessage, _ := json.Marshal(typedmessage)
9688

9789
// Connect to websocket server
98-
fmt.Printf("connecting to %s\n", server)
90+
fmt.Printf("Connecting to relay server: %s\n", relay)
9991

100-
c, _, err := websocket.DefaultDialer.Dial(server, nil)
92+
c, _, err := websocket.DefaultDialer.Dial(relay, nil)
10193
if err != nil {
10294
log.Fatal("dial:", err)
95+
return nil, err
10396
}
104-
defer c.Close()
10597

10698
err = c.WriteMessage(websocket.TextMessage, socketmessage)
10799
if err != nil {
108100
fmt.Println("write:", err)
109-
return
101+
return nil, err
110102
}
111103

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())
116139
}
117140

118141
}

0 commit comments

Comments
 (0)