Compare commits

...

30 Commits
v0.0.1 ... main

Author SHA1 Message Date
30d0a3635f Add field for payload s3uri 2023-03-28 14:31:51 +03:00
63c05aa559 Add size payload 2023-03-28 12:30:51 +03:00
38a49adeb4 Add field for transit uri for file 2023-03-24 11:54:01 +03:00
7e92ff7764 Update packages 2023-03-23 14:11:25 +03:00
02a4e4a575 Add logging 2022-12-01 15:23:42 +03:00
d8a2f84bca Prepare callID for logger 2022-11-30 14:24:24 +03:00
94b18fa997 Add CallStream wothout wait result 2022-11-28 10:13:52 +03:00
6d195ebbc2 Fix response packages 2022-11-23 12:09:34 +03:00
fe0d11add6 Fix nullpointer in Metadata 2022-11-23 10:44:09 +03:00
d125ab3431 Fix null pointer exception 2022-11-23 09:48:42 +03:00
5fe5aed0ab Set default timeout 30 seconds 2022-11-22 14:21:25 +03:00
9035160757 Merge branch 'main' of https://git.ymnuktech.ru/ymnuk/yt-function-sdk-go 2022-11-22 09:19:42 +03:00
9850bc32ce Replace some "panic" 2022-11-22 09:19:07 +03:00
ymnuk
e75e2b3037 Remove thread from call worker 2022-11-21 21:07:03 +03:00
ymnuk
879e2f87c1 Replace env for connection to NATS 2022-11-11 19:07:23 +03:00
ymnuk
b8383192ae Add control timeout call function 2022-11-05 12:41:03 +03:00
ymnuk
724bef43b7 Fix sync Call function 2022-11-04 17:15:34 +03:00
ymnuk
c2db3ee905 Fix response header 2022-11-04 17:10:59 +03:00
ymnuk
41967c4d0a Fix response header 2022-11-04 16:36:03 +03:00
ymnuk
972f79da01 Remove fmt.Println for debug 2022-11-04 14:53:23 +03:00
ymnuk
c06201b8eb Change "ChanSubscribe" to "ChanQueueSubscribe" 2022-11-03 19:52:23 +03:00
ymnuk
1dc19f9e72 Fix channel in function worker 2022-10-28 21:22:30 +03:00
ymnuk
8e2cba9d09 Fix sync Call 2022-10-28 20:51:04 +03:00
787c341044 Update packages 2022-10-28 15:07:43 +03:00
09f0e56d49 Fix pointer struct for channels 2022-10-28 15:06:24 +03:00
0d0c731cca Change res to pointer 2022-10-28 15:01:05 +03:00
901b373e3c Fix mutex 2022-10-28 14:59:43 +03:00
a43583865d Fix response 2022-10-28 13:46:43 +03:00
5d23b322ec Add mutex for sync 2022-10-28 11:19:03 +03:00
912062d11b Add field in header 2022-10-27 15:19:47 +03:00
12 changed files with 580 additions and 255 deletions

View File

@ -24,3 +24,51 @@ go install google.golang.org/protobuf/cmd/protoc-gen-go@latest
```
protoc --go_out=. ./protobuf/*
```
# Исользование
Пример использования:
```golang
package main
import (
"git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git/network"
funcSDK "git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git/network"
)
func main(){
addr, exists := os.LookupEnv("NATS_ADDR")
if !exists {
addr = "nats://localhost:4222"
}
serve = funcSDK.NewServe(addr, "", "test", nil)
if serve == nil {
panic(fmt.Errorf(`serve is not created`))
}
serve.AddAccept("*")
err := serve.Run()
if err != nil {
panic(err)
}
var err error
err = serve.RegisterFunction("testFuncSimple", func(header *network.Header, paylod []byte) (result []byte, err error) {
header.ResponseHeaders["test"] = "my test"
return []byte("world"), nil
})
if err != nil {
t.Error("Has error: ", err)
return
}
var result []byte
var header *network.Header
result, header, err = serve.Call("default.test.testFuncSimple", nil, []byte("Hello"))
if err!=nil{
panic(err)
}
fmt.Println(header)
fmt.Println(string(result))
}
```

View File

@ -1,13 +1,13 @@
version: "3.9"
services:
nats:
image: nats:2.9.3-scratch
image: nats:2.9.8-scratch
ports:
- "4222:4222"
- "8222:8222"
#command: "--http_port 8222 "
networks: ["nats"]
networks: [ "nats" ]
networks:
nats:
name: nats
name: nats

19
go.mod
View File

@ -1,12 +1,17 @@
module git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git
module git.ymnuktech.ru/ymnuk/yt-function-sdk-go
go 1.19
require (
github.com/nats-io/nats.go v1.18.0 // indirect
github.com/nats-io/nkeys v0.3.0 // indirect
github.com/nats-io/nuid v1.0.1 // indirect
github.com/satori/go.uuid v1.2.0 // indirect
golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b // indirect
google.golang.org/protobuf v1.28.1 // indirect
git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.4
github.com/nats-io/nats.go v1.24.0
github.com/satori/go.uuid v1.2.0
google.golang.org/protobuf v1.30.0
)
require (
github.com/nats-io/nkeys v0.4.4 // indirect
github.com/nats-io/nuid v1.0.1 // indirect
golang.org/x/crypto v0.7.0 // indirect
golang.org/x/sys v0.6.0 // indirect
)

26
go.sum
View File

@ -1,17 +1,41 @@
git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.1 h1:lZYpXPfOi/5VQVz6zj51mInYzlN+QjDUoR/wNk4KsYU=
git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.1/go.mod h1:wnWM6xEhOOWsf2pURh/OaugZEZDkbRJY4mpbaz4ETxk=
git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.2 h1:ihmsdfv6TFP+RW+12iLTzag9CnuhUFMwlPJucUGY8TU=
git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.2/go.mod h1:wnWM6xEhOOWsf2pURh/OaugZEZDkbRJY4mpbaz4ETxk=
git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.3 h1:Bv9mT6k/9RJXD53H5POszfB2XstCPmvO/XKzScpuvQI=
git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.3/go.mod h1:wnWM6xEhOOWsf2pURh/OaugZEZDkbRJY4mpbaz4ETxk=
git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.4 h1:I/cIi5idlcL5+n+q+wqyPmLFxYWkrFcss16o/qqRtXU=
git.ymnuktech.ru/ymnuk/yt-logger-go v0.0.4/go.mod h1:wnWM6xEhOOWsf2pURh/OaugZEZDkbRJY4mpbaz4ETxk=
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/nats-io/nats.go v1.18.0 h1:o480Ao6kuSSFyJO75rGTXCEPj7LGkY84C1Ye+Uhm4c0=
github.com/nats-io/nats.go v1.18.0/go.mod h1:BPko4oXsySz4aSWeFgOHLZs3G4Jq4ZAyE6/zMCxRT6w=
github.com/nats-io/nats.go v1.19.0 h1:H6j8aBnTQFoVrTGB6Xjd903UMdE7jz6DS4YkmAqgZ9Q=
github.com/nats-io/nats.go v1.19.0/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA=
github.com/nats-io/nats.go v1.20.0 h1:T8JJnQfVSdh1CzGiwAOv5hEobYCBho/0EupGznYw0oM=
github.com/nats-io/nats.go v1.20.0/go.mod h1:tLqubohF7t4z3du1QDPYJIQQyhb4wl6DhjxEajSI7UA=
github.com/nats-io/nats.go v1.24.0 h1:CRiD8L5GOQu/DcfkmgBcTTIQORMwizF+rPk6T0RaHVQ=
github.com/nats-io/nats.go v1.24.0/go.mod h1:dVQF+BK3SzUZpwyzHedXsvH3EO38aVKuOPkkHlv5hXA=
github.com/nats-io/nkeys v0.3.0 h1:cgM5tL53EvYRU+2YLXIK0G2mJtK12Ft9oeooSZMA2G8=
github.com/nats-io/nkeys v0.3.0/go.mod h1:gvUNGjVcM2IPr5rCsRsC6Wb3Hr2CQAm08dsxtV6A5y4=
github.com/nats-io/nkeys v0.4.4 h1:xvBJ8d69TznjcQl9t6//Q5xXuVhyYiSos6RPtvQNTwA=
github.com/nats-io/nkeys v0.4.4/go.mod h1:XUkxdLPTufzlihbamfzQ7mw/VGx6ObUs+0bN5sNvt64=
github.com/nats-io/nuid v1.0.1 h1:5iA8DT8V7q8WK2EScv2padNa/rTESc1KdnPw4TC2paw=
github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c=
github.com/satori/go.uuid v1.2.0 h1:0uYX9dsZ2yD7q2RtLRtPSdGDWzjeM3TbMJP9utgA0ww=
github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0=
golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b h1:wSOdpTq0/eI46Ez/LkDwIsAKA71YP2SRKBODiRWM0as=
golang.org/x/crypto v0.0.0-20210314154223-e6e6c4f2bb5b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.1.0 h1:MDRAIl0xIo9Io2xV565hzXHw3zVseKrJKodhohM5CjU=
golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw=
golang.org/x/crypto v0.3.0 h1:a06MkbcxBrEFc0w0QIZWXrH/9cCX6KJyWbBOIwAn+7A=
golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4=
golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A=
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@ -19,3 +43,5 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
google.golang.org/protobuf v1.30.0 h1:kPPoIgf3TsEvrm0PFe15JQ+570QVxYzEvvHqChK+cng=
google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.1
// protoc-gen-go v1.30.0
// protoc v3.12.4
// source: protobuf/function.proto

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.1
// protoc-gen-go v1.30.0
// protoc v3.12.4
// source: protobuf/header.proto
@ -33,6 +33,11 @@ type Header struct {
Path string `protobuf:"bytes,6,opt,name=path,proto3" json:"path,omitempty"`
Method string `protobuf:"bytes,7,opt,name=method,proto3" json:"method,omitempty"`
Domain string `protobuf:"bytes,8,opt,name=domain,proto3" json:"domain,omitempty"`
Project string `protobuf:"bytes,9,opt,name=project,proto3" json:"project,omitempty"`
CallID string `protobuf:"bytes,10,opt,name=callID,proto3" json:"callID,omitempty"`
CallPrevID string `protobuf:"bytes,11,opt,name=callPrevID,proto3" json:"callPrevID,omitempty"`
PayloadSize int64 `protobuf:"varint,12,opt,name=payloadSize,proto3" json:"payloadSize,omitempty"`
PayloadS3Uri string `protobuf:"bytes,13,opt,name=payloadS3Uri,proto3" json:"payloadS3Uri,omitempty"`
}
func (x *Header) Reset() {
@ -123,6 +128,41 @@ func (x *Header) GetDomain() string {
return ""
}
func (x *Header) GetProject() string {
if x != nil {
return x.Project
}
return ""
}
func (x *Header) GetCallID() string {
if x != nil {
return x.CallID
}
return ""
}
func (x *Header) GetCallPrevID() string {
if x != nil {
return x.CallPrevID
}
return ""
}
func (x *Header) GetPayloadSize() int64 {
if x != nil {
return x.PayloadSize
}
return 0
}
func (x *Header) GetPayloadS3Uri() string {
if x != nil {
return x.PayloadS3Uri
}
return ""
}
var File_protobuf_header_proto protoreflect.FileDescriptor
var file_protobuf_header_proto_rawDesc = []byte{
@ -131,7 +171,7 @@ var file_protobuf_header_proto_rawDesc = []byte{
0x1a, 0x1a, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x2d,
0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x1d, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x61, 0x72, 0x74,
0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x96, 0x05, 0x0a, 0x06,
0x2d, 0x66, 0x6f, 0x72, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xae, 0x06, 0x0a, 0x06,
0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x12, 0x36, 0x0a, 0x07, 0x68, 0x65, 0x61, 0x64, 0x65, 0x72,
0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x1c, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
0x6b, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x2e, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73,
@ -156,25 +196,35 @@ var file_protobuf_header_proto_rawDesc = []byte{
0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x07, 0x20,
0x01, 0x28, 0x09, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x64,
0x6f, 0x6d, 0x61, 0x69, 0x6e, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x64, 0x6f, 0x6d,
0x61, 0x69, 0x6e, 0x1a, 0x3a, 0x0a, 0x0c, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e,
0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a,
0x54, 0x0a, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79, 0x41, 0x72, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72,
0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03,
0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x69, 0x73,
0x74, 0x4f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a, 0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45,
0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28,
0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01,
0x1a, 0x42, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64,
0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65,
0x3a, 0x02, 0x38, 0x01, 0x42, 0x0b, 0x5a, 0x09, 0x2e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72,
0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x61, 0x69, 0x6e, 0x12, 0x18, 0x0a, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x18, 0x09,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x70, 0x72, 0x6f, 0x6a, 0x65, 0x63, 0x74, 0x12, 0x16, 0x0a,
0x06, 0x63, 0x61, 0x6c, 0x6c, 0x49, 0x44, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63,
0x61, 0x6c, 0x6c, 0x49, 0x44, 0x12, 0x1e, 0x0a, 0x0a, 0x63, 0x61, 0x6c, 0x6c, 0x50, 0x72, 0x65,
0x76, 0x49, 0x44, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x63, 0x61, 0x6c, 0x6c, 0x50,
0x72, 0x65, 0x76, 0x49, 0x44, 0x12, 0x20, 0x0a, 0x0b, 0x70, 0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64,
0x53, 0x69, 0x7a, 0x65, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x03, 0x52, 0x0b, 0x70, 0x61, 0x79, 0x6c,
0x6f, 0x61, 0x64, 0x53, 0x69, 0x7a, 0x65, 0x12, 0x22, 0x0a, 0x0c, 0x70, 0x61, 0x79, 0x6c, 0x6f,
0x61, 0x64, 0x53, 0x33, 0x55, 0x72, 0x69, 0x18, 0x0d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0c, 0x70,
0x61, 0x79, 0x6c, 0x6f, 0x61, 0x64, 0x53, 0x33, 0x55, 0x72, 0x69, 0x1a, 0x3a, 0x0a, 0x0c, 0x48,
0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b,
0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14, 0x0a,
0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61,
0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x54, 0x0a, 0x0e, 0x51, 0x75, 0x65, 0x72, 0x79,
0x41, 0x72, 0x67, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x2c, 0x0a, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x16, 0x2e, 0x6e, 0x65, 0x74,
0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66, 0x53, 0x74, 0x72, 0x69, 0x6e,
0x67, 0x73, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x39, 0x0a,
0x0b, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x10, 0x0a, 0x03,
0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b, 0x65, 0x79, 0x12, 0x14,
0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76,
0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x1a, 0x42, 0x0a, 0x14, 0x52, 0x65, 0x73, 0x70,
0x6f, 0x6e, 0x73, 0x65, 0x48, 0x65, 0x61, 0x64, 0x65, 0x72, 0x73, 0x45, 0x6e, 0x74, 0x72, 0x79,
0x12, 0x10, 0x0a, 0x03, 0x6b, 0x65, 0x79, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x6b,
0x65, 0x79, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x3a, 0x02, 0x38, 0x01, 0x42, 0x0b, 0x5a, 0x09,
0x2e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x33,
}
var (

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.1
// protoc-gen-go v1.30.0
// protoc v3.12.4
// source: protobuf/list-values.proto
@ -114,7 +114,7 @@ func (x *ListOfFiles) GetFile() []*ListOfFiles_File {
return nil
}
type ListOfBinaryes struct {
type ListOfBinaries struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
@ -122,8 +122,8 @@ type ListOfBinaryes struct {
Value [][]byte `protobuf:"bytes,1,rep,name=value,proto3" json:"value,omitempty"`
}
func (x *ListOfBinaryes) Reset() {
*x = ListOfBinaryes{}
func (x *ListOfBinaries) Reset() {
*x = ListOfBinaries{}
if protoimpl.UnsafeEnabled {
mi := &file_protobuf_list_values_proto_msgTypes[2]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@ -131,13 +131,13 @@ func (x *ListOfBinaryes) Reset() {
}
}
func (x *ListOfBinaryes) String() string {
func (x *ListOfBinaries) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ListOfBinaryes) ProtoMessage() {}
func (*ListOfBinaries) ProtoMessage() {}
func (x *ListOfBinaryes) ProtoReflect() protoreflect.Message {
func (x *ListOfBinaries) ProtoReflect() protoreflect.Message {
mi := &file_protobuf_list_values_proto_msgTypes[2]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
@ -149,12 +149,12 @@ func (x *ListOfBinaryes) ProtoReflect() protoreflect.Message {
return mi.MessageOf(x)
}
// Deprecated: Use ListOfBinaryes.ProtoReflect.Descriptor instead.
func (*ListOfBinaryes) Descriptor() ([]byte, []int) {
// Deprecated: Use ListOfBinaries.ProtoReflect.Descriptor instead.
func (*ListOfBinaries) Descriptor() ([]byte, []int) {
return file_protobuf_list_values_proto_rawDescGZIP(), []int{2}
}
func (x *ListOfBinaryes) GetValue() [][]byte {
func (x *ListOfBinaries) GetValue() [][]byte {
if x != nil {
return x.Value
}
@ -170,6 +170,7 @@ type ListOfFiles_File struct {
ContentType []string `protobuf:"bytes,2,rep,name=contentType,proto3" json:"contentType,omitempty"`
Size int64 `protobuf:"zigzag64,3,opt,name=size,proto3" json:"size,omitempty"`
Content []byte `protobuf:"bytes,4,opt,name=content,proto3" json:"content,omitempty"`
S3Uri string `protobuf:"bytes,5,opt,name=s3Uri,proto3" json:"s3Uri,omitempty"`
}
func (x *ListOfFiles_File) Reset() {
@ -232,6 +233,13 @@ func (x *ListOfFiles_File) GetContent() []byte {
return nil
}
func (x *ListOfFiles_File) GetS3Uri() string {
if x != nil {
return x.S3Uri
}
return ""
}
var File_protobuf_list_values_proto protoreflect.FileDescriptor
var file_protobuf_list_values_proto_rawDesc = []byte{
@ -239,22 +247,24 @@ var file_protobuf_list_values_proto_rawDesc = []byte{
0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x6e, 0x65,
0x74, 0x77, 0x6f, 0x72, 0x6b, 0x22, 0x25, 0x0a, 0x0d, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66, 0x53,
0x74, 0x72, 0x69, 0x6e, 0x67, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18,
0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xb0, 0x01, 0x0a,
0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x22, 0xc7, 0x01, 0x0a,
0x0b, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, 0x2d, 0x0a, 0x04,
0x66, 0x69, 0x6c, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x19, 0x2e, 0x6e, 0x65, 0x74,
0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66, 0x46, 0x69, 0x6c, 0x65, 0x73,
0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x72, 0x0a, 0x04, 0x46,
0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65, 0x12,
0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02,
0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70,
0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12, 0x52,
0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x22,
0x26, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x65,
0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c,
0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0b, 0x5a, 0x09, 0x2e, 0x2f, 0x6e, 0x65, 0x74,
0x77, 0x6f, 0x72, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x2e, 0x46, 0x69, 0x6c, 0x65, 0x52, 0x04, 0x66, 0x69, 0x6c, 0x65, 0x1a, 0x88, 0x01, 0x0a, 0x04,
0x46, 0x69, 0x6c, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65,
0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x69, 0x6c, 0x65, 0x6e, 0x61, 0x6d, 0x65,
0x12, 0x20, 0x0a, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79, 0x70, 0x65, 0x18,
0x02, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0b, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74, 0x54, 0x79,
0x70, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x12,
0x52, 0x04, 0x73, 0x69, 0x7a, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e,
0x74, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x07, 0x63, 0x6f, 0x6e, 0x74, 0x65, 0x6e, 0x74,
0x12, 0x14, 0x0a, 0x05, 0x73, 0x33, 0x55, 0x72, 0x69, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52,
0x05, 0x73, 0x33, 0x55, 0x72, 0x69, 0x22, 0x26, 0x0a, 0x0e, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x66,
0x42, 0x69, 0x6e, 0x61, 0x72, 0x69, 0x65, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75,
0x65, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0c, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x42, 0x0b,
0x5a, 0x09, 0x2e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f,
0x74, 0x6f, 0x33,
}
var (
@ -273,7 +283,7 @@ var file_protobuf_list_values_proto_msgTypes = make([]protoimpl.MessageInfo, 4)
var file_protobuf_list_values_proto_goTypes = []interface{}{
(*ListOfStrings)(nil), // 0: network.ListOfStrings
(*ListOfFiles)(nil), // 1: network.ListOfFiles
(*ListOfBinaryes)(nil), // 2: network.ListOfBinaryes
(*ListOfBinaries)(nil), // 2: network.ListOfBinaries
(*ListOfFiles_File)(nil), // 3: network.ListOfFiles.File
}
var file_protobuf_list_values_proto_depIdxs = []int32{
@ -316,7 +326,7 @@ func file_protobuf_list_values_proto_init() {
}
}
file_protobuf_list_values_proto_msgTypes[2].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ListOfBinaryes); i {
switch v := v.(*ListOfBinaries); i {
case 0:
return &v.state
case 1:

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.1
// protoc-gen-go v1.30.0
// protoc v3.12.4
// source: protobuf/metadata.proto
@ -20,66 +20,17 @@ const (
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
type Metadata_PackageType int32
const (
Metadata_TYPE_REQUEST Metadata_PackageType = 0 // Пакет запроса
Metadata_TYPE_RESPONSE Metadata_PackageType = 1 // Пакет ответа
Metadata_TYPE_STREAM Metadata_PackageType = 2 // Пакет потока, который не требует возврата результата (обратного вызова)
)
// Enum value maps for Metadata_PackageType.
var (
Metadata_PackageType_name = map[int32]string{
0: "TYPE_REQUEST",
1: "TYPE_RESPONSE",
2: "TYPE_STREAM",
}
Metadata_PackageType_value = map[string]int32{
"TYPE_REQUEST": 0,
"TYPE_RESPONSE": 1,
"TYPE_STREAM": 2,
}
)
func (x Metadata_PackageType) Enum() *Metadata_PackageType {
p := new(Metadata_PackageType)
*p = x
return p
}
func (x Metadata_PackageType) String() string {
return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x))
}
func (Metadata_PackageType) Descriptor() protoreflect.EnumDescriptor {
return file_protobuf_metadata_proto_enumTypes[0].Descriptor()
}
func (Metadata_PackageType) Type() protoreflect.EnumType {
return &file_protobuf_metadata_proto_enumTypes[0]
}
func (x Metadata_PackageType) Number() protoreflect.EnumNumber {
return protoreflect.EnumNumber(x)
}
// Deprecated: Use Metadata_PackageType.Descriptor instead.
func (Metadata_PackageType) EnumDescriptor() ([]byte, []int) {
return file_protobuf_metadata_proto_rawDescGZIP(), []int{0, 0}
}
type Metadata struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
PackageType Metadata_PackageType `protobuf:"varint,1,opt,name=packageType,proto3,enum=network.Metadata_PackageType" json:"packageType,omitempty"`
FuncName string `protobuf:"bytes,2,opt,name=funcName,proto3" json:"funcName,omitempty"`
QueueCallback string `protobuf:"bytes,3,opt,name=queueCallback,proto3" json:"queueCallback,omitempty"`
CallResponseID string `protobuf:"bytes,4,opt,name=callResponseID,proto3" json:"callResponseID,omitempty"`
CallID string `protobuf:"bytes,5,opt,name=callID,proto3" json:"callID,omitempty"`
CallFrom string `protobuf:"bytes,6,opt,name=callFrom,proto3" json:"callFrom,omitempty"`
// PackageType packageType = 1;
FuncName string `protobuf:"bytes,2,opt,name=funcName,proto3" json:"funcName,omitempty"`
QueueCallback string `protobuf:"bytes,3,opt,name=queueCallback,proto3" json:"queueCallback,omitempty"`
CallResponseID string `protobuf:"bytes,4,opt,name=callResponseID,proto3" json:"callResponseID,omitempty"`
CallID string `protobuf:"bytes,5,opt,name=callID,proto3" json:"callID,omitempty"`
CallFrom string `protobuf:"bytes,6,opt,name=callFrom,proto3" json:"callFrom,omitempty"`
}
func (x *Metadata) Reset() {
@ -114,13 +65,6 @@ func (*Metadata) Descriptor() ([]byte, []int) {
return file_protobuf_metadata_proto_rawDescGZIP(), []int{0}
}
func (x *Metadata) GetPackageType() Metadata_PackageType {
if x != nil {
return x.PackageType
}
return Metadata_TYPE_REQUEST
}
func (x *Metadata) GetFuncName() string {
if x != nil {
return x.FuncName
@ -161,27 +105,19 @@ var File_protobuf_metadata_proto protoreflect.FileDescriptor
var file_protobuf_metadata_proto_rawDesc = []byte{
0x0a, 0x17, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x6d, 0x65, 0x74, 0x61, 0x64,
0x61, 0x74, 0x61, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x07, 0x6e, 0x65, 0x74, 0x77, 0x6f,
0x72, 0x6b, 0x22, 0xae, 0x02, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12,
0x3f, 0x0a, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01,
0x20, 0x01, 0x28, 0x0e, 0x32, 0x1d, 0x2e, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x2e, 0x4d,
0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x2e, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x54,
0x79, 0x70, 0x65, 0x52, 0x0b, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65,
0x12, 0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d,
0x71, 0x75, 0x65, 0x75, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0d, 0x71, 0x75, 0x65, 0x75, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61,
0x63, 0x6b, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e,
0x73, 0x65, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c,
0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61,
0x6c, 0x6c, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c,
0x49, 0x44, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x06,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x22, 0x43,
0x0a, 0x0b, 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x54, 0x79, 0x70, 0x65, 0x12, 0x10, 0x0a,
0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x45, 0x53, 0x54, 0x10, 0x00, 0x12,
0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x52, 0x45, 0x53, 0x50, 0x4f, 0x4e, 0x53, 0x45,
0x10, 0x01, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x45, 0x41,
0x4d, 0x10, 0x02, 0x42, 0x0b, 0x5a, 0x09, 0x2e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b,
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x72, 0x6b, 0x22, 0xa8, 0x01, 0x0a, 0x08, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x12,
0x1a, 0x0a, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x66, 0x75, 0x6e, 0x63, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x24, 0x0a, 0x0d, 0x71,
0x75, 0x65, 0x75, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63, 0x6b, 0x18, 0x03, 0x20, 0x01,
0x28, 0x09, 0x52, 0x0d, 0x71, 0x75, 0x65, 0x75, 0x65, 0x43, 0x61, 0x6c, 0x6c, 0x62, 0x61, 0x63,
0x6b, 0x12, 0x26, 0x0a, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x52, 0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73,
0x65, 0x49, 0x44, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x63, 0x61, 0x6c, 0x6c, 0x52,
0x65, 0x73, 0x70, 0x6f, 0x6e, 0x73, 0x65, 0x49, 0x44, 0x12, 0x16, 0x0a, 0x06, 0x63, 0x61, 0x6c,
0x6c, 0x49, 0x44, 0x18, 0x05, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x63, 0x61, 0x6c, 0x6c, 0x49,
0x44, 0x12, 0x1a, 0x0a, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x18, 0x06, 0x20,
0x01, 0x28, 0x09, 0x52, 0x08, 0x63, 0x61, 0x6c, 0x6c, 0x46, 0x72, 0x6f, 0x6d, 0x42, 0x0b, 0x5a,
0x09, 0x2e, 0x2f, 0x6e, 0x65, 0x74, 0x77, 0x6f, 0x72, 0x6b, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x33,
}
var (
@ -196,19 +132,16 @@ func file_protobuf_metadata_proto_rawDescGZIP() []byte {
return file_protobuf_metadata_proto_rawDescData
}
var file_protobuf_metadata_proto_enumTypes = make([]protoimpl.EnumInfo, 1)
var file_protobuf_metadata_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_protobuf_metadata_proto_goTypes = []interface{}{
(Metadata_PackageType)(0), // 0: network.Metadata.PackageType
(*Metadata)(nil), // 1: network.Metadata
(*Metadata)(nil), // 0: network.Metadata
}
var file_protobuf_metadata_proto_depIdxs = []int32{
0, // 0: network.Metadata.packageType:type_name -> network.Metadata.PackageType
1, // [1:1] is the sub-list for method output_type
1, // [1:1] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
0, // [0:0] is the sub-list for method output_type
0, // [0:0] is the sub-list for method input_type
0, // [0:0] is the sub-list for extension type_name
0, // [0:0] is the sub-list for extension extendee
0, // [0:0] is the sub-list for field type_name
}
func init() { file_protobuf_metadata_proto_init() }
@ -235,14 +168,13 @@ func file_protobuf_metadata_proto_init() {
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_protobuf_metadata_proto_rawDesc,
NumEnums: 1,
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_protobuf_metadata_proto_goTypes,
DependencyIndexes: file_protobuf_metadata_proto_depIdxs,
EnumInfos: file_protobuf_metadata_proto_enumTypes,
MessageInfos: file_protobuf_metadata_proto_msgTypes,
}.Build()
File_protobuf_metadata_proto = out.File

View File

@ -1,6 +1,6 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.1
// protoc-gen-go v1.30.0
// protoc v3.12.4
// source: protobuf/multipart-form.proto

@ -1 +1 @@
Subproject commit a665228b3bac2080f704d45be221fbbe5ccf558a
Subproject commit 0be663c0cdbcbd9620d0b68a6824e62d5d38dcb8

View File

@ -4,14 +4,23 @@ import (
"crypto/rand"
"fmt"
"strings"
"sync"
"time"
"git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git/network"
"git.ymnuktech.ru/ymnuk/yt-function-sdk-go/network"
ytlogger "git.ymnuktech.ru/ymnuk/yt-logger-go"
"git.ymnuktech.ru/ymnuk/yt-logger-go/log"
"github.com/nats-io/nats.go"
uuid "github.com/satori/go.uuid"
"google.golang.org/protobuf/proto"
)
type ChanRes struct {
res []byte
header *network.Header
err error
}
type funcDesc struct {
Name string
F func(header *network.Header, payload []byte) (result []byte, err error)
@ -20,100 +29,153 @@ type funcDesc struct {
conn *nats.Conn
timeout time.Duration
acceptFunc func(access string) bool
logger *ytlogger.YTLogger
}
func (fDesc *funcDesc) worker() {
chanErr := make(chan error)
chanResult := make(chan []byte)
for {
data, ok := <-fDesc.inputChan
if !ok {
break
}
var err error
var pkg network.Function
pkg := &network.Function{}
err = proto.Unmarshal(data.Data, &pkg)
err = proto.Unmarshal(data.Data, pkg)
if err != nil {
panic(err)
}
timeStart := time.Now()
// Проверка может ли вызывающая сторона вызвать функцию
if !fDesc.acceptFunc(pkg.Metadata.CallFrom) {
if pkg.Metadata.QueueCallback != "" {
pkg.ErrNo = 403
pkg.Error = "forbidden"
pkg.Metadata.CallResponseID = uuid.NewV4().String()
buff, err := proto.Marshal(&pkg)
buff, err := proto.Marshal(pkg)
if err != nil {
panic(err)
}
fDesc.conn.Publish(pkg.Metadata.QueueCallback, buff)
if fDesc.logger != nil {
fDesc.logger.Err(&pkg.Metadata.FuncName, &pkg.Metadata.CallID, &pkg.Header.CallPrevID, &pkg.Metadata.CallFrom, &pkg.Metadata.CallResponseID, &timeStart, &[]time.Time{time.Now()}[0], nil, &pkg.ErrNo, &pkg.Error, &pkg.ErrNo, nil, nil)
}
if err = fDesc.conn.Publish(pkg.Metadata.QueueCallback, buff); err != nil {
continue
}
} else {
if fDesc.logger != nil {
fDesc.logger.Err(&pkg.Metadata.FuncName, &pkg.Metadata.CallID, &pkg.Header.CallPrevID, &pkg.Metadata.CallFrom, &pkg.Metadata.CallResponseID, &timeStart, &[]time.Time{time.Now()}[0], nil, &pkg.ErrNo, &pkg.Error, &pkg.ErrNo, nil, nil)
}
}
continue
}
// Вызов функции
chanRes := make(chan *ChanRes)
go func() {
result, err := fDesc.F(pkg.Header, data.Data)
if err != nil {
chanErr <- err
} else {
chanResult <- result
if pkg.Header.ResponseHeaders == nil {
pkg.Header.ResponseHeaders = make(map[string]string)
}
result, err := fDesc.F(pkg.Header, pkg.Payload)
chanRes <- &ChanRes{
res: result,
err: err,
}
}()
//var result []byte
select {
case result := <-chanResult:
if pkg.Metadata.QueueCallback != "" {
pkg.Payload = result
pkg.Metadata.CallResponseID = uuid.NewV4().String()
buff, err := proto.Marshal(&pkg)
if err != nil {
panic(err)
}
fDesc.conn.Publish(pkg.Metadata.QueueCallback, buff)
}
continue
case err = <-chanErr:
if err != nil {
case res := <-chanRes:
if res.err != nil {
if pkg.Metadata.QueueCallback != "" {
pkg.ErrNo = 500
pkg.Error = err.Error()
//if err != nil {
pkg.Error = res.err.Error()
/*} else {
pkg.Error = ""
}*/
pkg.Metadata.CallResponseID = uuid.NewV4().String()
fDesc.conn.Publish(pkg.Metadata.QueueCallback, []byte(err.Error()))
if fDesc.logger != nil {
fDesc.logger.Err(&pkg.Metadata.FuncName, &pkg.Metadata.CallID, &pkg.Header.CallPrevID, &pkg.Metadata.CallFrom, &pkg.Metadata.CallResponseID, &timeStart, &[]time.Time{time.Now()}[0], nil, &pkg.ErrNo, &pkg.Error, &pkg.ErrNo, nil, nil)
}
buff, err := proto.Marshal(pkg)
if err != nil {
//panic(err)
continue
}
//fDesc.conn.Publish(pkg.Metadata.QueueCallback, []byte(pkg.Error))
fDesc.conn.Publish(pkg.Metadata.QueueCallback, buff)
}
continue
}
if pkg.Metadata.QueueCallback != "" {
pkg.Payload = res.res
pkg.Metadata.CallResponseID = uuid.NewV4().String()
if fDesc.logger != nil {
fDesc.logger.Info(&pkg.Metadata.FuncName, &pkg.Metadata.CallID, &pkg.Header.CallPrevID, &pkg.Metadata.CallFrom, &pkg.Metadata.CallResponseID, &timeStart, &[]time.Time{time.Now()}[0], nil, &pkg.ErrNo, &pkg.Error, &pkg.ErrNo, &[]int64{int64(len(pkg.Payload))}[0], nil)
}
buff, err := proto.Marshal(pkg)
if err != nil {
//panic(err)
continue
}
if err = fDesc.conn.Publish(pkg.Metadata.QueueCallback, buff); err != nil {
continue
}
}
continue
case <-time.After(fDesc.timeout):
if err != nil {
if pkg.Metadata.QueueCallback != "" {
pkg.ErrNo = 408
pkg.Error = err.Error()
pkg.Metadata.CallResponseID = uuid.NewV4().String()
fDesc.conn.Publish(pkg.Metadata.QueueCallback, []byte("function call timeout"))
//if err != nil {
if pkg.Metadata.QueueCallback != "" {
pkg.ErrNo = 408
//pkg.Error = err.Error()
pkg.Error = "function call timeout"
pkg.Metadata.CallResponseID = uuid.NewV4().String()
if fDesc.logger != nil {
fDesc.logger.Err(&pkg.Metadata.FuncName, &pkg.Metadata.CallID, &pkg.Header.CallPrevID, &pkg.Metadata.CallFrom, &pkg.Metadata.CallResponseID, &timeStart, &[]time.Time{time.Now()}[0], nil, &pkg.ErrNo, &pkg.Error, &pkg.ErrNo, nil, nil)
}
buff, err := proto.Marshal(pkg)
if err != nil {
continue
}
//fDesc.conn.Publish(pkg.Metadata.QueueCallback, []byte("function call timeout"))
if err = fDesc.conn.Publish(pkg.Metadata.QueueCallback, buff); err != nil {
continue
}
continue
}
continue
//}
}
}
}
type CallbackFunc struct {
F func(err error, header *network.Header, result []byte)
TimeCall time.Time
//Metadata *network.Metadata
}
// Сервер инстанса
type Serve struct {
NatsHost string
NatsPort string
nc *nats.Conn
hasNats bool
projectName string
moduleName string
funcs map[string]funcDesc
//timeoutCallback time.Duration
//NatsHost string
//NatsPort string
NatsAddr string
nc *nats.Conn
hasNats bool
projectName string
moduleName string
funcs map[string]funcDesc
timeoutCallback time.Duration
queueCallback string
chanQueueCallback chan *nats.Msg
subj *nats.Subscription
callbackFuncs map[string]func(err error, result []byte)
accept map[string]map[string]bool
//callbackFuncs map[string]func(err error, header *network.Header, result []byte)
callbackFuncs map[string]*CallbackFunc
callbackFuncsMutex sync.Mutex
accept map[string]map[string]bool
logger *ytlogger.YTLogger
queueNameLog *string
}
func NewServe(host string, port string, projectName string, moduleName string, natsServ *nats.Conn) *Serve {
// Создание нового инстанса сервера
func NewServe(addr string, projectName string, moduleName string, natsServ *nats.Conn, priority *ytlogger.Priority, queueNameLog *string) *Serve {
if strings.Trim(moduleName, " ") == "" {
moduleName = "default"
} else {
@ -130,8 +192,9 @@ func NewServe(host string, port string, projectName string, moduleName string, n
if natsServ != nil {
serve.nc = natsServ
} else {
serve.NatsHost = host
serve.NatsPort = port
/*serve.NatsHost = host
serve.NatsPort = port*/
serve.NatsAddr = addr
}
serve.projectName = projectName
serve.moduleName = moduleName
@ -145,9 +208,31 @@ func NewServe(host string, port string, projectName string, moduleName string, n
serve.accept["system"]["telegram"] = true
//serve.accept[projectName][moduleName] = true
serve.timeoutCallback = time.Second * 30
if queueNameLog != nil {
if priority == nil {
priority = &[]ytlogger.Priority{ytlogger.LOG_INFO}[0]
}
serve.logger = ytlogger.NewYTLogger(*priority, 100000, serve.sendLog)
serve.queueNameLog = queueNameLog
}
return serve
}
// Функция отправки логов на удаленный сервер
func (serve *Serve) sendLog(pkg *log.Pkg) {
var b []byte
var err error
b, err = proto.Marshal(pkg)
if err != nil {
return
}
serve.nc.Publish(*serve.queueNameLog, b)
}
// Установка разрешающих правил выполнения функций
func (serve *Serve) AddAccept(ruleName string) bool {
return serve.AddAcceptBool(ruleName, true)
}
@ -193,12 +278,29 @@ func (serve *Serve) AddAcceptBool(ruleName string, allow bool) bool {
return true
}
func (serve *Serve) natsErrHandler(nc *nats.Conn, sub *nats.Subscription, natsErr error) {
fmt.Printf("error: %v\n", natsErr)
if natsErr == nats.ErrSlowConsumer {
pendingMsgs, _, err := sub.Pending()
if err != nil {
fmt.Printf("couldn't get pending messages: %v", err)
return
}
fmt.Printf("Falling behind with %d pending messages on subject %q.\n",
pendingMsgs, sub.Subject)
// Log error, notify operations...
}
// check for other errors
}
// Запуск текущего инстанса сервера
func (serve *Serve) Run() (err error) {
if serve.nc == nil {
serve.nc, err = nats.Connect(fmt.Sprintf("nats://%s:%s", serve.NatsHost, serve.NatsPort))
serve.nc, err = nats.Connect(serve.NatsAddr, nats.ErrorHandler(serve.natsErrHandler))
if err != nil {
return
}
} else {
serve.hasNats = true
}
rnd := make([]byte, 16)
@ -206,15 +308,35 @@ func (serve *Serve) Run() (err error) {
if err != nil {
return
}
serve.callbackFuncs = make(map[string]func(err error, result []byte))
//serve.callbackFuncs = make(map[string]func(err error, header *network.Header, result []byte))
serve.callbackFuncs = make(map[string]*CallbackFunc)
serve.queueCallback = fmt.Sprintf("%s.%s.%x", serve.projectName, serve.moduleName, rnd)
serve.chanQueueCallback = make(chan *nats.Msg)
serve.subj, err = serve.nc.ChanSubscribe(serve.queueCallback, serve.chanQueueCallback)
serve.subj, err = serve.nc.ChanQueueSubscribe(serve.queueCallback, serve.projectName+"."+serve.moduleName, serve.chanQueueCallback)
go serve.worker()
return
}
func (serve *Serve) cleanTimeout() {
serve.callbackFuncsMutex.Lock()
defer serve.callbackFuncsMutex.Unlock()
for k, v := range serve.callbackFuncs {
if time.Since(v.TimeCall) > serve.timeoutCallback {
delete(serve.callbackFuncs, k)
err := fmt.Errorf("call function is timed out")
go v.F(err, nil, nil)
}
}
}
func (serve *Serve) worker() {
go func() {
for {
<-time.After(serve.timeoutCallback)
serve.cleanTimeout()
}
}()
for {
if msg, ok := <-serve.chanQueueCallback; !ok {
break
@ -223,19 +345,30 @@ func (serve *Serve) worker() {
var payload network.Function
err = proto.Unmarshal(msg.Data, &payload)
if err != nil {
panic(err)
//panic(err)
continue
}
if f, ok := serve.callbackFuncs[payload.Metadata.CallID]; ok {
if payload.ErrNo != 0 {
err = fmt.Errorf(payload.Error)
if payload.Metadata != nil {
if f, ok := serve.callbackFuncs[payload.Metadata.CallID]; ok {
serve.callbackFuncsMutex.Lock()
delete(serve.callbackFuncs, payload.Metadata.CallID)
serve.callbackFuncsMutex.Unlock()
if payload.ErrNo != 0 {
err = fmt.Errorf(payload.Error)
}
if f != nil {
//go f.F(err, payload.Header, payload.Payload)
f.F(err, payload.Header, payload.Payload)
}
//f(err, payload.Header, payload.Payload)
}
f(err, payload.Payload)
delete(serve.callbackFuncs, payload.Metadata.CallID)
}
}
}
}
// Завершение текущего инстанса сервера
func (serve *Serve) Shutdown() {
for _, value := range serve.funcs {
value.subj.Unsubscribe()
@ -252,10 +385,12 @@ func (serve *Serve) Shutdown() {
}
// Регистрация функции в текущем инстансе
func (serve *Serve) RegisterFunction(funcName string, f func(header *network.Header, paylod []byte) (result []byte, err error)) (err error) {
return serve.RegisterFunctionWithTimeout(funcName, time.Second*10, f)
return serve.RegisterFunctionWithTimeout(funcName, time.Second*30, f)
}
// Регистрация функции с установленным таймаутом в текущем инстансе
func (serve *Serve) RegisterFunctionWithTimeout(funcName string, timeout time.Duration, f func(header *network.Header, paylod []byte) (result []byte, err error)) (err error) {
if _, ok := serve.funcs[fmt.Sprintf("%s.%s", serve.moduleName, funcName)]; ok {
return fmt.Errorf(`restrict duplicate function name`)
@ -268,11 +403,12 @@ func (serve *Serve) RegisterFunctionWithTimeout(funcName string, timeout time.Du
}
fDesc := funcDesc{
Name: fmt.Sprintf("%s.%s.%s", serve.projectName, serve.moduleName, funcName),
F: f,
Name: fmt.Sprintf("%s.%s.%s", serve.projectName, serve.moduleName, funcName),
F: f,
logger: serve.logger,
}
fDesc.inputChan = make(chan *nats.Msg)
fDesc.subj, err = serve.nc.ChanSubscribe(fmt.Sprintf("%s.%s.%s", serve.projectName, serve.moduleName, funcName), fDesc.inputChan)
fDesc.subj, err = serve.nc.ChanQueueSubscribe(fmt.Sprintf("%s.%s.%s", serve.projectName, serve.moduleName, funcName), serve.projectName+"."+serve.moduleName, fDesc.inputChan)
fDesc.conn = serve.nc
fDesc.timeout = timeout
fDesc.acceptFunc = serve.acceptVerify
@ -282,6 +418,7 @@ func (serve *Serve) RegisterFunctionWithTimeout(funcName string, timeout time.Du
return
}
// Проверка есть ли такая функция в текущем инстансе
func (serve *Serve) HasFunction(name string) bool {
_, ok := serve.funcs[fmt.Sprintf("%s.%s.%s", serve.projectName, serve.moduleName, name)]
return ok
@ -325,14 +462,24 @@ func (serve *Serve) acceptVerify(accept string) bool {
}
}
func (serve *Serve) CallAsync(name string, header *network.Header, payload []byte, f func(err error, result []byte)) {
// Асинхронный вызов функции
func (serve *Serve) CallAsync(name string, header *network.Header, payload []byte, f func(err error, header *network.Header, result []byte)) {
metadata := &network.Metadata{
PackageType: network.Metadata_TYPE_REQUEST,
//PackageType: network.Metadata_TYPE_REQUEST,
FuncName: name,
QueueCallback: serve.queueCallback,
CallID: uuid.NewV4().String(),
CallFrom: fmt.Sprintf("%s.%s", serve.projectName, serve.moduleName),
}
if header == nil {
header = &network.Header{}
}
header.CallPrevID = header.CallID
header.CallID = metadata.CallID
header.Project = serve.projectName
if header.PayloadSize == 0 {
header.PayloadSize = int64(len(payload))
}
pkg := network.Function{
Header: header,
Payload: payload,
@ -340,21 +487,65 @@ func (serve *Serve) CallAsync(name string, header *network.Header, payload []byt
}
buf, err := proto.Marshal(&pkg)
if err != nil {
panic(err)
if f != nil {
f(err, header, payload)
}
return
}
serve.callbackFuncs[metadata.CallID] = f
callback := &CallbackFunc{
F: f,
TimeCall: time.Now(),
//Metadata: pkg.Metadata,
}
serve.callbackFuncsMutex.Lock()
defer serve.callbackFuncsMutex.Unlock()
serve.callbackFuncs[metadata.CallID] = callback
//serve.callbackFuncs[metadata.CallID] = f
serve.nc.Publish(name, buf)
}
func (serve *Serve) Call(name string, header *network.Header, payload []byte) (result []byte, err error) {
chanErr := make(chan error)
chanResult := make(chan []byte)
serve.CallAsync(name, header, []byte("Hello"), func(err error, result []byte) {
chanErr <- err
chanResult <- result
// Синхронный вызов функции
func (serve *Serve) Call(name string, header *network.Header, payload []byte) (result []byte, head *network.Header, err error) {
chanRes := make(chan *ChanRes)
serve.CallAsync(name, header, payload, func(err error, header *network.Header, result []byte) {
chanRes <- &ChanRes{
res: result,
header: header,
err: err,
}
})
err = <-chanErr
result = <-chanResult
res := <-chanRes
err = res.err
head = res.header
result = res.res
return
}
// Вызов функции как поток без ожидания возврата результата
func (serve *Serve) CallStream(name string, header *network.Header, payload []byte) (err error) {
metadata := &network.Metadata{
//PackageType: network.Metadata_TYPE_STREAM,
FuncName: name,
QueueCallback: serve.queueCallback,
CallID: uuid.NewV4().String(),
CallFrom: fmt.Sprintf("%s.%s", serve.projectName, serve.moduleName),
}
if header == nil {
header = &network.Header{}
}
header.Project = serve.projectName
pkg := network.Function{
Header: header,
Payload: payload,
Metadata: metadata,
}
var buf []byte
buf, err = proto.Marshal(&pkg)
if err != nil {
return
}
serve.nc.Publish(name, buf)
return
}

View File

@ -5,30 +5,41 @@ import (
"os"
"testing"
"git.ymnuktech.ru/ymnuk/yt-function-sdk-go.git/network"
"git.ymnuktech.ru/ymnuk/yt-function-sdk-go/network"
)
var serve *Serve
func setup() {
host, _ := os.LookupEnv("NATS_HOST")
port, _ := os.LookupEnv("NATS_PORT")
/*host, exists := os.LookupEnv("NATS_HOST")
if !exists {
host = "localhost"
}*/
addr, exists := os.LookupEnv("NATS_ADDR")
if !exists {
addr = "nats://localhost:4222"
}
/*port, exists := os.LookupEnv("NATS_PORT")
if !exists {
port = "4222"
}*/
serve = NewServe(host, port, "", "test", nil)
serve = NewServe(addr, "", "test", nil, nil, nil)
if serve == nil {
panic(fmt.Errorf(`serve is not created`))
}
serve.AddAccept("*")
serve.Run()
err := serve.Run()
if err != nil {
panic(err)
}
}
func shutdown() {
// TODO
serve.Shutdown()
}
func TestMain(m *testing.M) {
fmt.Println("Main")
setup()
code := m.Run()
shutdown()
@ -37,7 +48,6 @@ func TestMain(m *testing.M) {
func TestRegisterFunction(t *testing.T) {
err := serve.RegisterFunction("testFunc", func(header *network.Header, paylod []byte) (result []byte, err error) {
fmt.Println(`Hello world`)
return []byte("Hello world"), nil
})
if err != nil {
@ -48,38 +58,47 @@ func TestRegisterFunction(t *testing.T) {
}
func TestCallFunctionAsync(t *testing.T) {
var err error
err = serve.RegisterFunction("testFuncSimpleAsync", func(header *network.Header, paylod []byte) (result []byte, err error) {
err := serve.RegisterFunction("testFuncSimpleAsync", func(header *network.Header, paylod []byte) (result []byte, err error) {
header.ResponseHeaders["test"] = "my test"
return []byte("world"), nil
})
if err != nil {
t.Error("Has error: ", err)
return
}
var result []byte
chanErr := make(chan error)
chanResult := make(chan []byte)
serve.CallAsync("default.test.testFuncSimpleAsync", nil, []byte("Hello"), func(err error, result []byte) {
chanErr <- err
chanResult <- result
type ChanRes struct {
res []byte
header *network.Header
err error
}
chanRes := make(chan ChanRes)
serve.CallAsync("default.test.testFuncSimpleAsync", nil, []byte("Hello"), func(err error, header *network.Header, result []byte) {
chanRes <- ChanRes{
res: result,
header: header,
err: err,
}
})
select {
case err = <-chanErr:
if err != nil {
t.Error(err)
return
}
case result = <-chanResult:
if string(result) != "world" {
t.Error("Function not returned \"world\"")
return
}
res := <-chanRes
if res.err != nil {
t.Error(err)
return
}
if string(res.res) != "world" {
t.Error("Function not returned \"world\"")
return
}
if v, ok := res.header.ResponseHeaders["test"]; !ok {
t.Errorf("not set response header")
} else if v != "my test" {
t.Errorf("got \"my test\", but expect \"%s\"", v)
}
}
func TestCallFunction(t *testing.T) {
var err error
err = serve.RegisterFunction("testFuncSimple", func(header *network.Header, paylod []byte) (result []byte, err error) {
header.ResponseHeaders["test"] = "my test"
return []byte("world"), nil
})
if err != nil {
@ -87,7 +106,8 @@ func TestCallFunction(t *testing.T) {
return
}
var result []byte
result, err = serve.Call("default.test.testFuncSimple", nil, []byte("Hello"))
var header *network.Header
result, header, err = serve.Call("default.test.testFuncSimple", nil, []byte("Hello"))
if err != nil {
t.Error(err)
return
@ -96,4 +116,47 @@ func TestCallFunction(t *testing.T) {
t.Error("Function not returned \"world\"")
return
}
if v, ok := header.ResponseHeaders["test"]; !ok {
t.Errorf("not set response header")
} else if v != "my test" {
t.Errorf("got \"my test\", but expect \"%s\"", v)
}
}
func TestCallFunctionDouble(t *testing.T) {
var err error
err = serve.RegisterFunction("testFuncSimple1", func(header *network.Header, paylod []byte) (result []byte, err error) {
/*header.ResponseHeaders["test"] = "my test"
return []byte("world"), nil*/
result, _, err = serve.Call("default.test.testFuncSimple2", header, []byte("Hello"))
return result, err
})
if err != nil {
t.Error("Has error: ", err)
return
}
err = serve.RegisterFunction("testFuncSimple2", func(header *network.Header, paylod []byte) (result []byte, err error) {
header.ResponseHeaders["test"] = "my test"
return []byte("world"), nil
})
if err != nil {
t.Error("Has error: ", err)
return
}
var result []byte
var header *network.Header
result, header, err = serve.Call("default.test.testFuncSimple1", nil, []byte("Hello"))
if err != nil {
t.Error(err)
return
}
if string(result) != "world" {
t.Error("Function not returned \"world\"")
return
}
if v, ok := header.ResponseHeaders["test"]; !ok {
t.Errorf("not set response header")
} else if v != "my test" {
t.Errorf("got \"my test\", but expect \"%s\"", v)
}
}