Skip to content

Commit f3f37b5

Browse files
committed
0.2.8 fix; added SCORCO capability
1 parent 7cb3476 commit f3f37b5

File tree

18 files changed

+842
-42
lines changed

18 files changed

+842
-42
lines changed

.idea/modules.xml

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,7 @@ Once you have installed your requirements, building your protobufs are easy. For
108108
bash CLI command will develop your Go files.
109109
110110
```bash
111-
protoc
111+
protoc \
112112
--go_out=../some_go_project/proto \
113113
--go-grpc_out=./some_go_project/proto \
114114
--go_opt=paths=source_relative \

proto/nwscript/nwnx.proto

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
syntax = 'proto3';
22

3-
import "include/types.proto";
3+
import "nwscript/types.proto";
44

5-
option go_package = "src/proto/include";
5+
option go_package = "src/proto/nwscript";
66

77
package NWNX4.RPC.Proto.NWScript;
88

proto/nwscript/types.proto

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
syntax = 'proto3';
22

3-
option go_package = "src/proto/include";
3+
option go_package = "src/proto/nwscript";
44

55
package NWNX4.RPC.Proto.NWScript;
66

proto/scorco.proto

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
syntax = 'proto3';
2+
3+
option go_package = "src/proto";
4+
5+
package NWNX4.RPC.Proto.SCORCO;
6+
7+
service SCORCOService {
8+
rpc SCORCOGetGFFSize(SCORCOGetGFFSizeRequest) returns (SCORCOGetGFFSizeResponse);
9+
rpc SCORCOGetGFF(SCORCOGetGFFRequest) returns (SCORCOGetGFFResponse);
10+
rpc SCORCOSetGFF(SCORCOSetGFFRequest) returns (SCORCOSetGFFResponse);
11+
}
12+
13+
message SCORCOGetGFFSizeRequest {
14+
string sVarName = 1;
15+
}
16+
17+
message SCORCOGetGFFSizeResponse {
18+
uint32 size = 1;
19+
}
20+
21+
message SCORCOGetGFFRequest {
22+
string sVarName = 1;
23+
}
24+
25+
message SCORCOGetGFFResponse {
26+
bytes gffData = 1;
27+
}
28+
29+
message SCORCOSetGFFRequest {
30+
string sVarName = 1;
31+
bytes gffData = 2;
32+
}
33+
34+
message SCORCOSetGFFResponse {}

src/go.mod

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@ replace nwnx4.org/src/proto/nwscript => ./proto/nwscript
88

99
require (
1010
github.com/sirupsen/logrus v1.8.1
11-
google.golang.org/grpc v1.44.0
12-
google.golang.org/protobuf v1.27.1
11+
google.golang.org/grpc v1.48.0
12+
google.golang.org/protobuf v1.28.0
1313
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b
1414
nwnx4.org/src/proto v0.0.0-00010101000000-000000000000
1515
nwnx4.org/src/proto/nwscript v0.0.0-00010101000000-000000000000
1616
)
1717

1818
require (
1919
github.com/golang/protobuf v1.5.2 // indirect
20-
golang.org/x/net v0.0.0-20200822124328-c89045814202 // indirect
21-
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd // indirect
22-
golang.org/x/text v0.3.0 // indirect
20+
golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect
21+
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 // indirect
22+
golang.org/x/text v0.3.3 // indirect
2323
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect
2424
)

src/go.sum

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnht
1010
github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI=
1111
github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
1212
github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
13+
github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
1314
github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs=
1415
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
1516
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
@@ -19,6 +20,7 @@ github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.m
1920
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
2021
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
2122
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
23+
github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE=
2224
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
2325
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
2426
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
@@ -44,6 +46,8 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
4446
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
4547
github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
4648
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
49+
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
50+
github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
4751
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
4852
github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw=
4953
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -72,6 +76,8 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
7276
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
7377
golang.org/x/net v0.0.0-20200822124328-c89045814202 h1:VvcQYSHwXgi7W+TpUR6A9g6Up98WAHf3f/ulnJ62IyA=
7478
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
79+
golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
80+
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
7581
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
7682
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
7783
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
@@ -84,8 +90,14 @@ golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7w
8490
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
8591
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd h1:xhmwyvizuTgC2qz7ZlMluP20uW+C3Rm0FD/WLDX8884=
8692
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
93+
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
94+
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
95+
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
8796
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
8897
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
98+
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
99+
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
100+
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
89101
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
90102
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
91103
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
@@ -108,6 +120,8 @@ google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTp
108120
google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
109121
google.golang.org/grpc v1.44.0 h1:weqSxi/TMs1SqFRMHCtBgXRs8k3X39QIDEZ0pRcttUg=
110122
google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU=
123+
google.golang.org/grpc v1.48.0 h1:rQOsyJ/8+ufEDJd/Gdsz7HG220Mh9HAhFHRGnIjda0w=
124+
google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk=
111125
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
112126
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
113127
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
@@ -121,6 +135,8 @@ google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp0
121135
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
122136
google.golang.org/protobuf v1.27.1 h1:SnqbnDw1V7RiZcXPx5MEeqPv2s79L9i7BJUlG/+RurQ=
123137
google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
138+
google.golang.org/protobuf v1.28.0 h1:w43yiav+6bVFTBQFZX0r7ipe9JQ1QsbMgHwbBziscLw=
139+
google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
124140
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
125141
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
126142
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=

src/main.go

Lines changed: 94 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,15 @@ import (
3131
"path"
3232
"reflect"
3333
"time"
34+
"unsafe"
3435

3536
// Protobuf
3637
pbCore "nwnx4.org/src/proto"
3738
pbNWScript "nwnx4.org/src/proto/nwscript"
3839
)
3940

4041
const pluginName string = "NWNX RPC Plugin" // Plugin name passed to hook
41-
const pluginVersion string = "0.2.7" // Plugin version passed to hook
42+
const pluginVersion string = "0.2.8" // Plugin version passed to hook
4243
const pluginID string = "RPC" // Plugin ID used for identification in the list
4344

4445
// YAML configuration for src
@@ -55,13 +56,15 @@ type ServerConfig struct {
5556

5657
// YAML server services configuration for src
5758
type ServerServicesConfig struct {
58-
Logger bool
59+
Logger bool
60+
ScorcoClientName string
5961
}
6062

6163
// Core plugin class; singleton per DLL
6264
type rpcPlugin struct {
63-
rpcServer *rpcServer
64-
rpcClients map[string]rpcClient
65+
rpcServer *rpcServer
66+
rpcClients map[string]rpcClient
67+
scorcoClientName string
6568
}
6669

6770
// initRpcServer initializes the RPC server
@@ -118,6 +121,7 @@ func (p *rpcPlugin) addRpcClient(name, url string) {
118121
name: name,
119122
url: url,
120123
nwnxServiceClient: pbNWScript.NewNWNXServiceClient(conn),
124+
scorcoServiceClient: pbCore.NewSCORCOServiceClient(conn),
121125
messageServiceClient: pbCore.NewMessageServiceClient(conn),
122126
}
123127

@@ -294,6 +298,72 @@ func (p *rpcPlugin) setString(sFunction, sParam1 *C.char, nParam2 C.int, sValue
294298
}
295299
}
296300

301+
func (p *rpcPlugin) getGffSize(sVarName *C.char) C.size_t {
302+
sVarName_ := C.GoString(sVarName)
303+
client, ok := p.getRpcClient(p.scorcoClientName)
304+
if !ok {
305+
return 0
306+
}
307+
308+
ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
309+
defer cancel()
310+
request := pbCore.SCORCOGetGFFSizeRequest{
311+
SVarName: sVarName_,
312+
}
313+
response, err := client.scorcoServiceClient.SCORCOGetGFFSize(ctx, &request)
314+
if err != nil {
315+
log.Error(fmt.Sprintf("Call to GetGFFSize returned error: %s; %s",
316+
err, request.SVarName))
317+
318+
return 0
319+
}
320+
321+
return C.size_t(response.Size)
322+
}
323+
324+
func (p *rpcPlugin) getGff(sVarName *C.char, result *C.uint8_t, resultSize C.size_t) {
325+
sVarName_ := C.GoString(sVarName)
326+
client, ok := p.getRpcClient(p.scorcoClientName)
327+
if !ok {
328+
return
329+
}
330+
331+
ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
332+
defer cancel()
333+
request := pbCore.SCORCOGetGFFRequest{
334+
SVarName: sVarName_,
335+
}
336+
response, err := client.scorcoServiceClient.SCORCOGetGFF(ctx, &request)
337+
if err != nil {
338+
log.Error(fmt.Sprintf("Call to GetGFF returned error: %s; %s",
339+
err, request.SVarName))
340+
341+
return
342+
}
343+
344+
C.memcpy(unsafe.Pointer(result), unsafe.Pointer(&response.GffData[0]), resultSize)
345+
}
346+
347+
func (p *rpcPlugin) setGff(sVarName *C.char, gffData *C.uint8_t, _ C.size_t) {
348+
sVarName_ := C.GoString(sVarName)
349+
gffData_ := *(*[]byte)(unsafe.Pointer(gffData))
350+
client, ok := p.getRpcClient(p.scorcoClientName)
351+
if !ok {
352+
return
353+
}
354+
355+
ctx, cancel := context.WithTimeout(context.Background(), time.Second*30)
356+
defer cancel()
357+
var request = pbCore.SCORCOSetGFFRequest{
358+
SVarName: sVarName_,
359+
GffData: gffData_,
360+
}
361+
if _, err := client.scorcoServiceClient.SCORCOSetGFF(ctx, &request); err != nil {
362+
log.Error(fmt.Sprintf("Call to SetGFF returned error: %s; %s",
363+
err, request.SVarName))
364+
}
365+
}
366+
297367
// rpcServer contains the interfaces to the RPC server
298368
type rpcServer struct {
299369
pbCore.UnimplementedLogServiceServer
@@ -346,14 +416,16 @@ type rpcClient struct {
346416
name string
347417
url string
348418
nwnxServiceClient pbNWScript.NWNXServiceClient
419+
scorcoServiceClient pbCore.SCORCOServiceClient
349420
messageServiceClient pbCore.MessageServiceClient
350421
}
351422

352423
// newRpcPlugin builds and returns a new RPC plugin
353424
func newRpcPlugin() *rpcPlugin {
354425
return &rpcPlugin{
355-
rpcServer: nil,
356-
rpcClients: make(map[string]rpcClient),
426+
rpcServer: nil,
427+
rpcClients: make(map[string]rpcClient),
428+
scorcoClientName: "",
357429
}
358430
}
359431

@@ -417,6 +489,7 @@ func NWNXCPlugin_New(initInfo C.CPluginInitInfo) C.uint32_t {
417489

418490
// Initialize the server
419491
plugin.initRpcServer(config.Server)
492+
plugin.scorcoClientName = config.Server.Services.ScorcoClientName
420493

421494
// Build out the clients
422495
for name, url := range config.Clients {
@@ -464,4 +537,19 @@ func NWNXCPlugin_SetString(_ *C.void, sFunction, sParam1 *C.char, nParam2 C.int,
464537
plugin.setString(sFunction, sParam1, nParam2, sValue)
465538
}
466539

540+
//export NWNXCPlugin_GetGFFSize
541+
func NWNXCPlugin_GetGFFSize(_ *C.void, sVarName *C.char) C.size_t {
542+
return plugin.getGffSize(sVarName)
543+
}
544+
545+
//export NWNXCPlugin_GetGFF
546+
func NWNXCPlugin_GetGFF(_ *C.void, sVarName *C.char, result *C.uint8_t, resultSize C.size_t) {
547+
plugin.getGff(sVarName, result, resultSize)
548+
}
549+
550+
//export NWNXCPlugin_SetGFF
551+
func NWNXCPlugin_SetGFF(_ *C.void, sVarName *C.char, gffData *C.uint8_t, gffDataSize C.size_t) {
552+
plugin.setGff(sVarName, gffData, gffDataSize)
553+
}
554+
467555
func main() {}

src/proto/log.pb.go

Lines changed: 4 additions & 4 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)