Implement direct messaging

This commit is contained in:
anhthii
2023-11-04 21:06:07 +07:00
parent 63f35178cc
commit cedbef54e9
5 changed files with 79 additions and 1 deletions
+5
View File
@@ -0,0 +1,5 @@
generate-id:
go run cmd/generate-id/main.go
clean:
rm -rf tmp
+46
View File
@@ -0,0 +1,46 @@
package messaging
import (
"fmt"
"time"
"github.com/nats-io/nats.go"
)
type DirectMessaging interface {
Listen(target string, handler func(data []byte)) error
Send(target string, data []byte) error
}
type natsDirectMessaging struct {
natsConn *nats.Conn
ch chan []byte
}
func newNatsDirectMessaging(natsConn *nats.Conn) DirectMessaging {
return &natsDirectMessaging{
natsConn: natsConn,
ch: make(chan []byte),
}
}
func (d *natsDirectMessaging) Send(id string, message []byte) error {
msg, err := d.natsConn.Request(id, message, time.Second)
if err != nil {
return err
}
fmt.Printf("msg = %+v\n", msg)
return nil
}
func (d *natsDirectMessaging) Listen(id string, handler func(data []byte)) error {
_, err := d.natsConn.Subscribe(id, func(m *nats.Msg) {
d.ch <- m.Data
handler(m.Data)
m.Respond([]byte("OK"))
})
if err != nil {
return err
}
return nil
}
@@ -1,4 +1,4 @@
package infra
package messaging
import (
"github.com/nats-io/nats.go"
+27
View File
@@ -0,0 +1,27 @@
package node
import "github.com/cryptoniumX/mpcium/pkg/messaging"
type ID string
type Party struct {
id string
peerIDs []string
pubSub messaging.PubSub
direct messaging.DirectMessaging
}
func NewParty(
id string,
peerIDs []string,
pubSub messaging.PubSub,
direct messaging.DirectMessaging,
) *Party {
return &Party{
id: id,
peerIDs: peerIDs,
pubSub: pubSub,
direct: direct,
}
}