mirror of
				https://source.quilibrium.com/quilibrium/ceremonyclient.git
				synced 2025-11-04 10:37:27 +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)
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |