2013-09-04 22:02:17 -04:00
|
|
|
/*
|
|
|
|
Copyright (C) 2013 Aaron Lindsay <aaron@aclindsay.com>
|
|
|
|
*/
|
|
|
|
|
2013-09-03 23:33:36 -04:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"asink"
|
|
|
|
"net"
|
|
|
|
"net/http"
|
|
|
|
"net/rpc"
|
|
|
|
)
|
|
|
|
|
|
|
|
type ClientStopper int
|
|
|
|
|
|
|
|
func (c *ClientStopper) StopClient(code *int, result *int) error {
|
|
|
|
asink.Exit(*code)
|
|
|
|
*result = 0
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func StartRPC(sock string, tornDown chan int) {
|
|
|
|
defer func() { tornDown <- 0 }() //the main thread waits for this to ensure the socket is closed
|
|
|
|
|
|
|
|
clientstop := new(ClientStopper)
|
|
|
|
rpc.Register(clientstop)
|
|
|
|
|
|
|
|
rpc.HandleHTTP()
|
|
|
|
l, err := net.Listen("unix", sock)
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
defer l.Close()
|
|
|
|
|
|
|
|
go http.Serve(l, nil)
|
|
|
|
|
|
|
|
asink.WaitOnExit()
|
|
|
|
}
|