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