Introduce JSON-RPC service

This commit is contained in:
Derek Parker
2015-06-20 22:47:44 -05:00
parent 5642e0a106
commit 687dc4172d
12 changed files with 574 additions and 45 deletions

View File

@ -12,7 +12,9 @@ import (
sys "golang.org/x/sys/unix"
"github.com/derekparker/delve/service"
"github.com/derekparker/delve/service/rest"
"github.com/derekparker/delve/service/rpc"
"github.com/derekparker/delve/terminal"
)
@ -38,11 +40,13 @@ func main() {
var addr string
var logEnabled bool
var headless bool
var http bool
flag.BoolVar(&printv, "version", false, "Print version number and exit.")
flag.StringVar(&addr, "addr", "localhost:0", "Debugging server listen address.")
flag.BoolVar(&logEnabled, "log", false, "Enable debugging server logging.")
flag.BoolVar(&headless, "headless", false, "Run in headless mode.")
flag.BoolVar(&http, "http", false, "Start HTTP server instead of RPC.")
flag.Parse()
if flag.NFlag() == 0 && len(flag.Args()) == 0 {
@ -60,12 +64,12 @@ func main() {
os.Exit(0)
}
status := run(addr, logEnabled, headless)
status := run(addr, logEnabled, headless, http)
fmt.Println("[Hope I was of service hunting your bug!]")
os.Exit(status)
}
func run(addr string, logEnabled, headless bool) int {
func run(addr string, logEnabled, headless, http bool) int {
// Collect launch arguments
var processArgs []string
var attachPid int
@ -121,18 +125,32 @@ func run(addr string, logEnabled, headless bool) int {
return 1
}
// Create and start a REST debugger server
server := rest.NewServer(&rest.Config{
Listener: listener,
ProcessArgs: processArgs,
AttachPid: attachPid,
}, logEnabled)
// Create and start a debugger server
var server service.Server
if http {
server = rest.NewServer(&service.Config{
Listener: listener,
ProcessArgs: processArgs,
AttachPid: attachPid,
}, logEnabled)
} else {
server = rpc.NewServer(&service.Config{
Listener: listener,
ProcessArgs: processArgs,
AttachPid: attachPid,
}, logEnabled)
}
go server.Run()
var status int
if !headless {
// Create and start a terminal
client := rest.NewClient(listener.Addr().String())
var client service.Client
if http {
client = rest.NewClient(listener.Addr().String())
} else {
client = rpc.NewClient(listener.Addr().String())
}
term := terminal.New(client)
err, status = term.Run()
} else {