mirror of
https://source.quilibrium.com/quilibrium/ceremonyclient.git
synced 2024-11-15 20:55:17 +00:00
58 lines
1.2 KiB
Go
58 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/gogo/protobuf/proto"
|
|
pubsub "github.com/libp2p/go-libp2p-pubsub"
|
|
peer "github.com/libp2p/go-libp2p/core/peer"
|
|
)
|
|
|
|
var handles = map[string]string{}
|
|
|
|
const pubsubTopic = "/libp2p/example/chat/1.0.0"
|
|
|
|
func pubsubMessageHandler(id peer.ID, msg *SendMessage) {
|
|
handle, ok := handles[id.String()]
|
|
if !ok {
|
|
handle = id.ShortString()
|
|
}
|
|
fmt.Printf("%s: %s\n", handle, msg.Data)
|
|
}
|
|
|
|
func pubsubUpdateHandler(id peer.ID, msg *UpdatePeer) {
|
|
oldHandle, ok := handles[id.String()]
|
|
if !ok {
|
|
oldHandle = id.ShortString()
|
|
}
|
|
handles[id.String()] = string(msg.UserHandle)
|
|
fmt.Printf("%s -> %s\n", oldHandle, msg.UserHandle)
|
|
}
|
|
|
|
func pubsubHandler(ctx context.Context, sub *pubsub.Subscription) {
|
|
defer sub.Cancel()
|
|
for {
|
|
msg, err := sub.Next(ctx)
|
|
if err != nil {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
continue
|
|
}
|
|
|
|
req := &Request{}
|
|
err = proto.Unmarshal(msg.Data, req)
|
|
if err != nil {
|
|
fmt.Fprintln(os.Stderr, err)
|
|
continue
|
|
}
|
|
|
|
switch *req.Type {
|
|
case Request_SEND_MESSAGE:
|
|
pubsubMessageHandler(msg.GetFrom(), req.SendMessage)
|
|
case Request_UPDATE_PEER:
|
|
pubsubUpdateHandler(msg.GetFrom(), req.UpdatePeer)
|
|
}
|
|
}
|
|
}
|