//RPC服务端
import golang;
var go = golang();//创建Go编译器

/*
go 官方提供的编译器可能会被杀毒软件误报病毒阻止运行或自动删除，
如果 go编译器无法正常运行，请尝试删除~\lib\golang\.res 下的文件，
然后重新安装 go 编译器试试，golang 扩展库支持系统已安装的 go 编译器。
*/

//Go源码与字符串都是UTF-8编码，跟aardio一样很方便
string.save("/gotest.go",`
package main

import (
    "fmt"
    "log"
    "net"
    "net/rpc"
    "net/rpc/jsonrpc"
)

type Args struct {
    X, Y int
}

var listener net.Listener

type Calculator struct{}

func (t *Calculator) Add(args *Args, reply *int) error {
    *reply = args.X + args.Y
    return nil
}

func (t *Calculator) Exit(args *int, reply *int) error {
    listener.Close()
    return nil
}

func main() {
    cal := new(Calculator)
    server := rpc.NewServer()
    server.Register(cal)

    listener, e := net.Listen("tcp", "localhost:0")
    if e != nil {
        fmt.Printf("error:%s\n", e)
        return
    } else {
        fmt.Printf("%s\n", listener.Addr().String())
    }

    for {
        if conn, err := listener.Accept(); err != nil {
            log.Fatal("error: " + err.Error())
        } else {
            go server.ServeCodec(jsonrpc.NewServerCodec(conn))
        }
    }
}`)

//编译Go源码生成EXE文件
go.build("/gotest.go");

console.pause();
   