diff --git a/src/cmd/inquirer.go b/src/cmd/inquirer.go
index a99f40928..00a01d0ad 100644
--- a/src/cmd/inquirer.go
+++ b/src/cmd/inquirer.go
@@ -6,52 +6,30 @@ import (
"net/http"
"net/rpc"
"time"
+ "registration"
)
-type RaterList struct {
- clients map[string]*rpc.Client
-}
-
-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.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
-}
-
-func (rl *RaterList) UnRegisterRater(clientAddress string, replay *byte) error {
- client := rl.clients[clientAddress]
- client.Close()
- delete(rl.clients, clientAddress)
- log.Print(fmt.Sprintf("Server %v unregistered succesfully", clientAddress))
- return nil
-}
+var raterList *registration.RaterList
func handler(w http.ResponseWriter, r *http.Request) {
fmt.Fprint(w, "
")
- for addr, _ := range raterList.clients {
+ for addr, _ := range raterList.Clients {
fmt.Fprint(w, fmt.Sprintf("- %s
", addr))
}
fmt.Fprint(w, "
")
}
-func callRater(rl *RaterList) {
+func callRater(rl *registration.RaterList) {
var reply float64
arg := 9.0
log.Print("Starting client polling.")
for {
- for addr, client := range rl.clients {
+ for addr, client := range rl.Clients {
err := client.Call("Sumer.Square", arg, &reply)
if err != nil {
log.Print("Closing client!")
- delete(rl.clients, addr)
+ delete(rl.Clients, addr)
}
fmt.Println(fmt.Sprintf("Result from rater(%v): %v", addr, reply))
}
@@ -60,7 +38,7 @@ func callRater(rl *RaterList) {
}
func main() {
- raterList = &RaterList{clients: make(map[string]*rpc.Client)}
+ raterList = ®istration.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 4fa43f736..68bbfa723 100644
--- a/src/cmd/rater.go
+++ b/src/cmd/rater.go
@@ -6,9 +6,7 @@ import (
"math"
"net"
"net/rpc"
- "os"
- "os/signal"
- "syscall"
+ "registration"
)
var (
@@ -23,51 +21,13 @@ func (t *Sumer) Square(n float64, reply *float64) error {
return nil
}
-func stopSingnalHandler() {
- sig := <-signal.Incoming
- if usig, ok := sig.(os.UnixSignal); ok {
- switch usig {
- case syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT:
- log.Printf("Caught signal %v, unregistering from server\n", usig)
- unregisterFromServer()
- os.Exit(1)
- }
- }
-}
-
-func unregisterFromServer() {
- client, err := rpc.DialHTTP("tcp", *server)
- if err != nil {
- log.Panic("Cannot register to server!")
- }
- var reply byte
- log.Print("Unregistering from server ", *server)
- client.Call("RaterList.UnRegisterRater", *listen, &reply)
- if err := client.Close(); err != nil {
- log.Panic("Could not close server unregistration!")
- }
-}
-
-func registerToServer() {
- client, err := rpc.DialHTTP("tcp", *server)
- if err != nil {
- log.Panic("Cannot register to server!")
- }
- var reply byte
- log.Print("Registering to server ", *server)
- client.Call("RaterList.RegisterRater", *listen, &reply)
- if err := client.Close(); err != nil {
- log.Panic("Could not close server registration!")
- }
-}
-
func main() {
flag.Parse()
arith := new(Sumer)
rpc.Register(arith)
rpc.HandleHTTP()
- go registerToServer()
- go stopSingnalHandler()
+ go registration.RegisterToServer(server, listen)
+ go registration.StopSingnalHandler(server, listen)
addr, err1 := net.ResolveTCPAddr("tcp", *listen)
l, err2 := net.ListenTCP("tcp", addr)
if err1 != nil || err2 != nil {
diff --git a/src/pkg/registration/inquirerregistration.go b/src/pkg/registration/inquirerregistration.go
new file mode 100644
index 000000000..03202e685
--- /dev/null
+++ b/src/pkg/registration/inquirerregistration.go
@@ -0,0 +1,31 @@
+package registration
+
+import (
+ "fmt"
+ "log"
+ "net/rpc"
+ "time"
+)
+
+type RaterList struct {
+ Clients map[string]*rpc.Client
+}
+
+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.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
+}
+
+func (rl *RaterList) UnRegisterRater(clientAddress string, replay *byte) error {
+ client := rl.Clients[clientAddress]
+ client.Close()
+ delete(rl.Clients, clientAddress)
+ log.Print(fmt.Sprintf("Server %v unregistered succesfully", clientAddress))
+ return nil
+}
\ No newline at end of file
diff --git a/src/pkg/registration/raterregistration.go b/src/pkg/registration/raterregistration.go
new file mode 100644
index 000000000..1ff12afa7
--- /dev/null
+++ b/src/pkg/registration/raterregistration.go
@@ -0,0 +1,47 @@
+package registration
+
+import (
+ "log"
+ "net/rpc"
+ "os"
+ "os/signal"
+ "syscall"
+)
+
+func StopSingnalHandler(server, listen *string) {
+ sig := <-signal.Incoming
+ if usig, ok := sig.(os.UnixSignal); ok {
+ switch usig {
+ case syscall.SIGTERM, syscall.SIGINT, syscall.SIGQUIT:
+ log.Printf("Caught signal %v, unregistering from server\n", usig)
+ unregisterFromServer(server, listen)
+ os.Exit(1)
+ }
+ }
+}
+
+func unregisterFromServer(server, listen *string) {
+ client, err := rpc.DialHTTP("tcp", *server)
+ if err != nil {
+ log.Panic("Cannot register to server!")
+ }
+ var reply byte
+ log.Print("Unregistering from server ", *server)
+ client.Call("RaterList.UnRegisterRater", *listen, &reply)
+ if err := client.Close(); err != nil {
+ log.Panic("Could not close server unregistration!")
+ }
+}
+
+func RegisterToServer(server, listen *string) {
+ client, err := rpc.DialHTTP("tcp", *server)
+ if err != nil {
+ log.Panic("Cannot register to server!")
+ }
+ var reply byte
+ log.Print("Registering to server ", *server)
+ client.Call("RaterList.RegisterRater", *listen, &reply)
+ if err := client.Close(); err != nil {
+ log.Panic("Could not close server registration!")
+ }
+}
\ No newline at end of file