diff --git a/rdpClient.go b/client/rdpClient.go similarity index 98% rename from rdpClient.go rename to client/rdpClient.go index ff58aea..7ea3d67 100644 --- a/rdpClient.go +++ b/client/rdpClient.go @@ -1,4 +1,4 @@ -package main +package client import ( "ShotRDP/common" @@ -181,7 +181,7 @@ func (client *RdpClient) setEventHandler() { 去除requestedProtocol中的PROTOCOL_HYBRID,避免使用NLA */ -func getScreen(host string) ([]byte, error) { +func RealGetScreen(host string) ([]byte, error) { client := Newclient(host, glog.INFO) return client.Login("", "", "") } diff --git a/rdpClient_test.go b/client/rdpClient_test.go similarity index 95% rename from rdpClient_test.go rename to client/rdpClient_test.go index e18f237..dba74a6 100644 --- a/rdpClient_test.go +++ b/client/rdpClient_test.go @@ -1,4 +1,4 @@ -package main +package client import ( "testing" diff --git a/mainDLL.go b/mainDLL.go new file mode 100644 index 0000000..981c95f --- /dev/null +++ b/mainDLL.go @@ -0,0 +1,29 @@ +package main + +/* +#include +*/ +import "C" +import ( + "ShotRDP/client" + "unsafe" +) + +//export GetScreen +func GetScreen(host *C.char, data **C.char, length *C.int) *C.char { + imgBytes, err := client.RealGetScreen(C.GoString(host)) + if err != nil { + return C.CString(err.Error()) + } + + *data = (*C.char)(C.CBytes(imgBytes)) + *length = C.int(len(imgBytes)) + return nil +} + +//export Free +func Free(p *C.char) { + C.free(unsafe.Pointer(p)) +} + +func main() {} diff --git a/main.go b/mainRPC.go similarity index 87% rename from main.go rename to mainRPC.go index a9066ed..f912ded 100644 --- a/main.go +++ b/mainRPC.go @@ -1,6 +1,7 @@ package main import ( + "ShotRDP/client" "context" "google.golang.org/grpc" "net" @@ -13,7 +14,7 @@ type Server struct { } func (server *Server) GetScreen(ctx context.Context, in *pb.Request) (*pb.Response, error) { - imgBytes, err := getScreen(in.GetHost()) + imgBytes, err := client.RealGetScreen(in.GetHost()) return &pb.Response{ImageBytes: imgBytes}, err }