1
0
mirror of https://github.com/chai2010/advanced-go-programming-book.git synced 2025-05-24 04:22:22 +00:00
2018-12-16 12:40:54 +08:00

54 lines
929 B
Go

package main
import (
"fmt"
"log"
"net"
"net/rpc"
)
type HelloService struct {
conn net.Conn
isLogin bool
}
func ServeHelloService(conn net.Conn) {
p := rpc.NewServer()
p.Register(&HelloService{conn: conn})
p.ServeConn(conn)
}
func (p *HelloService) Login(request string, reply *string) error {
if request != "user:password" {
log.Println("login failed")
return fmt.Errorf("auth failed")
}
log.Println("login ok")
p.isLogin = true
return nil
}
func (p *HelloService) Hello(request string, reply *string) error {
if !p.isLogin {
return fmt.Errorf("please login")
}
*reply = "hello:" + request + ", from" + p.conn.RemoteAddr().String()
return nil
}
func main() {
listener, err := net.Listen("tcp", ":1234")
if err != nil {
log.Fatal("ListenTCP error:", err)
}
for {
conn, err := listener.Accept()
if err != nil {
log.Fatal("Accept error:", err)
}
go ServeHelloService(conn)
}
}