From 745ee3f272e63c959e91cfce778d8b948d508217 Mon Sep 17 00:00:00 2001 From: Radu Ioan Fericean Date: Tue, 24 Jan 2012 17:22:04 +0200 Subject: [PATCH] tcp listener --- .gitignore | 3 ++- src/cmd/inquirer.go | 16 ++++++++-------- src/cmd/rater.go | 25 +++++++++++++++---------- 3 files changed, 25 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index ff1d75af0..6933f7e3b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ *.a *.6 -bin/* \ No newline at end of file +bin +.settings diff --git a/src/cmd/inquirer.go b/src/cmd/inquirer.go index d4a234e83..9515172bf 100644 --- a/src/cmd/inquirer.go +++ b/src/cmd/inquirer.go @@ -3,8 +3,8 @@ package main import ( "fmt" "log" - "net/rpc" "net/http" + "net/rpc" "time" ) @@ -16,10 +16,10 @@ var raterList *RaterList func (rl *RaterList) RegisterRater(clientAddress string, replay *byte) error { time.Sleep(1 * time.Second) // wait a second for Rater to start serving - client, err := rpc.DialHTTP("tcp", clientAddress) + client, err := rpc.Dial("tcp", clientAddress) if err != nil { log.Panic("Could not connect to client!") - } + } rl.clients[clientAddress] = client log.Print(fmt.Sprintf("Server %v registered succesfully", clientAddress)) return nil @@ -33,26 +33,26 @@ func handler(w http.ResponseWriter, r *http.Request) { fmt.Fprint(w, "") } -func callRater(rl *RaterList){ +func callRater(rl *RaterList) { var reply float64 arg := 9.0 log.Print("Starting client polling.") - for{ - for addr,client := range rl.clients { + for { + for addr, client := range rl.clients { err := client.Call("Sumer.Square", arg, &reply) if err != nil { log.Print("Closing client!") delete(rl.clients, addr) } - fmt.Println(fmt.Sprintf("Result from rater(%v): %v", addr, reply)) + fmt.Println(fmt.Sprintf("Result from rater(%v): %v", addr, reply)) } time.Sleep(5 * time.Second) } } func main() { - raterList = &RaterList{clients: make(map[string] *rpc.Client)} + raterList = &RaterList{clients: make(map[string]*rpc.Client)} go callRater(raterList) rpc.Register(raterList) rpc.HandleHTTP() diff --git a/src/cmd/rater.go b/src/cmd/rater.go index fbae1a67d..98db19486 100644 --- a/src/cmd/rater.go +++ b/src/cmd/rater.go @@ -1,11 +1,11 @@ package main import ( - "net/rpc" - "net/http" - "math" - "log" "flag" + "log" + "math" + "net" + "net/rpc" ) var ( @@ -20,14 +20,14 @@ func (t *Sumer) Square(n float64, reply *float64) error { return nil } -func registerToServer(){ - client,err := rpc.DialHTTP("tcp", *server) +func registerToServer() { + client, err := rpc.DialHTTP("tcp", *server) if err != nil { log.Panic("Cannot register to server!") } - var reply byte + var reply byte log.Print("Registering to server ", *server) - client.Call("RaterList.RegisterRater", *listen, &reply) + client.Call("RaterList.RegisterRater", *listen, &reply) if err := client.Close(); err != nil { log.Panic("Could not close server registration!") } @@ -39,5 +39,10 @@ func main() { rpc.Register(arith) rpc.HandleHTTP() go registerToServer() - http.ListenAndServe(*listen, nil) -} \ No newline at end of file + addr, err1 := net.ResolveTCPAddr("tcp", *listen) + l, err2 := net.ListenTCP("tcp", addr) + if err1 != nil || err2 != nil { + log.Panic("cannot create listener for specified address ", *listen) + } + rpc.Accept(l) +}