package models import ( "errors" "fmt" "github.com/grandcat/zeroconf" "net" ) // Online 在线数据 type Online struct { AddrIPv4 []net.IP `json:"-"` // Host machine IPv4 address AddrIPv6 []net.IP `json:"-"` Port int `json:"port"` ID string `json:"id"` Ip string `json:"ip"` } func (o *Online) Url(router string) string { return fmt.Sprintf("http://%s:%d%s", o.Ip, o.Port, router) } func UserTOnlineList(user *Users) []string { return []string{ user.ID, user.Ip, } } func NewOnline(entry *zeroconf.ServiceEntry) (*Online, error) { if len(entry.Text) != 2 { return nil, errors.New("invalid online entry") } return &Online{ AddrIPv4: entry.AddrIPv4, AddrIPv6: entry.AddrIPv6, Port: entry.Port, ID: entry.Text[0], Ip: entry.Text[1], }, nil }