Initial commit
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDaTCCAlGgAwIBAgIJALg9FEgTMGPaMA0GCSqGSIb3DQEBCwUAMEsxCzAJBgNV
|
||||
BAYTAkNOMRAwDgYDVQQHDAdCZWlqaW5nMRIwEAYDVQQKDAlUdXJib0xpbmsxFjAU
|
||||
BgNVBAMMDXR1cmJvbGluay5kZXYwHhcNMjIxMTMwMDI1NTE2WhcNMzIxMTI3MDI1
|
||||
NTE2WjBLMQswCQYDVQQGEwJDTjEQMA4GA1UEBwwHQmVpamluZzESMBAGA1UECgwJ
|
||||
VHVyYm9MaW5rMRYwFAYDVQQDDA10dXJib2xpbmsuZGV2MIIBIjANBgkqhkiG9w0B
|
||||
AQEFAAOCAQ8AMIIBCgKCAQEAqLjDp7Xh4TVyMZnajYTm73U0I0k7WRkR0TqxHeyO
|
||||
sUQ/yKk9Bv6XNxAEsJj7ofIwMDG7VWI6uuzCWdRD11HIf/fuEDOYqK46LFf+yQXf
|
||||
+P6Y0I2t2vvMS/FntSzzkuz1veRWfFa0ssGV3Iv8jEgSvAfV1xU5rvnlULhVcevz
|
||||
CMOvmesu5DSeEo9EIeugaUasiS2RR+TRJb4gflCPLZu0rL0+/mDNhsd3BXuRp/jE
|
||||
h63F47/eFv3Us9jZ0D/hzmXnmJVzkVbyRwMYKZ8BnDuVhdBzT1yPjbL2A0Q9OIh6
|
||||
IuGlHnbo907ZZgheGxyqSpDq794J5lWhHn5KY/fmpMPZiwIDAQABo1AwTjAdBgNV
|
||||
HQ4EFgQUeRpYmEkuEnGbhwF66uNSmjVzgRkwHwYDVR0jBBgwFoAUeRpYmEkuEnGb
|
||||
hwF66uNSmjVzgRkwDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAQEAeOuJ
|
||||
nKz5/Ez1CiwMT4FwZoJPtjJw4ONSzbxMsekb/aubzNYY0T3w693DqZwVFmM573yq
|
||||
d96ghHBfvVanPMJyHOJFRayZNgrDRKHHW75Jth03cAbQ6MahgVyys0VUrCsAFdAj
|
||||
Zo2q504vVxBtq2pHzYetNDTF6SVjZp/XrMtgepggEtU6Zf1sDpk0Si694rksrO2p
|
||||
3C+zkPtgVFd5cT2fihZ5imjUNqu/iRP95mjoKwtPRRGBUhJjN8UOuRyS08L/eUSf
|
||||
IbN7ogcp6Y+WL6rmNvSVoXBl7wIWhGEWTscyzm66bWisZxGUFTicezL56CpkHdbo
|
||||
NzR3/aU8S0eIDHSaiQ==
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,21 @@
|
||||
-----BEGIN CERTIFICATE-----
|
||||
MIIDZTCCAk2gAwIBAgIJAOFO3+DpMNlLMA0GCSqGSIb3DQEBCwUAMEsxCzAJBgNV
|
||||
BAYTAkNOMRAwDgYDVQQHDAdCZWlqaW5nMRIwEAYDVQQKDAlUdXJib0xpbmsxFjAU
|
||||
BgNVBAMMDXR1cmJvbGluay5kZXYwHhcNMjIxMjA5MTQwNjI4WhcNMzIxMjA2MTQw
|
||||
NjI4WjBLMQswCQYDVQQGEwJDTjEQMA4GA1UEBwwHQmVpamluZzESMBAGA1UECgwJ
|
||||
dHVyYm9saW5rMRYwFAYDVQQDDA10dXJib2xpbmsuZGV2MIIBIjANBgkqhkiG9w0B
|
||||
AQEFAAOCAQ8AMIIBCgKCAQEAr8vdbsXtLWOEWoygSluR3BtYJcp+1nbDwrytr7WX
|
||||
XcnzSB1rQ0lt3yQmQ5BKm6CLbUeKtQd7fIUT1JRn3KJ/dSHXT4qEWWO0XJLJeoAI
|
||||
FXprLWolbrBA8QCAs8Hcbm8F/efHphKU4a10HhD6ENa4YqYPnd89vfYgSPGS/UmF
|
||||
ojWicWjmmT7Np5PBo81mzpbyhGTlOeZj6LLp77w8772MRBDZTn4eDXDuCdfbs2HM
|
||||
YFK4OQ2QQjrh2LSCA6VQgi8gGaXtp2k8CwVlXQpOFWmYX0FyXX/4qvkvXl8rG07T
|
||||
AvX7iCaG3owAYrDeQUL7NqbTvAMHiqivCwrFzThNq+XSkQIDAQABo0wwSjBIBgNV
|
||||
HREEQTA/gg8qLnR1cmJvbGluay5kZXaCECoudGhlY29kZXdheS5jb22CDyoubGV5
|
||||
b3V0ZWNoLm5ldIIJbG9jYWxob3N0MA0GCSqGSIb3DQEBCwUAA4IBAQCUlziOgdSF
|
||||
+GrN2PxrZmRP9bhbLEc1GAWGzStN4xsZFcPIesrDbf74tua65idKvSL4vyx6lpPb
|
||||
ino6mwIgP8ZUV3jdkgKTUMzeqJJY8hoH5Sza93kOZX0oDFyuEJ7LS9kPrLIqEkdp
|
||||
Myc690q5GqNLdSWZqONjAp1S3dezQoKRV/YC6PqMr+1Dq/oRIz83NYWan0vpnHFC
|
||||
gRlK5Rb37ueI+Pe+d6Wg9JSwdo0mFJ5hGfT5Ler4AoA9HMss1k9lJ18iFoSyBCcn
|
||||
wIg5gcxJe6P7DKXnOknt1Sa0Us/li8ux5J8bVgqImkqx2nagDugcW0BfQYcoFilH
|
||||
pgulZBZZCO3S
|
||||
-----END CERTIFICATE-----
|
||||
@@ -0,0 +1,27 @@
|
||||
-----BEGIN RSA PRIVATE KEY-----
|
||||
MIIEowIBAAKCAQEAr8vdbsXtLWOEWoygSluR3BtYJcp+1nbDwrytr7WXXcnzSB1r
|
||||
Q0lt3yQmQ5BKm6CLbUeKtQd7fIUT1JRn3KJ/dSHXT4qEWWO0XJLJeoAIFXprLWol
|
||||
brBA8QCAs8Hcbm8F/efHphKU4a10HhD6ENa4YqYPnd89vfYgSPGS/UmFojWicWjm
|
||||
mT7Np5PBo81mzpbyhGTlOeZj6LLp77w8772MRBDZTn4eDXDuCdfbs2HMYFK4OQ2Q
|
||||
Qjrh2LSCA6VQgi8gGaXtp2k8CwVlXQpOFWmYX0FyXX/4qvkvXl8rG07TAvX7iCaG
|
||||
3owAYrDeQUL7NqbTvAMHiqivCwrFzThNq+XSkQIDAQABAoIBAQCqrwa0+elZi2lD
|
||||
PYyYBaZuDgKc1qol8rQJTIZatrZbsqvKFf5CG3ZZFFEugldeGRemp7KuJ7Cm6tKh
|
||||
MOJS31dfU9cofHYaEGtbAo4qqUqwB+ct9gSYHvs+w90yKwSqGJO5vaQjw6DYKUA3
|
||||
vQX++WuXJGK/RrQ8z07zY9HyqMLeBRcnZVvqRa/neowa3luBfl9bqbfZY4Sac1X/
|
||||
1HD2+ffE6Y3nnf3OD6PFeHfqBqIZuQebwIOj2myLSL6nyCoWJJQCinlRzOnH4Dkk
|
||||
Jb6kVwmAGoB/8qD84sKa5XlW+TqiH4HpRoxiGoHj2HeawTv2QAxsVfOV/s4pmjEO
|
||||
Sg710xGNAoGBANrqb8rFNiicndZX+agxCGhMvYLJqCOUC7cBEd3JOVYELiaopyTb
|
||||
LdbjTR8lwXK8JyJ+lagbi+sYyIHNc7KF8xnwd5DFpLaT0DwqqENcd83dUeqadnUf
|
||||
WgzHBcO030CP0JpaJEAtemK6rvq+U4xE+4XuFeXDsCOyCqA+Xw5qF3qbAoGBAM2T
|
||||
f87euZmqH97kGWaUmgXQWZT3IJzIqo9/UFE5eFIDnNwjaorla9eRSM+WyPStgOhR
|
||||
Q+zx/cv68vUJg08ESk5IwuEyGAdLiCW3Gsq7sIoaih18wWPor+0MQUSOtbKtnltj
|
||||
HwwhpXXVUK9rEPnUsrU6Jx1T6fe4BuxTe1xcf/RDAoGAcvia28B1MCEI2BB+IrIV
|
||||
u0lKYkzsTDstZ+Bc9MEApsctQcpjdfzSd0ALOeeHUG22k+wtRwuokUED1QAE2mZ1
|
||||
BVOAR/01A1pgC6lPk4kVtn2czvxuaBaeIYXI5j6w3WRqZxYeYcJAu2dWDIQ2tr1n
|
||||
56/hujjq4eRYpk37eEOJry8CgYBxSQ4OXvhicLi9aG+C8vLpr0YebAzhuUccaqlF
|
||||
CWl/sJP5T97/iavjECHSm6JEC3TVEStgYH5esPzAAa0FlzSnbTtPQ/6vznTJa9zs
|
||||
yX9gq31fAIfF2c1Q0QcKk6YXP8vbSoUqd0Qp6hJbiKHDOu38Jn61j6+IHjZadyqs
|
||||
3CB65wKBgH9PKZ2CZ86qCLwlZ3Uj/hFR9CQCsTuns/lbzjVszw057vny57kf6fma
|
||||
3+a0oV4pOyEkDip46ObgBaOQDdRt0XuUpUFVNuohmpxdkf0qoqPF6paqhDA5dRvi
|
||||
F90g0bTXJRO5hKpKMn7L9HAE54aXJWzFem2UgwYAfIuxyhEv6q8j
|
||||
-----END RSA PRIVATE KEY-----
|
||||
@@ -0,0 +1,16 @@
|
||||
module tldemo
|
||||
|
||||
go 1.19
|
||||
|
||||
require (
|
||||
google.golang.org/grpc v1.50.1
|
||||
google.golang.org/protobuf v1.28.1
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/golang/protobuf v1.5.2 // indirect
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974 // indirect
|
||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 // indirect
|
||||
golang.org/x/text v0.3.3 // indirect
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 // indirect
|
||||
)
|
||||
@@ -0,0 +1,83 @@
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
|
||||
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
|
||||
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
|
||||
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
|
||||
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
|
||||
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
|
||||
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
|
||||
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
|
||||
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
|
||||
github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk=
|
||||
github.com/golang/protobuf v1.5.2 h1:ROPKBNFfQgOUMifHyP+KYbvpjbdoFNs+aK7DXlji0Tw=
|
||||
github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY=
|
||||
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
|
||||
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
|
||||
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
|
||||
github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
|
||||
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
|
||||
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
|
||||
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
|
||||
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974 h1:IX6qOQeG5uLjB/hjjwjedwfjND0hgjPMMyO1RoIXQNI=
|
||||
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
|
||||
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
|
||||
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4 h1:myAQVi0cGEoqQVR5POX+8RR2mrocKqNN1hmeMqhX27k=
|
||||
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
|
||||
golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k=
|
||||
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=
|
||||
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
|
||||
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
|
||||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
|
||||
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
|
||||
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
|
||||
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013 h1:+kGHl1aib/qcwaRi1CbqBZ1rk19r85MNUf8HaBghugY=
|
||||
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
|
||||
google.golang.org/grpc v1.50.1 h1:DS/BukOZWp8s6p4Dt/tOaJaTQyPyOoCcrjroHuCeLzY=
|
||||
google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI=
|
||||
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
|
||||
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
|
||||
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
|
||||
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
|
||||
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
|
||||
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
|
||||
google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw=
|
||||
google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc=
|
||||
google.golang.org/protobuf v1.28.1 h1:d0NfwRgPtno5B1Wa6L2DAG+KivqkdutMf1UhdNx175w=
|
||||
google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I=
|
||||
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
|
||||
@@ -0,0 +1,59 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"flag"
|
||||
"log"
|
||||
"net"
|
||||
"os"
|
||||
|
||||
"google.golang.org/grpc"
|
||||
"google.golang.org/grpc/reflection"
|
||||
"google.golang.org/grpc/credentials"
|
||||
|
||||
"tldemo/services"
|
||||
)
|
||||
|
||||
var (
|
||||
port = flag.Int("port", 50051, "The server port")
|
||||
crt_file = "certs/server.crt"
|
||||
key_file = "certs/server.key"
|
||||
)
|
||||
|
||||
func main() {
|
||||
fmt.Println("==== TurboLink Test Server =====")
|
||||
|
||||
logFileName := "./log/services.log"
|
||||
logFile, err := os.OpenFile(logFileName, os.O_RDWR|os.O_CREATE|os.O_APPEND, 0766)
|
||||
if err != nil {
|
||||
log.Fatalf("could not load TLS keys: %s", err)
|
||||
return
|
||||
}
|
||||
log.SetOutput(logFile)
|
||||
log.SetFlags(log.LstdFlags | log.Lshortfile | log.Ltime)
|
||||
|
||||
flag.Parse()
|
||||
lis, err := net.Listen("tcp",":5050")
|
||||
|
||||
if err != nil {
|
||||
log.Fatalf("failed to listen: %v", err)
|
||||
}
|
||||
|
||||
// server-side tls
|
||||
// Create the TLS credentials
|
||||
creds, err := credentials.NewServerTLSFromFile(crt_file, key_file)
|
||||
if err != nil {
|
||||
log.Fatalf("could not load TLS keys: %s", err)
|
||||
}
|
||||
s := grpc.NewServer(grpc.Creds(creds))
|
||||
|
||||
//register all server
|
||||
services.RegisterGreeterServer(s)
|
||||
services.RegisterUserServer(s)
|
||||
|
||||
reflection.Register(s)
|
||||
log.Printf("server listening at %v", lis.Addr())
|
||||
if err := s.Serve(lis); err != nil {
|
||||
log.Fatalf("failed to serve: %v", err)
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,109 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"context"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"google.golang.org/grpc"
|
||||
pb "tldemo/services/Greeter"
|
||||
)
|
||||
|
||||
type GreeterServer struct {
|
||||
pb.UnimplementedGreeterServiceServer
|
||||
}
|
||||
|
||||
func (s *GreeterServer) Hello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloResponse, error) {
|
||||
currentTime := time.Now()
|
||||
replyMessage := fmt.Sprintf("Hello %s, time is %s", in.Name, currentTime.Format("15:04:05"))
|
||||
log.Printf("[Hello User] %s", in.Name)
|
||||
result := &pb.HelloResponse{ReplyMessage: replyMessage}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
type TimeServer struct {
|
||||
pb.UnimplementedTimeServiceServer
|
||||
}
|
||||
|
||||
func (s *TimeServer) Now(ctx context.Context, in *pb.Nothing) (*pb.NowResponse, error) {
|
||||
currentTime := uint64(time.Now().UTC().UnixMilli())
|
||||
log.Printf("[Now]send time: %d", currentTime)
|
||||
|
||||
result := &pb.NowResponse{Now: currentTime}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (s *TimeServer) Ticktok(in *pb.TicktokRequest, stream pb.TimeService_TicktokServer) error {
|
||||
ctx := stream.Context()
|
||||
response := &pb.NowResponse{}
|
||||
|
||||
sendNow := func(counts int32) {
|
||||
response.Now = uint64(time.Now().UTC().UnixMilli())
|
||||
response.Counts = counts
|
||||
log.Printf("[Ticktok]send time %d/%d", response.Now, counts)
|
||||
if err := stream.Send(response); err != nil {
|
||||
return
|
||||
}
|
||||
}
|
||||
counts := int32(in.Counts)
|
||||
if(counts < 0) {
|
||||
counts=0
|
||||
}
|
||||
|
||||
for {
|
||||
sendNow(counts)
|
||||
|
||||
if(in.Counts>0) {
|
||||
counts-=1
|
||||
|
||||
if(counts <= 0) {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return nil
|
||||
default:
|
||||
time.Sleep(1.0 * time.Second)
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *TimeServer) Watch(stream pb.TimeService_WatchServer) error {
|
||||
ctx := stream.Context()
|
||||
response := &pb.NowResponse{}
|
||||
|
||||
sendNow := func() error {
|
||||
response.Now = uint64(time.Now().UTC().UnixMilli())
|
||||
log.Printf("[Watch]send time %d", response.Now)
|
||||
return stream.Send(response)
|
||||
}
|
||||
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return nil
|
||||
default:
|
||||
}
|
||||
|
||||
if _, err := stream.Recv(); err != nil {
|
||||
return err
|
||||
} else if err := sendNow(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
func RegisterGreeterServer(s *grpc.Server) {
|
||||
greeterServer := &GreeterServer{}
|
||||
pb.RegisterGreeterServiceServer(s, greeterServer)
|
||||
|
||||
timeServer := &TimeServer{}
|
||||
pb.RegisterTimeServiceServer(s, timeServer)
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
package services
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"context"
|
||||
"log"
|
||||
"errors"
|
||||
|
||||
"google.golang.org/grpc"
|
||||
pb "tldemo/services/User"
|
||||
)
|
||||
|
||||
type UserAddress struct {
|
||||
Address string
|
||||
PostalCode string
|
||||
}
|
||||
|
||||
type UserData struct {
|
||||
Id int
|
||||
Name string
|
||||
Gender pb.GENDER_ENUM
|
||||
Addresses [] *UserAddress
|
||||
}
|
||||
|
||||
type UserServer struct {
|
||||
pb.UnimplementedUserServiceServer
|
||||
UserArray []*UserData
|
||||
}
|
||||
|
||||
func (s *UserServer) Register(ctx context.Context, in *pb.RegisterRequest) (*pb.RegisterResponse, error) {
|
||||
userData := &UserData{Id:len(s.UserArray), Name:in.Name, Gender:in.Gender}
|
||||
userData.Addresses = make([]*UserAddress, 0)
|
||||
for i:=0; i<len(in.Address); i++ {
|
||||
userData.Addresses = append(userData.Addresses, &UserAddress{Address : in.Address[i].Address, PostalCode: in.Address[i].PostalCode})
|
||||
}
|
||||
|
||||
s.UserArray = append(s.UserArray, userData)
|
||||
|
||||
replyMessage := fmt.Sprintf("Hello %s, Your Id is %v", userData.Name, userData.Id)
|
||||
log.Printf("[Register User] %s", replyMessage)
|
||||
result := &pb.RegisterResponse{Id: uint64(userData.Id), Msg: replyMessage}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func (s *UserServer) Query(ctx context.Context, in *pb.QueryRequest) (*pb.QueryResponse, error) {
|
||||
log.Printf("[Query User] %d", in.Id)
|
||||
|
||||
if(in.Id<0 || int(in.Id)>=len(s.UserArray)) {
|
||||
return nil, errors.New("Out of range!")
|
||||
}
|
||||
|
||||
var userData = s.UserArray[int(in.Id)]
|
||||
|
||||
address := make([]*pb.Address, 0)
|
||||
for i:=0; i<len(userData.Addresses); i++ {
|
||||
address = append(address, &pb.Address{ Address: userData.Addresses[i].Address, PostalCode: userData.Addresses[i].PostalCode})
|
||||
}
|
||||
//address[0] = &pb.Address{ Address: "xxxx", PostalCode: "1234"}
|
||||
|
||||
result := &pb.QueryResponse{
|
||||
Name: userData.Name,
|
||||
Gender: userData.Gender,
|
||||
Address : address,
|
||||
}
|
||||
return result, nil
|
||||
}
|
||||
|
||||
func RegisterUserServer(s *grpc.Server) {
|
||||
userServer := &UserServer{}
|
||||
userServer.UserArray = make([]*UserData, 0)
|
||||
|
||||
pb.RegisterUserServiceServer(s, userServer)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user