Initial commit

This commit is contained in:
2023-01-16 14:44:59 +08:00
parent 315bcda15f
commit 620e192d07
53 changed files with 2174 additions and 0 deletions
+21
View File
@@ -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-----
+21
View File
@@ -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-----
+27
View File
@@ -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-----
+16
View File
@@ -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
)
+83
View File
@@ -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=
+59
View File
@@ -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)
}
}
+109
View File
@@ -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)
}
+74
View File
@@ -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)
}