package goxy import ( "log" "net/rpc" ) type GoXY struct { Server *Server } func Register(s *Server) { rpc.Register(&GoXY{s}) rpc.HandleHTTP() } // Add adds a new route (server) func (s *GoXY) Add(e Entry, _ *struct{}) error { log.Println("Add route", e) defer s.Server.Save() s.Server.Route[e.ServerName] = e return s.Server.Restore() } // Add new entry (client) func Add(e Entry, server string) error { client, err := rpc.DialHTTP("tcp", server) if err != nil { return err } defer client.Close() return client.Call("GoXY.Add", e, nil) } // Del removes a route (server) func (s *GoXY) Del(serverName string, _ *struct{}) error { log.Println("Del route", serverName) defer s.Server.Save() delete(s.Server.Route, serverName) return s.Server.Restore() } // Del removes a route (client) func Del(serverName string, server string) error { client, err := rpc.DialHTTP("tcp", server) if err != nil { return err } defer client.Close() return client.Call("GoXY.Del", serverName, nil) } // List routes func (s GoXY) List(_ struct{}, r *Route) error { *r = s.Server.Route return nil } func List(server string) (Route, error) { client, err := rpc.DialHTTP("tcp", server) if err != nil { return nil, err } defer client.Close() var r Route if err := client.Call("GoXY.List", struct{}{}, &r); err != nil { return nil, err } return r, nil }