mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-05-24 20:47:11 +00:00
54 lines
929 B
Go
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)
|
|
}
|
|
}
|