package node import ( "lux/proto" ipnet "net" ) type LuxNodeSync struct { Synced map[proto.LuxID]struct{} Neighbors map[proto.LuxID]*ipnet.UDPAddr SyncState LuxNodeState } func NewLuxNodeSync() LuxNodeSync { return LuxNodeSync{ Synced: make(map[proto.LuxID]struct{}), Neighbors: make(map[proto.LuxID]*ipnet.UDPAddr), SyncState: LuxNodeState{}, } } func (sync *LuxNodeSync) Read(rd *proto.LuxBuffer) error { // read synced list syncNum, err := rd.ReadUint16() if err != nil { return err } for i := 0; i < int(syncNum); i++ { id := proto.LuxID{} if err := id.Read(rd); err != nil { return err } sync.Synced[id] = struct{}{} } // read neighbors neighborNum, err := rd.ReadUint16() if err != nil { return err } for i := 0; i < int(neighborNum); i++ { id := proto.LuxID{} if err := id.Read(rd); err != nil { return err } addrPort, err := rd.ReadIPPort() if err != nil { return err } sync.Neighbors[id] = ipnet.UDPAddrFromAddrPort(addrPort) } // read sync state err = sync.SyncState.Read(rd) if err != nil { return err } return nil }