Not a member of Pastebin yet?
                        Sign Up,
                        it unlocks many cool features!                    
                - package main
 - import (
 - "fmt"
 - "log"
 - "os"
 - "sync"
 - "github.com/hashicorp/memberlist"
 - "github.com/hashicorp/serf/serf"
 - )
 - const (
 - UDPBufferSize = 2000
 - baseAddress = "127.0.0.1"
 - )
 - var (
 - nodeAddress string
 - NODE_ID = os.Getenv("NODE_ID")
 - knownNodes = []string{fmt.Sprintf("%s:%s", baseAddress, NODE_ID)}
 - broadcasts *memberlist.TransmitLimitedQueue
 - )
 - type broadcast struct {
 - msg []byte
 - notify chan<- struct{}
 - }
 - type delegate struct{}
 - type update struct {
 - Action string // add, del
 - Data map[string]string
 - }
 - func (b *broadcast) Invalidates(other memberlist.Broadcast) bool {
 - return false
 - }
 - func (b *broadcast) Message() []byte {
 - return b.msg
 - }
 - func (b *broadcast) Finished() {
 - if b.notify != nil {
 - close(b.notify)
 - }
 - }
 - func (d *delegate) NodeMeta(limit int) []byte {
 - return []byte{}
 - }
 - func (d *delegate) NotifyMsg(b []byte) {
 - if len(b) == 0 {
 - return
 - }
 - fmt.Println("Received message")
 - }
 - func (d *delegate) GetBroadcasts(overhead, limit int) [][]byte {
 - return broadcasts.GetBroadcasts(overhead, limit)
 - }
 - func (d *delegate) LocalState(join bool) []byte {
 - fmt.Println("push pulllll")
 - return []byte{}
 - }
 - func (d *delegate) MergeRemoteState(buf []byte, join bool) {
 - }
 - func configServer() error {
 - hostname, _ := os.Hostname()
 - memberlistConfig := memberlist.DefaultLocalConfig()
 - memberlistConfig.Name = nodeAddress
 - memberlistConfig.BindAddr = baseAddress
 - if _, err := fmt.Sscanf(NODE_ID, "%d", &memberlistConfig.BindPort); err != nil {
 - return err
 - }
 - memberlistConfig.PushPullInterval = 0
 - memberlistConfig.UDPBufferSize = UDPBufferSize
 - memberlistConfig.Delegate = &delegate{}
 - memberlistConfig.Name = nodeAddress
 - serfConfig := serf.DefaultConfig()
 - serfConfig.NodeName = nodeAddress
 - // serfConfig.EventCh = serfEvents
 - serfConfig.MemberlistConfig = memberlistConfig
 - m, err := serf.Create(serfConfig)
 - if err != nil {
 - return err
 - }
 - if nodeAddress != knownNodes[0] {
 - _, err := m.Join(knownNodes, false)
 - if err != nil {
 - return err
 - }
 - }
 - broadcasts = &memberlist.TransmitLimitedQueue{
 - NumNodes: func() int {
 - return m.NumNodes()
 - },
 - RetransmitMult: 1,
 - }
 - node := m.LocalMember()
 - fmt.Printf("Local member %s:%d\n", node.Addr, node.Port)
 - return nil
 - }
 - func main() {
 - var err error
 - var wg sync.WaitGroup
 - nodeAddress = fmt.Sprintf("%s:%s", baseAddress, NODE_ID)
 - wg.Add(1)
 - go func() {
 - err = configServer()
 - if err != nil {
 - log.Panic(err)
 - }
 - wg.Done()
 - }()
 - wg.Wait()
 - }
 
Advertisement
 
                    Add Comment                
                
                        Please, Sign In to add comment