├── README.md ├── certs ├── ca.crt ├── ca.key ├── client.crt ├── client.csr ├── client.key ├── server.crt ├── server.csr └── server.key ├── client └── client.js ├── package.json ├── protos ├── blog.proto ├── calculator.proto ├── dummy.proto └── greet.proto ├── scripts └── gen_certs.sh └── server ├── db ├── migrations │ └── 20191105135658_blogs.js └── seeds │ └── blogs.js ├── index.js ├── knexfile.js └── protos ├── blog_grpc_pb.js ├── blog_pb.js ├── calculator_grpc_pb.js ├── calculator_pb.js ├── dummy_grpc_pb.js ├── dummy_pb.js ├── greet_grpc_pb.js └── greet_pb.js /README.md: -------------------------------------------------------------------------------- 1 | # grpc-node-course 2 | 3 | To get started, make sure to install the NPM dependencies: 4 | 5 | `$ npm install` 6 | -------------------------------------------------------------------------------- /certs/ca.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIFKjCCAxICCQCiTFptmvWqdjANBgkqhkiG9w0BAQsFADBXMQswCQYDVQQGEwJV 3 | UzELMAkGA1UECAwCV0ExEDAOBgNVBAcMB1NlYXR0bGUxDTALBgNVBAoMBFRlc3Qx 4 | DTALBgNVBAsMBFRlc3QxCzAJBgNVBAMMAmNhMB4XDTE5MTEwNDE3NTA1NloXDTIw 5 | MTEwMzE3NTA1NlowVzELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAldBMRAwDgYDVQQH 6 | DAdTZWF0dGxlMQ0wCwYDVQQKDARUZXN0MQ0wCwYDVQQLDARUZXN0MQswCQYDVQQD 7 | DAJjYTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAJitbnFD4UjIUjVV 8 | 6rl6cyYPy9WM60sP2TCxB6XAW0nc4na88Z2AndsDKIWzd4Z38vbaJjYwiQtYDqN0 9 | gVQX+QdCa3VuL4Vf0Tn6/QXPoclsGj8C6Q1HaHDIuz8rElVVMbUeEBfkPuQOd0KQ 10 | LmS1WE2YhtiEn1jsZoH/ZspiiqoJiVg6RIIiQ/wXdDKYeZGfIvvepAlYsWQKnnYK 11 | i1y6hIA7VIH7cpZb6GoRLLKrJUxYqsN0e26D1DSrv9bx6eQxiMy5xJQYAhmYsgHp 12 | FnBGVKjpGJ9XmAOYYUb2lojvTfcTZ0SovFxJYNSeMW9zERjUb8no6MCrf3SQmkje 13 | Bynvp+V0tI8pn1d80mbR9H1QU4EN3S4IGFcOv9U2k2j6odIZhbplgo6x8ATNUIly 14 | bw7DxW6zMbDbwFMdJ6JjyWZBeH2FB9i+VE/E7lYx50CLSRsjBqcB73QHqBimFOK3 15 | wACFihST4u2W2HujfzhH2glbVLlo8iWQ4ZMQad7ggfjm8+jfNjgYvdc4ZDN/gQFX 16 | hmV7U/XdZRsks2y+3tdJ+Ip2DNr+R0rGssWHcVbhO1+EUTqJDt932yvx/zm1EHCa 17 | yQg+KfrVmSgOIpFu8ve5cccf+FErKbenHmaawn+cXxvnVUQa2xO6Tv89+chPeP4K 18 | qofb8yE/RBi2FAIFwxL+H9Cd8srrAgMBAAEwDQYJKoZIhvcNAQELBQADggIBABr1 19 | +ovNz8JEIh1f9iiDUs849J3DWDxzz8OfvVLlPutVqtwMNZaMb3w9h/XnM00uFqsQ 20 | N+XepaxKzeD6tH4Ewu5W5alnL1Yeo4u9Z8DgQRNkHW8npJW7zXN2dIsC1lGTNYLv 21 | v+2GA+7nv35EnX7/Vj0PT+K/ByBECRHWpXKzoc3RXGvaU2cxCSpH5ew0PzafriSc 22 | gR0oui0teLTA5kNr97l6DO/NjdgUMndql5hyj22Pq4Y5hWx2FagCl3VhqtRkoB2Z 23 | E4EqW5YnYSFooCGOG3HzeQuNllPAx61taIQQcRMvYe97kOuk0zBYWT51zpOoPVE3 24 | 2vyMRHr723LugNdt5VqcliBoZOh3IM/PqhXop/6/qWR36xEzaNyyYc+ru8qIOXbl 25 | hlIwevkYm0Sm/U7Fr9r0gvA8W/AqtON5jroRmKc3+iZglwysB0dSFISRKS4v+VLF 26 | 1TfyjQQZQHCPBwfNbApw3C6Jk+XYA3fWb5dx5kMUueFZSvTWK76YpaYJpG3LzYme 27 | bmOpq49vUNN1klXdEyt/wTcPzFR3qOZPskaepglJ6rme8a3XwTXM6CK9x687dGe6 28 | 3pGUYXmKGG70lUcgprujZnH8newBPjhHl81S2egiTgl+5mOJ0KirCBdAPXhUfN/c 29 | USqkyMm0MQeUlCL3XNCjCpNCkfPfl+Li38W2ifdV 30 | -----END CERTIFICATE----- 31 | -------------------------------------------------------------------------------- /certs/ca.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | Proc-Type: 4,ENCRYPTED 3 | DEK-Info: DES-EDE3-CBC,DE38624B15B180B2 4 | 5 | 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 54 | -----END RSA PRIVATE KEY----- 55 | -------------------------------------------------------------------------------- /certs/client.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIFKzCCAxMCAQEwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCVVMxCzAJBgNV 3 | BAgMAldBMRAwDgYDVQQHDAdTZWF0dGxlMQ0wCwYDVQQKDARUZXN0MQ0wCwYDVQQL 4 | DARUZXN0MQswCQYDVQQDDAJjYTAeFw0xOTExMDQxNzUyNDdaFw0yMDExMDMxNzUy 5 | NDdaMGAxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJXQTEQMA4GA1UEBwwHU2VhdHRs 6 | ZTENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGQ2xpZW50MRIwEAYDVQQDDAlsb2Nh 7 | bGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCtKwN2gLCzXdK9 8 | elfwisDhhQT5VwslCl+HMGrocq2nr7SwgShGA/iW2awB2Py9xuzmoHWqmwxne9b3 9 | bLwg7hn9xZWOe53KLKjoEk3c4l8Jeuqd5qwaUzNqo4r/yRY450xVImIB6gaICwTS 10 | yQwGpuUyq+zJPTF3vio0EFN5CIcjl63xmrtMcPHHe159WL0gW8hdwk6e/2zWyQCE 11 | qZhc0Y3Dz9V/Ruqw+mO1D1xiuaeItuZ11y0Jcu0evxVb/ybwYixAdKVOaX3vQrPK 12 | foNM6jRWgJY9EfX8Lqi8PlV+CnOYbzQaVK9wBsgg8+PepwZHYAD/KoQF3Iw2Z48y 13 | tDXPZNxhmTWVWjIKKW6Wa8lDXUOLI8xmGqS8gSBBmo15IiN84LuuQTk8zPTd+dMy 14 | QjXtkKqYH2msKYl2r8+3EZ2Ou9hh8HPsVbgYUc5a9tXgzAbbhDVbavIqXW8V6Hi5 15 | 2Ddf+kb50dSjZjLlda1Bza4LKl8qt44NDrtK8fIEziZLjJSa7JGs4AgKfociWkVm 16 | Hqt4BPDYAUtGpElCZrlehiBce5juGT+HBAufAo2/dpI+P8RL46iEPILT615Xi8Se 17 | b1/6q4dmG+Ia/lf+PEjvgml2xJ5VSBpknhvZhpUK9CWO+f46ccnS4Wt6ra2dtLTD 18 | JrUvsKwr+EkAn4BZcK5kzBFS6vEEmwIDAQABMA0GCSqGSIb3DQEBBQUAA4ICAQCF 19 | ZOIJ8vngP65dmKE23tMvwRorhDGUgl54ULdzn7jsb4DNgH07ntsqMWPfnUBeQqNJ 20 | FZ5Gl3UUesqhTm2FGRuUljZ4dlse8UkauYiXJSdTnkmGpN/3fImTGlSLiuv5YW+e 21 | N63D5ozFqjH16C9pIFFaleMl2bx+oOGvrmyrqxyS+RAa5jfr0NFCJw73SxXnaeux 22 | jS/rLuL2mu1gtDWTwr5VmaonbC7tq2yKRtsco43DF3ZGdT3Cp+owkmiE/Je7ruPj 23 | PRBYM5aIqSCJC+8Fj3qRACHyNWDYjreYNBExkRMLsuzIBVmrIgVWpynx/d4n1IT1 24 | LQCinZ/Ts4mB+rfTqvRerbnfSa2e4iLJO8PG4JJseOpXLhnsGwnSEjax0frk34is 25 | Qe1TM1OQGJ7XNOC55Aa3xwuyQEg86Xxzn7GgIW43wVAgWaOLpSG/OxUdlxoAz/3X 26 | sBjdb4nysMBHcVyyvdeTqwDGb6L7G75IjHrmO8tvw3G3xl3nKWMVEVvuymoExuU2 27 | EzRzJzWmgwTp+IGaFvfGce3Wa0Zl330rn6tNeurXKxAkTNUK/IqLvFORF05sOnND 28 | KKv4kekXxC1Kye3bb9pp63YnQtipCact4rD9uvFxvupv/64ACQurLEVr2Hvl6Ot6 29 | xZWeh8zeKzSPKWfpBrrencpOoWKC/DDUjLlGH1ygFw== 30 | -----END CERTIFICATE----- 31 | -------------------------------------------------------------------------------- /certs/client.csr: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE REQUEST----- 2 | MIIEpTCCAo0CAQAwYDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAldBMRAwDgYDVQQH 3 | DAdTZWF0dGxlMQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZDbGllbnQxEjAQBgNV 4 | BAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK0r 5 | A3aAsLNd0r16V/CKwOGFBPlXCyUKX4cwauhyraevtLCBKEYD+JbZrAHY/L3G7Oag 6 | daqbDGd71vdsvCDuGf3FlY57ncosqOgSTdziXwl66p3mrBpTM2qjiv/JFjjnTFUi 7 | YgHqBogLBNLJDAam5TKr7Mk9MXe+KjQQU3kIhyOXrfGau0xw8cd7Xn1YvSBbyF3C 8 | Tp7/bNbJAISpmFzRjcPP1X9G6rD6Y7UPXGK5p4i25nXXLQly7R6/FVv/JvBiLEB0 9 | pU5pfe9Cs8p+g0zqNFaAlj0R9fwuqLw+VX4Kc5hvNBpUr3AGyCDz496nBkdgAP8q 10 | hAXcjDZnjzK0Nc9k3GGZNZVaMgopbpZryUNdQ4sjzGYapLyBIEGajXkiI3zgu65B 11 | OTzM9N350zJCNe2QqpgfaawpiXavz7cRnY672GHwc+xVuBhRzlr21eDMBtuENVtq 12 | 8ipdbxXoeLnYN1/6RvnR1KNmMuV1rUHNrgsqXyq3jg0Ou0rx8gTOJkuMlJrskazg 13 | CAp+hyJaRWYeq3gE8NgBS0akSUJmuV6GIFx7mO4ZP4cEC58Cjb92kj4/xEvjqIQ8 14 | gtPrXleLxJ5vX/qrh2Yb4hr+V/48SO+CaXbEnlVIGmSeG9mGlQr0JY75/jpxydLh 15 | a3qtrZ20tMMmtS+wrCv4SQCfgFlwrmTMEVLq8QSbAgMBAAGgADANBgkqhkiG9w0B 16 | AQsFAAOCAgEAe5A+gCvQDzmM88QWgl00NxB2/PgCnb7df2I0q1XxS816BPSzPRb9 17 | K0JaX3uK03q8DzdqUN1lR1Cjrk+qISAo+gGIGXnDndW6vMSrUWuOevmbumpKtARa 18 | nnmYYWZ02ywL4iKtjBwvUm51L10iqrkzo48hPEZ1Xjimr65fCycV3d1QutSJvstd 19 | FU62e4af6eCi5odxg0hWSqvnqvldq0mVCbjt2hqQr0KsMp/HY+OAcy3veVwW8m9o 20 | Z1MqM1wLLDUdUMOZH2Cd/adW3r35c68KOqsz/DqzNOA4Wpf3dcxWLgIiErktDvXw 21 | L1iITMc4moZ4UxWde6FLgrrIQmqLUKhg8cKh+Ml2qpurO8vtL6qdCloaCwy4RJHK 22 | e/t/LrQadQ+UHsdochFvCwVb6uYbOAsFTbPnWBaCjdv6lmwTbWvEjSx6DZ+S1kXx 23 | /vMFLmRf7jjHEUf0Ln8045msEfujm2t4wiW6vCvPOXeHeTsN2ytRTZr4Ohz4r7WX 24 | p0n9raIHNq6K24q0def9lyMCEAkWQuEEdNA972P3pCGFogG/OKmXR7ySAQvmU/ON 25 | 1T0erzK0NO+a0RoJBErtmH8IZdNyIgGQxwQ3DWF/JiEiDRJhSB52f1Vnqx/8g5Aq 26 | gf3Be8UDjNDaGPcO85VlpV+S4SGeFz9TzpRst8h4WaLZF1f+CxX29tc= 27 | -----END CERTIFICATE REQUEST----- 28 | -------------------------------------------------------------------------------- /certs/client.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | 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 51 | -----END RSA PRIVATE KEY----- 52 | -------------------------------------------------------------------------------- /certs/server.crt: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE----- 2 | MIIFKzCCAxMCAQEwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCVVMxCzAJBgNV 3 | BAgMAldBMRAwDgYDVQQHDAdTZWF0dGxlMQ0wCwYDVQQKDARUZXN0MQ0wCwYDVQQL 4 | DARUZXN0MQswCQYDVQQDDAJjYTAeFw0xOTExMDQxNzUxMzVaFw0yMDExMDMxNzUx 5 | MzVaMGAxCzAJBgNVBAYTAlVTMQswCQYDVQQIDAJXQTEQMA4GA1UEBwwHU2VhdHRs 6 | ZTENMAsGA1UECgwEVGVzdDEPMA0GA1UECwwGU2VydmVyMRIwEAYDVQQDDAlsb2Nh 7 | bGhvc3QwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDq2IdV18NKJ4H/ 8 | ss5TvVNGhQZBtvhOj9cGCBiQ0cbMUTHTOgofGy9MMnXr8er6KiPsFUlsKUGBHqZa 9 | uFeMfDWXi6BUnfU0E1WtjOjb5v2W7hhMEaqeJ257V+BtnAEzRYQLnzObFQk8zxVz 10 | dc7dgwXQLPrfX1gUTbmtX1Sdr8WjwXc9qgRdHJkSz4QgNBFBMjd1AsuQJuahH/bH 11 | oHF6t+DVZ1tLzqyiX2CCODu3kHfXKCStG27j2imvq3MRQHSxnIajZixkzJoE67TT 12 | 8BYfZGvoblz3GFK98GYwOTAhNNlmB3IV69FBioEQSLz0njuJD2vt3eZenGLG4b72 13 | p83LwaGg1acYW3RPkiqzkrRz6aZdDdYkKcsApQ7qf8mcO1sM/PF+DMPa/Jmjee84 14 | 8O9OcXH6m+8kxXyjzE+SP7KZnOU5vhIiMwZ3vCe7UXSvvQaXr2g5NreNiOdHpFCd 15 | YpeCedRoUFrauOtDR5DX34U5YkzsehmrsxI8H9stxfeHbCd+X8mixeg7Zl3gVUXu 16 | HAn+biZGwctkCit2PzQ4/NBKfaieFr3Z40kKXw/WVCWkJyxifh/3dIFKlJ8nwpFF 17 | YmIVU9Cp6ACYDYEUl+0Y5KyOhEyjVWIcbxXLyxSFskQ5a4fycSqtFrca/twT5Esu 18 | yYCG/nfIpP5kQ/BM8vLrH4TPqX/0xQIDAQABMA0GCSqGSIb3DQEBBQUAA4ICAQBb 19 | qT3+kAW7cQgi9Jb3LKUpZ59bBeUuuty6S149/WhRUH8JLJmvcMdac0ZKzDZGeiZ0 20 | i/42QfkhlO/lLwqThtYHBh6Jwqs3eMCt5o01aZ07kXlK0S9DzEdTOdqZ4OGxWwKC 21 | Lg2x6jFEXrOmqyVQrhxGKPZNhXHbBVzD5wQXDuEHEIsQxDHhkeOQglE6XGU54wt2 22 | P/5ZBhQn1/gtUUmbibqxDoATUWACcfU4ZDjV9fZY6QM87hVOxg/NBD/Jdyq2fz09 23 | NYQC9biVRixfi096yJaR6EwS82IFHTKHhipBYqAKQttsU6irJqwKhvlfCQWh2ynU 24 | AzbSXTfmCLH+vMZ8wZA3ocsINirbv9K+UCIRgBCI6rPaV0M23xXk7py8Dclb/Gno 25 | eGjo0nbA27lbZWhAX0HWpKynCMJ40Veica5NtJ11epS/v7HA+9Z4PkdLIdZWa9tV 26 | lJZ7MsjsdgPY4Mgl0aIPoOtbnLUoIukCbqbWKuG+3MJSqKmT1ttQIs0PWdLAbf14 27 | UTj/uXE7BKAeLhQ5oGgZFVh6kNe2r6R6X0Cessun2WmqfjAiafBM9jS8Uz0VzONS 28 | 6vAk5M1qmSJKFreBbVJtLsIJZIDY8ZcF2zPDVJ/1oPgiu19Kc9/BOziuzDxjIPU6 29 | KhpTiV/N//1dZHgvxZfIeQpYW1WKGgLbFzNhDl8sKQ== 30 | -----END CERTIFICATE----- 31 | -------------------------------------------------------------------------------- /certs/server.csr: -------------------------------------------------------------------------------- 1 | -----BEGIN CERTIFICATE REQUEST----- 2 | MIIEpTCCAo0CAQAwYDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAldBMRAwDgYDVQQH 3 | DAdTZWF0dGxlMQ0wCwYDVQQKDARUZXN0MQ8wDQYDVQQLDAZTZXJ2ZXIxEjAQBgNV 4 | BAMMCWxvY2FsaG9zdDCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAOrY 5 | h1XXw0ongf+yzlO9U0aFBkG2+E6P1wYIGJDRxsxRMdM6Ch8bL0wydevx6voqI+wV 6 | SWwpQYEeplq4V4x8NZeLoFSd9TQTVa2M6Nvm/ZbuGEwRqp4nbntX4G2cATNFhAuf 7 | M5sVCTzPFXN1zt2DBdAs+t9fWBRNua1fVJ2vxaPBdz2qBF0cmRLPhCA0EUEyN3UC 8 | y5Am5qEf9segcXq34NVnW0vOrKJfYII4O7eQd9coJK0bbuPaKa+rcxFAdLGchqNm 9 | LGTMmgTrtNPwFh9ka+huXPcYUr3wZjA5MCE02WYHchXr0UGKgRBIvPSeO4kPa+3d 10 | 5l6cYsbhvvanzcvBoaDVpxhbdE+SKrOStHPppl0N1iQpywClDup/yZw7Wwz88X4M 11 | w9r8maN57zjw705xcfqb7yTFfKPMT5I/spmc5Tm+EiIzBne8J7tRdK+9BpevaDk2 12 | t42I50ekUJ1il4J51GhQWtq460NHkNffhTliTOx6GauzEjwf2y3F94dsJ35fyaLF 13 | 6DtmXeBVRe4cCf5uJkbBy2QKK3Y/NDj80Ep9qJ4WvdnjSQpfD9ZUJaQnLGJ+H/d0 14 | gUqUnyfCkUViYhVT0KnoAJgNgRSX7RjkrI6ETKNVYhxvFcvLFIWyRDlrh/JxKq0W 15 | txr+3BPkSy7JgIb+d8ik/mRD8Ezy8usfhM+pf/TFAgMBAAGgADANBgkqhkiG9w0B 16 | AQsFAAOCAgEAUpT7rFC9GWo4LYLcUPu6cUjPa6UfseMqekaYq5bEL3cy9wo9DMiG 17 | 0d3DnZayjwlhJmwnx7sAy/J8JEUu5CMvJygRMs4POMQy+Rj8+R+4+cIN/7jOJE7V 18 | qPFXck8uEGUHYj3aqwUNanmaWTCvoBQ7GPuGC07/zxQB4MktDWuoQC+uXLc6OnAy 19 | K75UlQCHKRqzWCvUH7NNbEvXavuVo4DF0A0tXDSDul9n/uBDWHwggycG+KLZcEiF 20 | l39AXir4vEThwhxYnEx3RHVtubXr3tdzKT3UP1kXxSjeCZDHv5y5LthA9bDt+DQU 21 | OExOFxD6xRalK/ehmmWLQFro67A/2BfXvOi/Tyo6M1R23MrQSsQ9UgZyIrSYKuwO 22 | X/rgsJXQNGAJan4Z5QNJICUEIzD6tF1bnWmgSwVP0U/sNUnPt9MYeOlqHleMvB3Y 23 | 8Vm8DiRj+vOpEXmY3WvC5ABcMFibdlWpHvPbttgRY0EwT5MG9SfrXjncmVwCtIPY 24 | HhyfZyjOTBkpST9CBXd2vPornWxexNtztz5PMv9Jhfnq9Mj3Lg7rn5zmZuA2tjBs 25 | ZSxbrZajXFqlhnJdiDTQx7SqsaLwr6M8SEUsBSN3pGWpm3rp+kkjxv13YOFCIo+n 26 | JQE0+qOLBsVi94OaLCoMEZX4eio0D2L4tAeaWU+ncPJBW3ZccrzstI0= 27 | -----END CERTIFICATE REQUEST----- 28 | -------------------------------------------------------------------------------- /certs/server.key: -------------------------------------------------------------------------------- 1 | -----BEGIN RSA PRIVATE KEY----- 2 | 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 51 | -----END RSA PRIVATE KEY----- 52 | -------------------------------------------------------------------------------- /client/client.js: -------------------------------------------------------------------------------- 1 | var greets = require("../server/protos/greet_pb"); 2 | var service = require("../server/protos/greet_grpc_pb"); 3 | var calc = require("../server/protos/calculator_pb"); 4 | var calcService = require("../server/protos/calculator_grpc_pb"); 5 | 6 | var blogs = require("../server/protos/blog_pb"); 7 | var blogService = require("../server/protos/blog_grpc_pb"); 8 | 9 | var grpc = require("grpc"); 10 | 11 | let fs = require("fs"); 12 | 13 | let credentials = grpc.credentials.createSsl( 14 | fs.readFileSync("../certs/ca.crt"), 15 | fs.readFileSync("../certs/client.key"), 16 | fs.readFileSync("../certs/client.crt") 17 | ); 18 | 19 | let unsafCreds = grpc.credentials.createInsecure(); 20 | 21 | function callListBlogs() { 22 | var client = new blogService.BlogServiceClient("localhost:50051", unsafCreds); 23 | 24 | var emptyBlogRequest = new blogs.ListBlogRequest(); 25 | var call = client.listBlog(emptyBlogRequest, () => {}); 26 | 27 | call.on("data", response => { 28 | console.log("Client Streaming Response ", response.getBlog().toString()); 29 | }); 30 | 31 | call.on("error", error => { 32 | console.error(error); 33 | }); 34 | 35 | call.on("end", () => { 36 | console.log("End"); 37 | }); 38 | } 39 | 40 | function callCreateBlog() { 41 | var client = new blogService.BlogServiceClient("localhost:50051", unsafCreds); 42 | 43 | var blog = new blogs.Blog(); 44 | blog.setAuthor("Bond"); 45 | blog.setTitle("Bond.. blog post"); 46 | blog.setContent("This is okay..."); 47 | 48 | var blogRequest = new blogs.CreateBlogRequest(); 49 | blogRequest.setBlog(blog); 50 | 51 | client.createBlog(blogRequest, (error, response) => { 52 | if (!error) { 53 | console.log("Received create blog response,", response.toString()); 54 | } else { 55 | console.error(error); 56 | } 57 | }); 58 | } 59 | 60 | function callReadBlog() {} 61 | function callGreetings() { 62 | console.log("Hello From Client"); 63 | 64 | // Created our server client 65 | var client = new service.GreetServiceClient("localhost:50051", unsafCreds); 66 | 67 | // create our request 68 | var request = new greets.GreetRequest(); 69 | 70 | // created a protocol buffer greeting message 71 | var greeting = new greets.Greeting(); 72 | greeting.setFirstName("Jerry"); 73 | greeting.setLastName("Jerrrrrrryy"); 74 | 75 | request.setGreeting(greeting); 76 | 77 | client.greet(request, (error, response) => { 78 | if (!error) { 79 | console.log("Greeting Response: ", response.getResult()); 80 | } else { 81 | console.error(error); 82 | } 83 | }); 84 | } 85 | 86 | function callReadBlog() { 87 | var client = new blogService.BlogServiceClient("localhost:50051", unsafCreds); 88 | 89 | var readBlogRequest = new blogs.ReadBlogRequest(); 90 | readBlogRequest.setBlogId("6"); 91 | 92 | client.readBlog(readBlogRequest, (error, response) => { 93 | if (!error) { 94 | console.log("Found a blog ", response.toString()); 95 | } else { 96 | if (error.code === grpc.status.NOT_FOUND) { 97 | console.log("Not found"); 98 | } else { 99 | //do something else... 100 | } 101 | } 102 | }); 103 | } 104 | 105 | function callUpdateBlog() { 106 | var client = new blogService.BlogServiceClient("localhost:50051", unsafCreds); 107 | 108 | var updateBlogRequest = new blogs.UpdateBlogRequest(); 109 | 110 | var newBlog = new blogs.Blog(); 111 | 112 | newBlog.setId("10"); 113 | newBlog.setAuthor("James Bond now"); 114 | newBlog.setTitle("Hello Up to date"); 115 | newBlog.setContent("This is great, again!"); 116 | 117 | updateBlogRequest.setBlog(newBlog); 118 | 119 | console.log("Blog...", newBlog.toString()); 120 | 121 | client.updateBlog(updateBlogRequest, (error, response) => { 122 | if (!error) { 123 | } else { 124 | if (error.code === grpc.status.NOT_FOUND) { 125 | console.log("NOt found"); 126 | } else { 127 | ///do more... 128 | } 129 | } 130 | }); 131 | } 132 | 133 | function callDeleteBlog() { 134 | var client = new blogService.BlogServiceClient("localhost:50051", unsafCreds); 135 | 136 | var deleteBlogRequest = new blogs.DeleteBlogRequest(); 137 | var blogId = "7"; 138 | 139 | deleteBlogRequest.setBlogId(blogId); 140 | 141 | client.deleteBlog(deleteBlogRequest, (error, response) => { 142 | if (!error) { 143 | console.log("Deleted blog with id: ", response.toString()); 144 | } else { 145 | if (error.code === grpc.status.NOT_FOUND) { 146 | console.log("Not Found"); 147 | } else { 148 | console.log("Sorry something went wrong"); 149 | } 150 | } 151 | }); 152 | } 153 | function callSum() { 154 | var client = new calcService.CalculatorServiceClient( 155 | "localhost:50051", 156 | grpc.credentials.createInsecure() 157 | ); 158 | 159 | var sumRequest = new calc.SumRequest(); 160 | 161 | sumRequest.setFirstNumber(10); 162 | sumRequest.setSecondNumber(15); 163 | 164 | client.sum(sumRequest, (error, response) => { 165 | if (!error) { 166 | console.log( 167 | sumRequest.getFirstNumber() + 168 | " + " + 169 | sumRequest.getSecondNumber() + 170 | " = " + 171 | response.getSumResult() 172 | ); 173 | } else { 174 | console.error(error); 175 | } 176 | }); 177 | } 178 | 179 | function callPrimeNumberDecomposition() { 180 | var client = new calcService.CalculatorServiceClient( 181 | "localhost:50051", 182 | grpc.credentials.createInsecure() 183 | ); 184 | 185 | var request = new calc.PrimeNumberDecompositionRequest(); 186 | 187 | var number = 12; //567890 188 | 189 | request.setNumber(number); 190 | 191 | var call = client.primeNumberDecomposition(request, () => {}); 192 | 193 | call.on("data", response => { 194 | console.log("Prime Factors Found: ", response.getPrimeFactor()); 195 | }); 196 | 197 | call.on("error", error => { 198 | console.error(error); 199 | }); 200 | 201 | call.on("status", status => { 202 | console.log(status); 203 | }); 204 | 205 | call.on("end", () => { 206 | console.log("Streaming Ended!"); 207 | }); 208 | } 209 | 210 | function callGreetManyTimes() { 211 | // Created our server client 212 | var client = new service.GreetServiceClient( 213 | "localhost:50051", 214 | grpc.credentials.createInsecure() 215 | ); 216 | 217 | // create request 218 | 219 | var request = new greets.GreetManyTimesRequest(); 220 | 221 | var greeting = new greets.Greeting(); 222 | greeting.setFirstName("Paulo"); 223 | greeting.setLastName("Dichone"); 224 | 225 | request.setGreeting(greeting); 226 | 227 | var call = client.greetManyTimes(request, () => {}); 228 | 229 | call.on("data", response => { 230 | console.log("Client Streaming Response: ", response.getResult()); 231 | }); 232 | 233 | call.on("status", status => { 234 | console.log(status.details); 235 | }); 236 | 237 | call.on("error", error => { 238 | console.error(error.details); 239 | }); 240 | 241 | call.on("end", () => { 242 | console.log("Streaming Ended!"); 243 | }); 244 | } 245 | 246 | function callComputeAverage() { 247 | var client = new calcService.CalculatorServiceClient( 248 | "localhost:50051", 249 | grpc.credentials.createInsecure() 250 | ); 251 | 252 | var request = new calc.ComputeAverageRequest(); 253 | 254 | var call = client.computeAverage(request, (error, response) => { 255 | if (!error) { 256 | console.log( 257 | "Received a response from the server - Average: " + 258 | response.getAverage() 259 | ); 260 | } else { 261 | console.error(error); 262 | } 263 | }); 264 | 265 | var request = new calc.ComputeAverageRequest(); 266 | // request.setNumber(1) 267 | 268 | for (var i = 0; i < 1000000; i++) { 269 | var request = new calc.ComputeAverageRequest(); 270 | request.setNumber(i); 271 | call.write(request); 272 | } 273 | 274 | call.end(); 275 | 276 | // var requestTwo = new calc.ComputeAverageRequest() 277 | // requestTwo.setNumber(2) 278 | 279 | // var requestThree = new calc.ComputeAverageRequest() 280 | // requestThree.setNumber(3) 281 | 282 | // var requestFour = new calc.ComputeAverageRequest() 283 | // requestFour.setNumber(4) 284 | 285 | // average should be 2.5 286 | 287 | // call.write(request) 288 | // call.write(requestTwo) 289 | // call.write(requestThree) 290 | // call.write(requestFour) 291 | 292 | // call.end() // we are done sending messages 293 | } 294 | 295 | function callLongGreeting() { 296 | // Created our server client 297 | var client = new service.GreetServiceClient( 298 | "localhost:50051", 299 | grpc.credentials.createInsecure() 300 | ); 301 | 302 | var request = new greets.LongGreetRequest(); 303 | 304 | var call = client.longGreet(request, (error, response) => { 305 | if (!error) { 306 | console.log("Server Response: ", response.getResult()); 307 | } else { 308 | console.error(error); 309 | } 310 | }); 311 | 312 | let count = 0, 313 | intervalID = setInterval(function() { 314 | console.log("Sending message " + count); 315 | 316 | var request = new greets.LongGreetRequest(); 317 | var greeting = new greets.Greeting(); 318 | greeting.setFirstName("Paulo"); 319 | greeting.setLastName("Dichone"); 320 | 321 | request.setGreet(greeting); 322 | 323 | var requestTwo = new greets.LongGreetRequest(); 324 | var greetingTwo = new greets.Greeting(); 325 | greetingTwo.setFirstName("Stephane"); 326 | greetingTwo.setLastName("Maarek"); 327 | 328 | requestTwo.setGreet(greetingTwo); 329 | 330 | call.write(request); 331 | call.write(requestTwo); 332 | 333 | if (++count > 3) { 334 | clearInterval(intervalID); 335 | call.end(); //we have sent all the messages! 336 | } 337 | }, 1000); 338 | } 339 | 340 | async function sleep(interval) { 341 | return new Promise(resolve => { 342 | setTimeout(() => resolve(), interval); 343 | }); 344 | } 345 | 346 | async function callBiDiFindMaximum() { 347 | // Created our server client 348 | console.log("hello I'm a gRPC Client"); 349 | 350 | var client = new calcService.CalculatorServiceClient( 351 | "localhost:50051", 352 | grpc.credentials.createInsecure() 353 | ); 354 | 355 | var call = client.findMaximum(request, (error, response) => {}); 356 | 357 | call.on("data", response => { 358 | console.log("Got new Max from Server => " + response.getMaximum()); 359 | }); 360 | call.on("error", error => { 361 | console.error(error); 362 | }); 363 | 364 | call.on("end", () => { 365 | console.log("Server is completed sending messages"); 366 | }); 367 | 368 | // data 369 | let data = [3, 5, 17, 9, 8, 30, 12, 345, 129, 0]; 370 | for (var i = 0; i < data.length; i++) { 371 | var request = new calc.FindMaximumRequest(); 372 | console.log("Sending number: " + data[i]); 373 | 374 | request.setNumber(data[i]); 375 | call.write(request); 376 | await sleep(1000); 377 | } 378 | call.end(); // we are done sending messages 379 | } 380 | 381 | async function callBiDirect() { 382 | // Created our server client 383 | console.log("hello I'm a gRPC Client"); 384 | 385 | var client = new service.GreetServiceClient( 386 | "localhost:50051", 387 | grpc.credentials.createInsecure() 388 | ); 389 | 390 | var call = client.greetEveryone(request, (error, response) => { 391 | console.log("Server Response: " + response); 392 | }); 393 | 394 | call.on("data", response => { 395 | console.log("Hello Client!" + response.getResult()); 396 | }); 397 | 398 | call.on("error", error => { 399 | console.error(error); 400 | }); 401 | 402 | call.on("end", () => { 403 | console.log("Client The End"); 404 | }); 405 | 406 | for (var i = 0; i < 10; i++) { 407 | var greeting = new greets.Greeting(); 408 | greeting.setFirstName("Stephane"); 409 | greeting.setLastName("Maarek"); 410 | 411 | var request = new greets.GreetEveryoneRequest(); 412 | request.setGreet(greeting); 413 | 414 | call.write(request); 415 | 416 | await sleep(1500); 417 | } 418 | 419 | call.end(); 420 | } 421 | 422 | function getRPCDeadline(rpcType) { 423 | timeAllowed = 5000; 424 | 425 | switch (rpcType) { 426 | case 1: 427 | timeAllowed = 10; 428 | break; 429 | 430 | case 2: 431 | timeAllowed = 7000; 432 | break; 433 | 434 | default: 435 | console.log("Invalid RPC Type: Using Default Timeout"); 436 | } 437 | 438 | return new Date(Date.now() + timeAllowed); 439 | } 440 | 441 | function doErrorCall() { 442 | var deadline = getRPCDeadline(1); 443 | 444 | // Created our server client 445 | console.log("hello I'm a gRPC Client"); 446 | 447 | var client = new calcService.CalculatorServiceClient( 448 | "localhost:50051", 449 | grpc.credentials.createInsecure() 450 | ); 451 | 452 | var number = -1; 453 | var squareRootRequest = new calc.SquareRootRequest(); 454 | squareRootRequest.setNumber(number); 455 | 456 | client.squareRoot( 457 | squareRootRequest, 458 | { deadline: deadline }, 459 | (error, response) => { 460 | if (!error) { 461 | console.log("Square root is ", response.getNumberRoot()); 462 | } else { 463 | console.log(error.message); 464 | } 465 | } 466 | ); 467 | } 468 | 469 | function main() { 470 | callDeleteBlog(); 471 | callUpdateBlog(); 472 | callReadBlog(); 473 | callCreateBlog(); 474 | callListBlogs(); 475 | doErrorCall(); 476 | callBiDiFindMaximum(); 477 | callBiDirect(); 478 | callComputeAverage(); 479 | callLongGreeting(); 480 | callPrimeNumberDecomposition(); 481 | callGreetManyTimes(); 482 | callGreetings(); 483 | callSum(); 484 | } 485 | main(); 486 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "grpc-node-course", 3 | "version": "1.0.0", 4 | "description": "course", 5 | "main": "index.js", 6 | "scripts": { 7 | "start": "node index.js", 8 | "gen:certs": "./scripts/gen_certs.sh", 9 | "develop": "SERVER_PORT=50051 node index" 10 | }, 11 | "author": "pdichone", 12 | "license": "ISC", 13 | "dependencies": { 14 | "google-protobuf": "^3.10.0", 15 | "grpc": "^1.24.1", 16 | "knex": "^0.20.1", 17 | "pg": "^7.12.1" 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /protos/blog.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package blog; 4 | 5 | service BlogService { 6 | // All our API's 7 | 8 | rpc DeleteBlog (DeleteBlogRequest) returns (DeleteBlogResponse) {}; 9 | rpc UpdateBlog (UpdateBlogRequest) returns (UpdateBlogResponse){}; 10 | rpc ReadBlog (ReadBlogRequest) returns (ReadBlogResponse){}; 11 | rpc CreateBlog (CreateBlogRequest) returns (CreateBlogResponse){}; 12 | rpc ListBlog (ListBlogRequest) returns (stream ListBlogResponse) {}; 13 | 14 | } 15 | 16 | 17 | 18 | message DeleteBlogRequest { 19 | string blog_id = 1; 20 | } 21 | 22 | message DeleteBlogResponse { 23 | string blog_id = 1; 24 | } 25 | message UpdateBlogRequest { 26 | Blog blog = 1; 27 | 28 | } 29 | 30 | message UpdateBlogResponse { 31 | Blog blog = 1; 32 | 33 | } 34 | 35 | message ReadBlogRequest { 36 | string blog_id = 1; 37 | } 38 | 39 | message ReadBlogResponse { 40 | Blog blog = 1; 41 | } 42 | message CreateBlogRequest { 43 | Blog blog = 1; 44 | } 45 | 46 | message CreateBlogResponse { 47 | Blog blog = 1; 48 | } 49 | message Blog { 50 | string id = 1; 51 | string author = 2; 52 | string title = 3; 53 | string content = 4; 54 | } 55 | message ListBlogRequest {} 56 | 57 | message ListBlogResponse{ 58 | Blog blog = 1; 59 | } -------------------------------------------------------------------------------- /protos/calculator.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package calculator; 4 | 5 | 6 | 7 | service CalculatorService { 8 | //Unary API 9 | rpc Sum (SumRequest) returns (SumResponse) {}; 10 | 11 | // Streaming API 12 | rpc PrimeNumberDecomposition (PrimeNumberDecompositionRequest) returns ( stream PrimeNumberDecompositionResponse) {}; 13 | 14 | rpc ComputeAverage (stream ComputeAverageRequest) returns (ComputeAverageResponse){}; 15 | 16 | rpc FindMaximum (stream FindMaximumRequest) returns (stream FindMaximumResponse); 17 | 18 | // error handling 19 | // this RPC wil throw an exception if the sent number is negative: -1 20 | rpc SquareRoot (SquareRootRequest) returns (SquareRootResponse) {}; 21 | 22 | } 23 | 24 | message SquareRootRequest { 25 | int32 number= 1; 26 | } 27 | message SquareRootResponse { 28 | double number_root = 1; 29 | } 30 | 31 | message FindMaximumRequest { 32 | int32 number = 1; 33 | } 34 | 35 | message FindMaximumResponse { 36 | int32 maximum = 1; 37 | } 38 | 39 | message ComputeAverageResponse { 40 | double average = 1; 41 | } 42 | message ComputeAverageRequest { 43 | int32 number = 1; 44 | } 45 | 46 | 47 | 48 | message PrimeNumberDecompositionRequest { 49 | int32 number = 1; 50 | } 51 | 52 | message PrimeNumberDecompositionResponse { 53 | int32 prime_factor = 1; 54 | } 55 | 56 | message SumRequest { 57 | int32 first_number = 1; 58 | int32 second_number = 2; 59 | 60 | } 61 | 62 | message SumResponse { 63 | int32 sum_result = 1; 64 | } -------------------------------------------------------------------------------- /protos/dummy.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package dummy; 4 | 5 | 6 | message DummyMessage{} 7 | 8 | service DummyService{} 9 | -------------------------------------------------------------------------------- /protos/greet.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | package greet; 4 | 5 | 6 | service GreetService { 7 | 8 | //unary API 9 | rpc Greet (GreetRequest) returns (GreetResponse) {}; 10 | 11 | //Server streaming API 12 | rpc GreetManyTimes (GreetManyTimesRequest) returns ( stream GreetManyTimesResponse) {}; 13 | 14 | // Client Streaming 15 | rpc LongGreet (stream LongGreetRequest) returns (LongGreetResponse) {}; 16 | 17 | // BiDi Streaming 18 | rpc GreetEveryone (stream GreetEveryoneRequest) returns ( stream GreetEveryoneResponse) {}; 19 | 20 | 21 | } 22 | 23 | 24 | message GreetEveryoneRequest { 25 | Greeting greet = 1; 26 | } 27 | 28 | message GreetEveryoneResponse { 29 | string result = 1; 30 | } 31 | message LongGreetRequest { 32 | Greeting greet = 1; 33 | } 34 | 35 | message LongGreetResponse { 36 | string result = 1; 37 | } 38 | 39 | message GreetManyTimesRequest { 40 | Greeting greeting = 1; 41 | } 42 | 43 | message GreetManyTimesResponse { 44 | string result = 1; 45 | } 46 | 47 | 48 | message Greeting { 49 | string first_name = 1; 50 | string last_name = 2; 51 | } 52 | 53 | message GreetRequest { 54 | Greeting greeting = 1; 55 | } 56 | 57 | message GreetResponse { 58 | string result = 1; 59 | } -------------------------------------------------------------------------------- /scripts/gen_certs.sh: -------------------------------------------------------------------------------- 1 | 2 | #Inspired from: https://github.com/gbahamondezc/node-grpc-ssl/blob/master/scripts/gen_certs.sh 3 | # Output files 4 | # ca.key: Certificate Authority private key file (this shouldn't be shared in real-life) 5 | # ca.crt: Certificate Authority trust certificate (this should be shared with users in real-life) 6 | # server.key: Server private key, password protected (this shouldn't be shared) 7 | # server.csr: Server certificate signing request (this should be shared with the CA owner) 8 | # server.crt: Server certificate signed by the CA (this would be sent back by the CA owner) - keep on server 9 | # Summary 10 | # Private files: ca.key, server.key, server.pem (We don't need this, in our case), server.crt 11 | # "Share" files: ca.crt (needed by the client), server.csr (needed by the CA) 12 | 13 | echo "Creating certs folder ..." 14 | mkdir certs && cd certs 15 | 16 | echo "Generating certificates ..." 17 | 18 | openssl genrsa -passout pass:1111 -des3 -out ca.key 4096 19 | 20 | openssl req -passin pass:1111 -new -x509 -days 365 -key ca.key -out ca.crt -subj "/C=US/ST=WA/L=Seattle/O=Test/OU=Test/CN=ca" 21 | 22 | openssl genrsa -passout pass:1111 -des3 -out server.key 4096 23 | 24 | openssl req -passin pass:1111 -new -key server.key -out server.csr -subj "/C=US/ST=WA/L=Seattle/O=Test/OU=Server/CN=localhost" 25 | 26 | openssl x509 -req -passin pass:1111 -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt 27 | 28 | openssl rsa -passin pass:1111 -in server.key -out server.key 29 | 30 | openssl genrsa -passout pass:1111 -des3 -out client.key 4096 31 | 32 | openssl req -passin pass:1111 -new -key client.key -out client.csr -subj "/C=US/ST=WA/L=Seattle/O=Test/OU=Client/CN=localhost" 33 | 34 | openssl x509 -passin pass:1111 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt 35 | 36 | openssl rsa -passin pass:1111 -in client.key -out client.key -------------------------------------------------------------------------------- /server/db/migrations/20191105135658_blogs.js: -------------------------------------------------------------------------------- 1 | 2 | exports.up = function(knex, Promise) { 3 | return knex.schema.createTable('blogs', function(table) { 4 | table.increments(); 5 | table.string('author').notNullable() 6 | table.string('title').notNullable() 7 | table.string('content').notNullable() 8 | }) 9 | 10 | 11 | }; 12 | 13 | exports.down = function(knex, Promise) { 14 | return knex.schema.dropTable('blogs') 15 | 16 | }; 17 | -------------------------------------------------------------------------------- /server/db/seeds/blogs.js: -------------------------------------------------------------------------------- 1 | 2 | exports.seed = function(knex) { 3 | // Deletes ALL existing entries 4 | return knex('blogs').del() 5 | .then(function () { 6 | // Inserts seed entries 7 | return knex('blogs').insert([ 8 | {author: 'Stephane', title: 'Stephs Blog Title', content: 'Fist blog'}, 9 | {author: 'Paulo', title: 'Paulos blog title', content: 'First blog'}, 10 | {author: 'James', title: 'James blog title', content: 'first Blog'} 11 | ]); 12 | }); 13 | }; 14 | -------------------------------------------------------------------------------- /server/index.js: -------------------------------------------------------------------------------- 1 | var greets = require("../server/protos/greet_pb"); 2 | var service = require("../server/protos/greet_grpc_pb"); 3 | 4 | var calc = require("../server/protos/calculator_pb"); 5 | var calcService = require("../server/protos/calculator_grpc_pb"); 6 | 7 | var blogs = require("../server/protos/blog_pb"); 8 | var blogService = require("../server/protos/blog_grpc_pb"); 9 | 10 | const fs = require("fs"); 11 | 12 | var grpc = require("grpc"); 13 | 14 | //Knex requires 15 | const environment = process.env.ENVIRONMENT || "development"; 16 | const config = require("./knexfile")[environment]; 17 | const knex = require("knex")(config); 18 | 19 | /* 20 | Implements the greet RPC method. 21 | */ 22 | 23 | /* 24 | Blog CRUD 25 | */ 26 | 27 | function listBlog(call, callback) { 28 | console.log("Received list blog request"); 29 | knex("blogs").then(data => { 30 | data.forEach(element => { 31 | var blog = new blogs.Blog(); 32 | blog.setId(element.id); 33 | blog.setAuthor(element.author); 34 | blog.setTitle(element.title); 35 | blog.setContent(element.content); 36 | 37 | // console.log('Blogs ', blog.toString()); 38 | 39 | var blogResponse = new blogs.ListBlogResponse(); 40 | blogResponse.setBlog(blog); 41 | 42 | //write to the stream 43 | call.write(blogResponse); 44 | }); 45 | call.end(); // we are done writing!! 46 | }); 47 | } 48 | 49 | function createBlog(call, callback) { 50 | console.log("Received Create Blog Request"); 51 | 52 | var blog = call.request.getBlog(); 53 | 54 | console.log("Inserting a Blog..."); 55 | 56 | knex("blogs") 57 | .insert({ 58 | author: blog.getAuthor(), 59 | title: blog.getTitle(), 60 | content: blog.getContent() 61 | }) 62 | .then(() => { 63 | var id = blog.getId(); 64 | 65 | var addedBlog = new blogs.Blog(); 66 | 67 | //set the blog response to be returned 68 | addedBlog.setId(id); 69 | addedBlog.setAuthor(blog.getAuthor()); 70 | addedBlog.setTitle(blog.getTitle()); 71 | addedBlog.setContent(blog.getContent()); 72 | 73 | var blogResponse = new blogs.CreateBlogResponse(); 74 | 75 | blogResponse.setBlog(addedBlog); 76 | 77 | console.log("Inserted Blog with ID: ", addedBlog.getId()); 78 | 79 | callback(null, blogResponse); 80 | }); 81 | } 82 | 83 | function readBlog(call, callback) { 84 | console.log("Received Blog request"); 85 | 86 | // get id 87 | var blogId = call.request.getBlogId(); 88 | 89 | knex("blogs") 90 | .where({ id: parseInt(blogId) }) 91 | .then(data => { 92 | console.log("Searching for a blog..."); 93 | 94 | if (data.length) { 95 | var blog = new blogs.Blog(); 96 | 97 | console.log("Blog found and sending message"); 98 | 99 | //set the blog response to be returned 100 | blog.setId(blogId); 101 | blog.setAuthor(data[0].author); 102 | blog.setTitle(data[0].title); 103 | blog.setContent(data[0].content); 104 | 105 | var blogResponse = new blogs.ReadBlogResponse(); 106 | blogResponse.setBlog(blog); 107 | 108 | callback(null, blogResponse); 109 | } else { 110 | console.log("Blog not found"); 111 | return callback({ 112 | code: grpc.status.NOT_FOUND, 113 | message: "Blog Not found!" 114 | }); 115 | } 116 | }); 117 | } 118 | 119 | function updateBlog(call, callback) { 120 | console.log("Received updated Blog Request"); 121 | 122 | var blogId = call.request.getBlog().getId(); 123 | 124 | console.log("Searching for a blog to update...."); 125 | 126 | knex("blogs") 127 | .where({ id: parseInt(blogId) }) 128 | .update({ 129 | author: call.request.getBlog().getAuthor(), 130 | title: call.request.getBlog().getTitle(), 131 | content: call.request.getBlog().getContent() 132 | }) 133 | .returning() 134 | .then(data => { 135 | if (data) { 136 | var blog = new blogs.Blog(); 137 | 138 | console.log("Blog found sending message..."); 139 | 140 | //set the blog response 141 | blog.setId(blogId); 142 | blog.setAuthor(data.author); 143 | blog.setTitle(data.title); 144 | blog.setContent(data.content); 145 | 146 | var updateBlogResponse = new blogs.UpdateBlogResponse(); 147 | updateBlogResponse.setBlog(blog); 148 | 149 | console.log("Updated ===", updateBlogResponse.getBlog().getId()); 150 | 151 | callback(null, updateBlogResponse); 152 | } else { 153 | return callback({ 154 | code: grpc.status.NOT_FOUND, 155 | message: "Blog with the corresponding id was not found" 156 | }); 157 | } 158 | }); 159 | } 160 | 161 | function deleteBlog(call, callback) { 162 | console.log("Received Delete Blog request"); 163 | 164 | var blogId = call.request.getBlogId(); 165 | 166 | knex("blogs") 167 | .where({ id: parseInt(blogId) }) 168 | .delete() 169 | .returning() 170 | .then(data => { 171 | console.log("Blog deleting..."); 172 | 173 | if (data) { 174 | var deleteResponse = new blogs.DeleteBlogResponse(); 175 | deleteResponse.setBlogId(blogId); 176 | 177 | console.log( 178 | "Blog request is now deleted with id: ", 179 | deleteResponse.toString() 180 | ); 181 | 182 | callback(null, deleteResponse); 183 | } else { 184 | console.log("Nope...."); 185 | 186 | return callback({ 187 | code: grpc.status.NOT_FOUND, 188 | message: "Blog with the corresponding id was not found" 189 | }); 190 | } 191 | }); 192 | } 193 | function sum(call, callback) { 194 | var sumResponse = new calc.SumResponse(); 195 | 196 | sumResponse.setSumResult( 197 | call.request.getFirstNumber() + call.request.getSecondNumber() 198 | ); 199 | 200 | callback(null, sumResponse); 201 | } 202 | 203 | function greetManyTimes(call, callback) { 204 | var firstName = call.request.getGreeting().getFirstName(); 205 | 206 | let count = 0, 207 | intervalID = setInterval(function() { 208 | var greetManyTimesResponse = new greets.GreetManyTimesResponse(); 209 | greetManyTimesResponse.setResult(firstName); 210 | 211 | // setup streaming 212 | call.write(greetManyTimesResponse); 213 | if (++count > 9) { 214 | clearInterval(intervalID); 215 | call.end(); // we have sent all messages! 216 | } 217 | }, 1000); 218 | } 219 | 220 | //primeFactor - 221 | function primeNumberDecomposition(call, callback) { 222 | var number = call.request.getNumber(); 223 | var divisor = 2; 224 | 225 | console.log("Received number: ", number); 226 | 227 | while (number > 1) { 228 | if (number % divisor === 0) { 229 | var primeNumberDecompositionResponse = new calc.PrimeNumberDecompositionResponse(); 230 | 231 | primeNumberDecompositionResponse.setPrimeFactor(divisor); 232 | 233 | number = number / divisor; 234 | 235 | //write the message using call.write() 236 | call.write(primeNumberDecompositionResponse); 237 | } else { 238 | divisor++; 239 | console.log("Divisor has increased to ", divisor); 240 | } 241 | } 242 | 243 | call.end(); // all messages sent! we are done 244 | } 245 | 246 | function longGreet(call, callback) { 247 | call.on("data", request => { 248 | var fullName = 249 | request.getGreet().getFirstName() + 250 | " " + 251 | request.getGreet().getLastName(); 252 | 253 | console.log("Hello " + fullName); 254 | }); 255 | 256 | call.on("error", error => { 257 | console.error(error); 258 | }); 259 | 260 | call.on("end", () => { 261 | var response = new greets.LongGreetResponse(); 262 | response.setResult("Long Greet Client Streaming....."); 263 | 264 | callback(null, response); 265 | }); 266 | } 267 | 268 | function computeAverage(call, callback) { 269 | // running sum and count 270 | var sum = 0; 271 | var count = 0; 272 | 273 | call.on("data", request => { 274 | // increment sum 275 | sum += request.getNumber(); 276 | 277 | console.log("Got number: " + request.getNumber()); 278 | 279 | // increment count 280 | count += 1; 281 | }); 282 | call.on("error", error => { 283 | console.log(error); 284 | }); 285 | 286 | call.on("end", () => { 287 | // compute the actual average 288 | 289 | var average = sum / count; 290 | 291 | var response = new calc.ComputeAverageResponse(); 292 | response.setAverage(average); 293 | 294 | callback(null, response); 295 | }); 296 | } 297 | async function sleep(interval) { 298 | return new Promise(resolve => { 299 | setTimeout(() => resolve(), interval); 300 | }); 301 | } 302 | 303 | // - FindMaximum - Solution 304 | function findMaximum(call, callback) { 305 | var currentMaximum = 0; 306 | var currentNumber = 0; 307 | 308 | call.on("data", request => { 309 | currentNumber = request.getNumber(); 310 | 311 | if (currentNumber > currentMaximum) { 312 | currentMaximum = currentNumber; 313 | 314 | var response = new calc.FindMaximumResponse(); 315 | response.setMaximum(currentMaximum); 316 | 317 | call.write(response); 318 | } else { 319 | //do nothing 320 | } 321 | 322 | console.log("Streamed number: ", request.getNumber()); 323 | }); 324 | 325 | call.on("error", error => { 326 | console.error(error); 327 | }); 328 | 329 | call.on("end", () => { 330 | var response = new calc.FindMaximumResponse(); 331 | response.setMaximum(currentMaximum); 332 | 333 | call.write(response); 334 | 335 | call.end(); 336 | console.log("The end!"); 337 | }); 338 | } 339 | async function greetEveryone(call, callback) { 340 | call.on("data", response => { 341 | var fullName = 342 | response.getGreet().getFirstName() + 343 | " " + 344 | response.getGreet().getLastName(); 345 | 346 | console.log("Hello " + fullName); 347 | }); 348 | 349 | call.on("error", error => { 350 | console.error(error); 351 | }); 352 | 353 | call.on("end", () => { 354 | console.log("Server The End..."); 355 | }); 356 | 357 | for (var i = 0; i < 10; i++) { 358 | // var greeting = new greets.Greeting() 359 | // greeting.setFirstName('Paulo') 360 | // greeting.setLastName('Dichone') 361 | 362 | var request = new greets.GreetEveryoneResponse(); 363 | request.setResult("Paulo Dichone"); 364 | 365 | call.write(request); 366 | await sleep(1000); 367 | } 368 | 369 | call.end(); 370 | } 371 | 372 | function greet(call, callback) { 373 | var greeting = new greets.GreetResponse(); 374 | 375 | greeting.setResult( 376 | "Hello " + 377 | call.request.getGreeting().getFirstName() + 378 | " " + 379 | call.request.getGreeting().getLastName() 380 | ); 381 | 382 | callback(null, greeting); 383 | } 384 | 385 | function squareRoot(call, callback) { 386 | var number = call.request.getNumber(); 387 | 388 | if (number >= 0) { 389 | var numberRoot = Math.sqrt(number); 390 | var response = new calc.SquareRootResponse(); 391 | response.setNumberRoot(numberRoot); 392 | 393 | callback(null, response); 394 | } else { 395 | // Error handling 396 | return callback({ 397 | code: grpc.status.INVALID_ARGUMENT, 398 | message: 399 | "The number being sent is not positive " + " Number sent: " + number 400 | }); 401 | } 402 | } 403 | 404 | function main() { 405 | let credentials = grpc.ServerCredentials.createSsl( 406 | fs.readFileSync("../certs/ca.crt"), 407 | [ 408 | { 409 | cert_chain: fs.readFileSync("../certs/server.crt"), 410 | private_key: fs.readFileSync("../certs/server.key") 411 | } 412 | ], 413 | true 414 | ); 415 | 416 | let unsafeCreds = grpc.ServerCredentials.createInsecure(); 417 | 418 | var server = new grpc.Server(); 419 | 420 | server.addService(blogService.BlogServiceService, { 421 | listBlog: listBlog, 422 | createBlog: createBlog, 423 | readBlog: readBlog, 424 | updateBlog: updateBlog, 425 | deleteBlog: deleteBlog 426 | }); 427 | 428 | server.addService(calcService.CalculatorServiceService, { 429 | sum: sum, 430 | primeNumberDecomposition: primeNumberDecomposition, 431 | computeAverage: computeAverage, 432 | findMaximum: findMaximum, 433 | squareRoot: squareRoot 434 | }); 435 | 436 | server.addService(service.GreetServiceService, { 437 | greet: greet, 438 | greetManyTimes: greetManyTimes, 439 | longGreet: longGreet, 440 | greetEveryone: greetEveryone 441 | }); 442 | server.bind("127.0.0.1:50051", unsafeCreds); 443 | server.start(); 444 | 445 | console.log("Server running on port 127.0.0.1:50051"); 446 | } 447 | 448 | main(); 449 | -------------------------------------------------------------------------------- /server/knexfile.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | 3 | module.exports = { 4 | development: { 5 | client: 'postgresql', 6 | connection: { 7 | host: '127.0.0.1', 8 | user: '', 9 | password: '', 10 | port: '5432', 11 | database: 'grpc-node-course', 12 | }, 13 | pool: { 14 | min: 2, 15 | max: 10, 16 | }, 17 | migrations: { 18 | directory: path.join(__dirname, 'db', 'migrations'), 19 | }, 20 | seeds: { 21 | directory: path.join(__dirname, 'db', 'seeds'), 22 | }, 23 | }, 24 | }; -------------------------------------------------------------------------------- /server/protos/blog_grpc_pb.js: -------------------------------------------------------------------------------- 1 | // GENERATED CODE -- DO NOT EDIT! 2 | 3 | 'use strict'; 4 | var grpc = require('grpc'); 5 | var protos_blog_pb = require('../protos/blog_pb.js'); 6 | 7 | function serialize_blog_CreateBlogRequest(arg) { 8 | if (!(arg instanceof protos_blog_pb.CreateBlogRequest)) { 9 | throw new Error('Expected argument of type blog.CreateBlogRequest'); 10 | } 11 | return Buffer.from(arg.serializeBinary()); 12 | } 13 | 14 | function deserialize_blog_CreateBlogRequest(buffer_arg) { 15 | return protos_blog_pb.CreateBlogRequest.deserializeBinary(new Uint8Array(buffer_arg)); 16 | } 17 | 18 | function serialize_blog_CreateBlogResponse(arg) { 19 | if (!(arg instanceof protos_blog_pb.CreateBlogResponse)) { 20 | throw new Error('Expected argument of type blog.CreateBlogResponse'); 21 | } 22 | return Buffer.from(arg.serializeBinary()); 23 | } 24 | 25 | function deserialize_blog_CreateBlogResponse(buffer_arg) { 26 | return protos_blog_pb.CreateBlogResponse.deserializeBinary(new Uint8Array(buffer_arg)); 27 | } 28 | 29 | function serialize_blog_DeleteBlogRequest(arg) { 30 | if (!(arg instanceof protos_blog_pb.DeleteBlogRequest)) { 31 | throw new Error('Expected argument of type blog.DeleteBlogRequest'); 32 | } 33 | return Buffer.from(arg.serializeBinary()); 34 | } 35 | 36 | function deserialize_blog_DeleteBlogRequest(buffer_arg) { 37 | return protos_blog_pb.DeleteBlogRequest.deserializeBinary(new Uint8Array(buffer_arg)); 38 | } 39 | 40 | function serialize_blog_DeleteBlogResponse(arg) { 41 | if (!(arg instanceof protos_blog_pb.DeleteBlogResponse)) { 42 | throw new Error('Expected argument of type blog.DeleteBlogResponse'); 43 | } 44 | return Buffer.from(arg.serializeBinary()); 45 | } 46 | 47 | function deserialize_blog_DeleteBlogResponse(buffer_arg) { 48 | return protos_blog_pb.DeleteBlogResponse.deserializeBinary(new Uint8Array(buffer_arg)); 49 | } 50 | 51 | function serialize_blog_ListBlogRequest(arg) { 52 | if (!(arg instanceof protos_blog_pb.ListBlogRequest)) { 53 | throw new Error('Expected argument of type blog.ListBlogRequest'); 54 | } 55 | return Buffer.from(arg.serializeBinary()); 56 | } 57 | 58 | function deserialize_blog_ListBlogRequest(buffer_arg) { 59 | return protos_blog_pb.ListBlogRequest.deserializeBinary(new Uint8Array(buffer_arg)); 60 | } 61 | 62 | function serialize_blog_ListBlogResponse(arg) { 63 | if (!(arg instanceof protos_blog_pb.ListBlogResponse)) { 64 | throw new Error('Expected argument of type blog.ListBlogResponse'); 65 | } 66 | return Buffer.from(arg.serializeBinary()); 67 | } 68 | 69 | function deserialize_blog_ListBlogResponse(buffer_arg) { 70 | return protos_blog_pb.ListBlogResponse.deserializeBinary(new Uint8Array(buffer_arg)); 71 | } 72 | 73 | function serialize_blog_ReadBlogRequest(arg) { 74 | if (!(arg instanceof protos_blog_pb.ReadBlogRequest)) { 75 | throw new Error('Expected argument of type blog.ReadBlogRequest'); 76 | } 77 | return Buffer.from(arg.serializeBinary()); 78 | } 79 | 80 | function deserialize_blog_ReadBlogRequest(buffer_arg) { 81 | return protos_blog_pb.ReadBlogRequest.deserializeBinary(new Uint8Array(buffer_arg)); 82 | } 83 | 84 | function serialize_blog_ReadBlogResponse(arg) { 85 | if (!(arg instanceof protos_blog_pb.ReadBlogResponse)) { 86 | throw new Error('Expected argument of type blog.ReadBlogResponse'); 87 | } 88 | return Buffer.from(arg.serializeBinary()); 89 | } 90 | 91 | function deserialize_blog_ReadBlogResponse(buffer_arg) { 92 | return protos_blog_pb.ReadBlogResponse.deserializeBinary(new Uint8Array(buffer_arg)); 93 | } 94 | 95 | function serialize_blog_UpdateBlogRequest(arg) { 96 | if (!(arg instanceof protos_blog_pb.UpdateBlogRequest)) { 97 | throw new Error('Expected argument of type blog.UpdateBlogRequest'); 98 | } 99 | return Buffer.from(arg.serializeBinary()); 100 | } 101 | 102 | function deserialize_blog_UpdateBlogRequest(buffer_arg) { 103 | return protos_blog_pb.UpdateBlogRequest.deserializeBinary(new Uint8Array(buffer_arg)); 104 | } 105 | 106 | function serialize_blog_UpdateBlogResponse(arg) { 107 | if (!(arg instanceof protos_blog_pb.UpdateBlogResponse)) { 108 | throw new Error('Expected argument of type blog.UpdateBlogResponse'); 109 | } 110 | return Buffer.from(arg.serializeBinary()); 111 | } 112 | 113 | function deserialize_blog_UpdateBlogResponse(buffer_arg) { 114 | return protos_blog_pb.UpdateBlogResponse.deserializeBinary(new Uint8Array(buffer_arg)); 115 | } 116 | 117 | 118 | var BlogServiceService = exports.BlogServiceService = { 119 | deleteBlog: { 120 | path: '/blog.BlogService/DeleteBlog', 121 | requestStream: false, 122 | responseStream: false, 123 | requestType: protos_blog_pb.DeleteBlogRequest, 124 | responseType: protos_blog_pb.DeleteBlogResponse, 125 | requestSerialize: serialize_blog_DeleteBlogRequest, 126 | requestDeserialize: deserialize_blog_DeleteBlogRequest, 127 | responseSerialize: serialize_blog_DeleteBlogResponse, 128 | responseDeserialize: deserialize_blog_DeleteBlogResponse, 129 | }, 130 | updateBlog: { 131 | path: '/blog.BlogService/UpdateBlog', 132 | requestStream: false, 133 | responseStream: false, 134 | requestType: protos_blog_pb.UpdateBlogRequest, 135 | responseType: protos_blog_pb.UpdateBlogResponse, 136 | requestSerialize: serialize_blog_UpdateBlogRequest, 137 | requestDeserialize: deserialize_blog_UpdateBlogRequest, 138 | responseSerialize: serialize_blog_UpdateBlogResponse, 139 | responseDeserialize: deserialize_blog_UpdateBlogResponse, 140 | }, 141 | readBlog: { 142 | path: '/blog.BlogService/ReadBlog', 143 | requestStream: false, 144 | responseStream: false, 145 | requestType: protos_blog_pb.ReadBlogRequest, 146 | responseType: protos_blog_pb.ReadBlogResponse, 147 | requestSerialize: serialize_blog_ReadBlogRequest, 148 | requestDeserialize: deserialize_blog_ReadBlogRequest, 149 | responseSerialize: serialize_blog_ReadBlogResponse, 150 | responseDeserialize: deserialize_blog_ReadBlogResponse, 151 | }, 152 | createBlog: { 153 | path: '/blog.BlogService/CreateBlog', 154 | requestStream: false, 155 | responseStream: false, 156 | requestType: protos_blog_pb.CreateBlogRequest, 157 | responseType: protos_blog_pb.CreateBlogResponse, 158 | requestSerialize: serialize_blog_CreateBlogRequest, 159 | requestDeserialize: deserialize_blog_CreateBlogRequest, 160 | responseSerialize: serialize_blog_CreateBlogResponse, 161 | responseDeserialize: deserialize_blog_CreateBlogResponse, 162 | }, 163 | listBlog: { 164 | path: '/blog.BlogService/ListBlog', 165 | requestStream: false, 166 | responseStream: true, 167 | requestType: protos_blog_pb.ListBlogRequest, 168 | responseType: protos_blog_pb.ListBlogResponse, 169 | requestSerialize: serialize_blog_ListBlogRequest, 170 | requestDeserialize: deserialize_blog_ListBlogRequest, 171 | responseSerialize: serialize_blog_ListBlogResponse, 172 | responseDeserialize: deserialize_blog_ListBlogResponse, 173 | }, 174 | }; 175 | 176 | exports.BlogServiceClient = grpc.makeGenericClientConstructor(BlogServiceService); 177 | // All our API's 178 | -------------------------------------------------------------------------------- /server/protos/calculator_grpc_pb.js: -------------------------------------------------------------------------------- 1 | // GENERATED CODE -- DO NOT EDIT! 2 | 3 | 'use strict'; 4 | var grpc = require('grpc'); 5 | var protos_calculator_pb = require('../protos/calculator_pb.js'); 6 | 7 | function serialize_calculator_ComputeAverageRequest(arg) { 8 | if (!(arg instanceof protos_calculator_pb.ComputeAverageRequest)) { 9 | throw new Error('Expected argument of type calculator.ComputeAverageRequest'); 10 | } 11 | return Buffer.from(arg.serializeBinary()); 12 | } 13 | 14 | function deserialize_calculator_ComputeAverageRequest(buffer_arg) { 15 | return protos_calculator_pb.ComputeAverageRequest.deserializeBinary(new Uint8Array(buffer_arg)); 16 | } 17 | 18 | function serialize_calculator_ComputeAverageResponse(arg) { 19 | if (!(arg instanceof protos_calculator_pb.ComputeAverageResponse)) { 20 | throw new Error('Expected argument of type calculator.ComputeAverageResponse'); 21 | } 22 | return Buffer.from(arg.serializeBinary()); 23 | } 24 | 25 | function deserialize_calculator_ComputeAverageResponse(buffer_arg) { 26 | return protos_calculator_pb.ComputeAverageResponse.deserializeBinary(new Uint8Array(buffer_arg)); 27 | } 28 | 29 | function serialize_calculator_FindMaximumRequest(arg) { 30 | if (!(arg instanceof protos_calculator_pb.FindMaximumRequest)) { 31 | throw new Error('Expected argument of type calculator.FindMaximumRequest'); 32 | } 33 | return Buffer.from(arg.serializeBinary()); 34 | } 35 | 36 | function deserialize_calculator_FindMaximumRequest(buffer_arg) { 37 | return protos_calculator_pb.FindMaximumRequest.deserializeBinary(new Uint8Array(buffer_arg)); 38 | } 39 | 40 | function serialize_calculator_FindMaximumResponse(arg) { 41 | if (!(arg instanceof protos_calculator_pb.FindMaximumResponse)) { 42 | throw new Error('Expected argument of type calculator.FindMaximumResponse'); 43 | } 44 | return Buffer.from(arg.serializeBinary()); 45 | } 46 | 47 | function deserialize_calculator_FindMaximumResponse(buffer_arg) { 48 | return protos_calculator_pb.FindMaximumResponse.deserializeBinary(new Uint8Array(buffer_arg)); 49 | } 50 | 51 | function serialize_calculator_PrimeNumberDecompositionRequest(arg) { 52 | if (!(arg instanceof protos_calculator_pb.PrimeNumberDecompositionRequest)) { 53 | throw new Error('Expected argument of type calculator.PrimeNumberDecompositionRequest'); 54 | } 55 | return Buffer.from(arg.serializeBinary()); 56 | } 57 | 58 | function deserialize_calculator_PrimeNumberDecompositionRequest(buffer_arg) { 59 | return protos_calculator_pb.PrimeNumberDecompositionRequest.deserializeBinary(new Uint8Array(buffer_arg)); 60 | } 61 | 62 | function serialize_calculator_PrimeNumberDecompositionResponse(arg) { 63 | if (!(arg instanceof protos_calculator_pb.PrimeNumberDecompositionResponse)) { 64 | throw new Error('Expected argument of type calculator.PrimeNumberDecompositionResponse'); 65 | } 66 | return Buffer.from(arg.serializeBinary()); 67 | } 68 | 69 | function deserialize_calculator_PrimeNumberDecompositionResponse(buffer_arg) { 70 | return protos_calculator_pb.PrimeNumberDecompositionResponse.deserializeBinary(new Uint8Array(buffer_arg)); 71 | } 72 | 73 | function serialize_calculator_SquareRootRequest(arg) { 74 | if (!(arg instanceof protos_calculator_pb.SquareRootRequest)) { 75 | throw new Error('Expected argument of type calculator.SquareRootRequest'); 76 | } 77 | return Buffer.from(arg.serializeBinary()); 78 | } 79 | 80 | function deserialize_calculator_SquareRootRequest(buffer_arg) { 81 | return protos_calculator_pb.SquareRootRequest.deserializeBinary(new Uint8Array(buffer_arg)); 82 | } 83 | 84 | function serialize_calculator_SquareRootResponse(arg) { 85 | if (!(arg instanceof protos_calculator_pb.SquareRootResponse)) { 86 | throw new Error('Expected argument of type calculator.SquareRootResponse'); 87 | } 88 | return Buffer.from(arg.serializeBinary()); 89 | } 90 | 91 | function deserialize_calculator_SquareRootResponse(buffer_arg) { 92 | return protos_calculator_pb.SquareRootResponse.deserializeBinary(new Uint8Array(buffer_arg)); 93 | } 94 | 95 | function serialize_calculator_SumRequest(arg) { 96 | if (!(arg instanceof protos_calculator_pb.SumRequest)) { 97 | throw new Error('Expected argument of type calculator.SumRequest'); 98 | } 99 | return Buffer.from(arg.serializeBinary()); 100 | } 101 | 102 | function deserialize_calculator_SumRequest(buffer_arg) { 103 | return protos_calculator_pb.SumRequest.deserializeBinary(new Uint8Array(buffer_arg)); 104 | } 105 | 106 | function serialize_calculator_SumResponse(arg) { 107 | if (!(arg instanceof protos_calculator_pb.SumResponse)) { 108 | throw new Error('Expected argument of type calculator.SumResponse'); 109 | } 110 | return Buffer.from(arg.serializeBinary()); 111 | } 112 | 113 | function deserialize_calculator_SumResponse(buffer_arg) { 114 | return protos_calculator_pb.SumResponse.deserializeBinary(new Uint8Array(buffer_arg)); 115 | } 116 | 117 | 118 | var CalculatorServiceService = exports.CalculatorServiceService = { 119 | // Unary API 120 | sum: { 121 | path: '/calculator.CalculatorService/Sum', 122 | requestStream: false, 123 | responseStream: false, 124 | requestType: protos_calculator_pb.SumRequest, 125 | responseType: protos_calculator_pb.SumResponse, 126 | requestSerialize: serialize_calculator_SumRequest, 127 | requestDeserialize: deserialize_calculator_SumRequest, 128 | responseSerialize: serialize_calculator_SumResponse, 129 | responseDeserialize: deserialize_calculator_SumResponse, 130 | }, 131 | // Streaming API 132 | primeNumberDecomposition: { 133 | path: '/calculator.CalculatorService/PrimeNumberDecomposition', 134 | requestStream: false, 135 | responseStream: true, 136 | requestType: protos_calculator_pb.PrimeNumberDecompositionRequest, 137 | responseType: protos_calculator_pb.PrimeNumberDecompositionResponse, 138 | requestSerialize: serialize_calculator_PrimeNumberDecompositionRequest, 139 | requestDeserialize: deserialize_calculator_PrimeNumberDecompositionRequest, 140 | responseSerialize: serialize_calculator_PrimeNumberDecompositionResponse, 141 | responseDeserialize: deserialize_calculator_PrimeNumberDecompositionResponse, 142 | }, 143 | computeAverage: { 144 | path: '/calculator.CalculatorService/ComputeAverage', 145 | requestStream: true, 146 | responseStream: false, 147 | requestType: protos_calculator_pb.ComputeAverageRequest, 148 | responseType: protos_calculator_pb.ComputeAverageResponse, 149 | requestSerialize: serialize_calculator_ComputeAverageRequest, 150 | requestDeserialize: deserialize_calculator_ComputeAverageRequest, 151 | responseSerialize: serialize_calculator_ComputeAverageResponse, 152 | responseDeserialize: deserialize_calculator_ComputeAverageResponse, 153 | }, 154 | findMaximum: { 155 | path: '/calculator.CalculatorService/FindMaximum', 156 | requestStream: true, 157 | responseStream: true, 158 | requestType: protos_calculator_pb.FindMaximumRequest, 159 | responseType: protos_calculator_pb.FindMaximumResponse, 160 | requestSerialize: serialize_calculator_FindMaximumRequest, 161 | requestDeserialize: deserialize_calculator_FindMaximumRequest, 162 | responseSerialize: serialize_calculator_FindMaximumResponse, 163 | responseDeserialize: deserialize_calculator_FindMaximumResponse, 164 | }, 165 | // error handling 166 | // this RPC wil throw an exception if the sent number is negative: -1 167 | squareRoot: { 168 | path: '/calculator.CalculatorService/SquareRoot', 169 | requestStream: false, 170 | responseStream: false, 171 | requestType: protos_calculator_pb.SquareRootRequest, 172 | responseType: protos_calculator_pb.SquareRootResponse, 173 | requestSerialize: serialize_calculator_SquareRootRequest, 174 | requestDeserialize: deserialize_calculator_SquareRootRequest, 175 | responseSerialize: serialize_calculator_SquareRootResponse, 176 | responseDeserialize: deserialize_calculator_SquareRootResponse, 177 | }, 178 | }; 179 | 180 | exports.CalculatorServiceClient = grpc.makeGenericClientConstructor(CalculatorServiceService); 181 | -------------------------------------------------------------------------------- /server/protos/calculator_pb.js: -------------------------------------------------------------------------------- 1 | // source: protos/calculator.proto 2 | /** 3 | * @fileoverview 4 | * @enhanceable 5 | * @suppress {messageConventions} JS Compiler reports an error if a variable or 6 | * field starts with 'MSG_' and isn't a translatable message. 7 | * @public 8 | */ 9 | // GENERATED CODE -- DO NOT EDIT! 10 | 11 | var jspb = require('google-protobuf'); 12 | var goog = jspb; 13 | var global = Function('return this')(); 14 | 15 | goog.exportSymbol('proto.calculator.ComputeAverageRequest', null, global); 16 | goog.exportSymbol('proto.calculator.ComputeAverageResponse', null, global); 17 | goog.exportSymbol('proto.calculator.FindMaximumRequest', null, global); 18 | goog.exportSymbol('proto.calculator.FindMaximumResponse', null, global); 19 | goog.exportSymbol('proto.calculator.PrimeNumberDecompositionRequest', null, global); 20 | goog.exportSymbol('proto.calculator.PrimeNumberDecompositionResponse', null, global); 21 | goog.exportSymbol('proto.calculator.SquareRootRequest', null, global); 22 | goog.exportSymbol('proto.calculator.SquareRootResponse', null, global); 23 | goog.exportSymbol('proto.calculator.SumRequest', null, global); 24 | goog.exportSymbol('proto.calculator.SumResponse', null, global); 25 | /** 26 | * Generated by JsPbCodeGenerator. 27 | * @param {Array=} opt_data Optional initial data array, typically from a 28 | * server response, or constructed directly in Javascript. The array is used 29 | * in place and becomes part of the constructed object. It is not cloned. 30 | * If no data is provided, the constructed object will be empty, but still 31 | * valid. 32 | * @extends {jspb.Message} 33 | * @constructor 34 | */ 35 | proto.calculator.SquareRootRequest = function(opt_data) { 36 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 37 | }; 38 | goog.inherits(proto.calculator.SquareRootRequest, jspb.Message); 39 | if (goog.DEBUG && !COMPILED) { 40 | /** 41 | * @public 42 | * @override 43 | */ 44 | proto.calculator.SquareRootRequest.displayName = 'proto.calculator.SquareRootRequest'; 45 | } 46 | /** 47 | * Generated by JsPbCodeGenerator. 48 | * @param {Array=} opt_data Optional initial data array, typically from a 49 | * server response, or constructed directly in Javascript. The array is used 50 | * in place and becomes part of the constructed object. It is not cloned. 51 | * If no data is provided, the constructed object will be empty, but still 52 | * valid. 53 | * @extends {jspb.Message} 54 | * @constructor 55 | */ 56 | proto.calculator.SquareRootResponse = function(opt_data) { 57 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 58 | }; 59 | goog.inherits(proto.calculator.SquareRootResponse, jspb.Message); 60 | if (goog.DEBUG && !COMPILED) { 61 | /** 62 | * @public 63 | * @override 64 | */ 65 | proto.calculator.SquareRootResponse.displayName = 'proto.calculator.SquareRootResponse'; 66 | } 67 | /** 68 | * Generated by JsPbCodeGenerator. 69 | * @param {Array=} opt_data Optional initial data array, typically from a 70 | * server response, or constructed directly in Javascript. The array is used 71 | * in place and becomes part of the constructed object. It is not cloned. 72 | * If no data is provided, the constructed object will be empty, but still 73 | * valid. 74 | * @extends {jspb.Message} 75 | * @constructor 76 | */ 77 | proto.calculator.FindMaximumRequest = function(opt_data) { 78 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 79 | }; 80 | goog.inherits(proto.calculator.FindMaximumRequest, jspb.Message); 81 | if (goog.DEBUG && !COMPILED) { 82 | /** 83 | * @public 84 | * @override 85 | */ 86 | proto.calculator.FindMaximumRequest.displayName = 'proto.calculator.FindMaximumRequest'; 87 | } 88 | /** 89 | * Generated by JsPbCodeGenerator. 90 | * @param {Array=} opt_data Optional initial data array, typically from a 91 | * server response, or constructed directly in Javascript. The array is used 92 | * in place and becomes part of the constructed object. It is not cloned. 93 | * If no data is provided, the constructed object will be empty, but still 94 | * valid. 95 | * @extends {jspb.Message} 96 | * @constructor 97 | */ 98 | proto.calculator.FindMaximumResponse = function(opt_data) { 99 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 100 | }; 101 | goog.inherits(proto.calculator.FindMaximumResponse, jspb.Message); 102 | if (goog.DEBUG && !COMPILED) { 103 | /** 104 | * @public 105 | * @override 106 | */ 107 | proto.calculator.FindMaximumResponse.displayName = 'proto.calculator.FindMaximumResponse'; 108 | } 109 | /** 110 | * Generated by JsPbCodeGenerator. 111 | * @param {Array=} opt_data Optional initial data array, typically from a 112 | * server response, or constructed directly in Javascript. The array is used 113 | * in place and becomes part of the constructed object. It is not cloned. 114 | * If no data is provided, the constructed object will be empty, but still 115 | * valid. 116 | * @extends {jspb.Message} 117 | * @constructor 118 | */ 119 | proto.calculator.ComputeAverageResponse = function(opt_data) { 120 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 121 | }; 122 | goog.inherits(proto.calculator.ComputeAverageResponse, jspb.Message); 123 | if (goog.DEBUG && !COMPILED) { 124 | /** 125 | * @public 126 | * @override 127 | */ 128 | proto.calculator.ComputeAverageResponse.displayName = 'proto.calculator.ComputeAverageResponse'; 129 | } 130 | /** 131 | * Generated by JsPbCodeGenerator. 132 | * @param {Array=} opt_data Optional initial data array, typically from a 133 | * server response, or constructed directly in Javascript. The array is used 134 | * in place and becomes part of the constructed object. It is not cloned. 135 | * If no data is provided, the constructed object will be empty, but still 136 | * valid. 137 | * @extends {jspb.Message} 138 | * @constructor 139 | */ 140 | proto.calculator.ComputeAverageRequest = function(opt_data) { 141 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 142 | }; 143 | goog.inherits(proto.calculator.ComputeAverageRequest, jspb.Message); 144 | if (goog.DEBUG && !COMPILED) { 145 | /** 146 | * @public 147 | * @override 148 | */ 149 | proto.calculator.ComputeAverageRequest.displayName = 'proto.calculator.ComputeAverageRequest'; 150 | } 151 | /** 152 | * Generated by JsPbCodeGenerator. 153 | * @param {Array=} opt_data Optional initial data array, typically from a 154 | * server response, or constructed directly in Javascript. The array is used 155 | * in place and becomes part of the constructed object. It is not cloned. 156 | * If no data is provided, the constructed object will be empty, but still 157 | * valid. 158 | * @extends {jspb.Message} 159 | * @constructor 160 | */ 161 | proto.calculator.PrimeNumberDecompositionRequest = function(opt_data) { 162 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 163 | }; 164 | goog.inherits(proto.calculator.PrimeNumberDecompositionRequest, jspb.Message); 165 | if (goog.DEBUG && !COMPILED) { 166 | /** 167 | * @public 168 | * @override 169 | */ 170 | proto.calculator.PrimeNumberDecompositionRequest.displayName = 'proto.calculator.PrimeNumberDecompositionRequest'; 171 | } 172 | /** 173 | * Generated by JsPbCodeGenerator. 174 | * @param {Array=} opt_data Optional initial data array, typically from a 175 | * server response, or constructed directly in Javascript. The array is used 176 | * in place and becomes part of the constructed object. It is not cloned. 177 | * If no data is provided, the constructed object will be empty, but still 178 | * valid. 179 | * @extends {jspb.Message} 180 | * @constructor 181 | */ 182 | proto.calculator.PrimeNumberDecompositionResponse = function(opt_data) { 183 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 184 | }; 185 | goog.inherits(proto.calculator.PrimeNumberDecompositionResponse, jspb.Message); 186 | if (goog.DEBUG && !COMPILED) { 187 | /** 188 | * @public 189 | * @override 190 | */ 191 | proto.calculator.PrimeNumberDecompositionResponse.displayName = 'proto.calculator.PrimeNumberDecompositionResponse'; 192 | } 193 | /** 194 | * Generated by JsPbCodeGenerator. 195 | * @param {Array=} opt_data Optional initial data array, typically from a 196 | * server response, or constructed directly in Javascript. The array is used 197 | * in place and becomes part of the constructed object. It is not cloned. 198 | * If no data is provided, the constructed object will be empty, but still 199 | * valid. 200 | * @extends {jspb.Message} 201 | * @constructor 202 | */ 203 | proto.calculator.SumRequest = function(opt_data) { 204 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 205 | }; 206 | goog.inherits(proto.calculator.SumRequest, jspb.Message); 207 | if (goog.DEBUG && !COMPILED) { 208 | /** 209 | * @public 210 | * @override 211 | */ 212 | proto.calculator.SumRequest.displayName = 'proto.calculator.SumRequest'; 213 | } 214 | /** 215 | * Generated by JsPbCodeGenerator. 216 | * @param {Array=} opt_data Optional initial data array, typically from a 217 | * server response, or constructed directly in Javascript. The array is used 218 | * in place and becomes part of the constructed object. It is not cloned. 219 | * If no data is provided, the constructed object will be empty, but still 220 | * valid. 221 | * @extends {jspb.Message} 222 | * @constructor 223 | */ 224 | proto.calculator.SumResponse = function(opt_data) { 225 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 226 | }; 227 | goog.inherits(proto.calculator.SumResponse, jspb.Message); 228 | if (goog.DEBUG && !COMPILED) { 229 | /** 230 | * @public 231 | * @override 232 | */ 233 | proto.calculator.SumResponse.displayName = 'proto.calculator.SumResponse'; 234 | } 235 | 236 | 237 | 238 | if (jspb.Message.GENERATE_TO_OBJECT) { 239 | /** 240 | * Creates an object representation of this proto. 241 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 242 | * Optional fields that are not set will be set to undefined. 243 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 244 | * For the list of reserved names please see: 245 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 246 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 247 | * JSPB instance for transitional soy proto support: 248 | * http://goto/soy-param-migration 249 | * @return {!Object} 250 | */ 251 | proto.calculator.SquareRootRequest.prototype.toObject = function(opt_includeInstance) { 252 | return proto.calculator.SquareRootRequest.toObject(opt_includeInstance, this); 253 | }; 254 | 255 | 256 | /** 257 | * Static version of the {@see toObject} method. 258 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 259 | * the JSPB instance for transitional soy proto support: 260 | * http://goto/soy-param-migration 261 | * @param {!proto.calculator.SquareRootRequest} msg The msg instance to transform. 262 | * @return {!Object} 263 | * @suppress {unusedLocalVariables} f is only used for nested messages 264 | */ 265 | proto.calculator.SquareRootRequest.toObject = function(includeInstance, msg) { 266 | var f, obj = { 267 | number: jspb.Message.getFieldWithDefault(msg, 1, 0) 268 | }; 269 | 270 | if (includeInstance) { 271 | obj.$jspbMessageInstance = msg; 272 | } 273 | return obj; 274 | }; 275 | } 276 | 277 | 278 | /** 279 | * Deserializes binary data (in protobuf wire format). 280 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 281 | * @return {!proto.calculator.SquareRootRequest} 282 | */ 283 | proto.calculator.SquareRootRequest.deserializeBinary = function(bytes) { 284 | var reader = new jspb.BinaryReader(bytes); 285 | var msg = new proto.calculator.SquareRootRequest; 286 | return proto.calculator.SquareRootRequest.deserializeBinaryFromReader(msg, reader); 287 | }; 288 | 289 | 290 | /** 291 | * Deserializes binary data (in protobuf wire format) from the 292 | * given reader into the given message object. 293 | * @param {!proto.calculator.SquareRootRequest} msg The message object to deserialize into. 294 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 295 | * @return {!proto.calculator.SquareRootRequest} 296 | */ 297 | proto.calculator.SquareRootRequest.deserializeBinaryFromReader = function(msg, reader) { 298 | while (reader.nextField()) { 299 | if (reader.isEndGroup()) { 300 | break; 301 | } 302 | var field = reader.getFieldNumber(); 303 | switch (field) { 304 | case 1: 305 | var value = /** @type {number} */ (reader.readInt32()); 306 | msg.setNumber(value); 307 | break; 308 | default: 309 | reader.skipField(); 310 | break; 311 | } 312 | } 313 | return msg; 314 | }; 315 | 316 | 317 | /** 318 | * Serializes the message to binary data (in protobuf wire format). 319 | * @return {!Uint8Array} 320 | */ 321 | proto.calculator.SquareRootRequest.prototype.serializeBinary = function() { 322 | var writer = new jspb.BinaryWriter(); 323 | proto.calculator.SquareRootRequest.serializeBinaryToWriter(this, writer); 324 | return writer.getResultBuffer(); 325 | }; 326 | 327 | 328 | /** 329 | * Serializes the given message to binary data (in protobuf wire 330 | * format), writing to the given BinaryWriter. 331 | * @param {!proto.calculator.SquareRootRequest} message 332 | * @param {!jspb.BinaryWriter} writer 333 | * @suppress {unusedLocalVariables} f is only used for nested messages 334 | */ 335 | proto.calculator.SquareRootRequest.serializeBinaryToWriter = function(message, writer) { 336 | var f = undefined; 337 | f = message.getNumber(); 338 | if (f !== 0) { 339 | writer.writeInt32( 340 | 1, 341 | f 342 | ); 343 | } 344 | }; 345 | 346 | 347 | /** 348 | * optional int32 number = 1; 349 | * @return {number} 350 | */ 351 | proto.calculator.SquareRootRequest.prototype.getNumber = function() { 352 | return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); 353 | }; 354 | 355 | 356 | /** 357 | * @param {number} value 358 | * @return {!proto.calculator.SquareRootRequest} returns this 359 | */ 360 | proto.calculator.SquareRootRequest.prototype.setNumber = function(value) { 361 | return jspb.Message.setProto3IntField(this, 1, value); 362 | }; 363 | 364 | 365 | 366 | 367 | 368 | if (jspb.Message.GENERATE_TO_OBJECT) { 369 | /** 370 | * Creates an object representation of this proto. 371 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 372 | * Optional fields that are not set will be set to undefined. 373 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 374 | * For the list of reserved names please see: 375 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 376 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 377 | * JSPB instance for transitional soy proto support: 378 | * http://goto/soy-param-migration 379 | * @return {!Object} 380 | */ 381 | proto.calculator.SquareRootResponse.prototype.toObject = function(opt_includeInstance) { 382 | return proto.calculator.SquareRootResponse.toObject(opt_includeInstance, this); 383 | }; 384 | 385 | 386 | /** 387 | * Static version of the {@see toObject} method. 388 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 389 | * the JSPB instance for transitional soy proto support: 390 | * http://goto/soy-param-migration 391 | * @param {!proto.calculator.SquareRootResponse} msg The msg instance to transform. 392 | * @return {!Object} 393 | * @suppress {unusedLocalVariables} f is only used for nested messages 394 | */ 395 | proto.calculator.SquareRootResponse.toObject = function(includeInstance, msg) { 396 | var f, obj = { 397 | numberRoot: jspb.Message.getFloatingPointFieldWithDefault(msg, 1, 0.0) 398 | }; 399 | 400 | if (includeInstance) { 401 | obj.$jspbMessageInstance = msg; 402 | } 403 | return obj; 404 | }; 405 | } 406 | 407 | 408 | /** 409 | * Deserializes binary data (in protobuf wire format). 410 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 411 | * @return {!proto.calculator.SquareRootResponse} 412 | */ 413 | proto.calculator.SquareRootResponse.deserializeBinary = function(bytes) { 414 | var reader = new jspb.BinaryReader(bytes); 415 | var msg = new proto.calculator.SquareRootResponse; 416 | return proto.calculator.SquareRootResponse.deserializeBinaryFromReader(msg, reader); 417 | }; 418 | 419 | 420 | /** 421 | * Deserializes binary data (in protobuf wire format) from the 422 | * given reader into the given message object. 423 | * @param {!proto.calculator.SquareRootResponse} msg The message object to deserialize into. 424 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 425 | * @return {!proto.calculator.SquareRootResponse} 426 | */ 427 | proto.calculator.SquareRootResponse.deserializeBinaryFromReader = function(msg, reader) { 428 | while (reader.nextField()) { 429 | if (reader.isEndGroup()) { 430 | break; 431 | } 432 | var field = reader.getFieldNumber(); 433 | switch (field) { 434 | case 1: 435 | var value = /** @type {number} */ (reader.readDouble()); 436 | msg.setNumberRoot(value); 437 | break; 438 | default: 439 | reader.skipField(); 440 | break; 441 | } 442 | } 443 | return msg; 444 | }; 445 | 446 | 447 | /** 448 | * Serializes the message to binary data (in protobuf wire format). 449 | * @return {!Uint8Array} 450 | */ 451 | proto.calculator.SquareRootResponse.prototype.serializeBinary = function() { 452 | var writer = new jspb.BinaryWriter(); 453 | proto.calculator.SquareRootResponse.serializeBinaryToWriter(this, writer); 454 | return writer.getResultBuffer(); 455 | }; 456 | 457 | 458 | /** 459 | * Serializes the given message to binary data (in protobuf wire 460 | * format), writing to the given BinaryWriter. 461 | * @param {!proto.calculator.SquareRootResponse} message 462 | * @param {!jspb.BinaryWriter} writer 463 | * @suppress {unusedLocalVariables} f is only used for nested messages 464 | */ 465 | proto.calculator.SquareRootResponse.serializeBinaryToWriter = function(message, writer) { 466 | var f = undefined; 467 | f = message.getNumberRoot(); 468 | if (f !== 0.0) { 469 | writer.writeDouble( 470 | 1, 471 | f 472 | ); 473 | } 474 | }; 475 | 476 | 477 | /** 478 | * optional double number_root = 1; 479 | * @return {number} 480 | */ 481 | proto.calculator.SquareRootResponse.prototype.getNumberRoot = function() { 482 | return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 1, 0.0)); 483 | }; 484 | 485 | 486 | /** 487 | * @param {number} value 488 | * @return {!proto.calculator.SquareRootResponse} returns this 489 | */ 490 | proto.calculator.SquareRootResponse.prototype.setNumberRoot = function(value) { 491 | return jspb.Message.setProto3FloatField(this, 1, value); 492 | }; 493 | 494 | 495 | 496 | 497 | 498 | if (jspb.Message.GENERATE_TO_OBJECT) { 499 | /** 500 | * Creates an object representation of this proto. 501 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 502 | * Optional fields that are not set will be set to undefined. 503 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 504 | * For the list of reserved names please see: 505 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 506 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 507 | * JSPB instance for transitional soy proto support: 508 | * http://goto/soy-param-migration 509 | * @return {!Object} 510 | */ 511 | proto.calculator.FindMaximumRequest.prototype.toObject = function(opt_includeInstance) { 512 | return proto.calculator.FindMaximumRequest.toObject(opt_includeInstance, this); 513 | }; 514 | 515 | 516 | /** 517 | * Static version of the {@see toObject} method. 518 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 519 | * the JSPB instance for transitional soy proto support: 520 | * http://goto/soy-param-migration 521 | * @param {!proto.calculator.FindMaximumRequest} msg The msg instance to transform. 522 | * @return {!Object} 523 | * @suppress {unusedLocalVariables} f is only used for nested messages 524 | */ 525 | proto.calculator.FindMaximumRequest.toObject = function(includeInstance, msg) { 526 | var f, obj = { 527 | number: jspb.Message.getFieldWithDefault(msg, 1, 0) 528 | }; 529 | 530 | if (includeInstance) { 531 | obj.$jspbMessageInstance = msg; 532 | } 533 | return obj; 534 | }; 535 | } 536 | 537 | 538 | /** 539 | * Deserializes binary data (in protobuf wire format). 540 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 541 | * @return {!proto.calculator.FindMaximumRequest} 542 | */ 543 | proto.calculator.FindMaximumRequest.deserializeBinary = function(bytes) { 544 | var reader = new jspb.BinaryReader(bytes); 545 | var msg = new proto.calculator.FindMaximumRequest; 546 | return proto.calculator.FindMaximumRequest.deserializeBinaryFromReader(msg, reader); 547 | }; 548 | 549 | 550 | /** 551 | * Deserializes binary data (in protobuf wire format) from the 552 | * given reader into the given message object. 553 | * @param {!proto.calculator.FindMaximumRequest} msg The message object to deserialize into. 554 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 555 | * @return {!proto.calculator.FindMaximumRequest} 556 | */ 557 | proto.calculator.FindMaximumRequest.deserializeBinaryFromReader = function(msg, reader) { 558 | while (reader.nextField()) { 559 | if (reader.isEndGroup()) { 560 | break; 561 | } 562 | var field = reader.getFieldNumber(); 563 | switch (field) { 564 | case 1: 565 | var value = /** @type {number} */ (reader.readInt32()); 566 | msg.setNumber(value); 567 | break; 568 | default: 569 | reader.skipField(); 570 | break; 571 | } 572 | } 573 | return msg; 574 | }; 575 | 576 | 577 | /** 578 | * Serializes the message to binary data (in protobuf wire format). 579 | * @return {!Uint8Array} 580 | */ 581 | proto.calculator.FindMaximumRequest.prototype.serializeBinary = function() { 582 | var writer = new jspb.BinaryWriter(); 583 | proto.calculator.FindMaximumRequest.serializeBinaryToWriter(this, writer); 584 | return writer.getResultBuffer(); 585 | }; 586 | 587 | 588 | /** 589 | * Serializes the given message to binary data (in protobuf wire 590 | * format), writing to the given BinaryWriter. 591 | * @param {!proto.calculator.FindMaximumRequest} message 592 | * @param {!jspb.BinaryWriter} writer 593 | * @suppress {unusedLocalVariables} f is only used for nested messages 594 | */ 595 | proto.calculator.FindMaximumRequest.serializeBinaryToWriter = function(message, writer) { 596 | var f = undefined; 597 | f = message.getNumber(); 598 | if (f !== 0) { 599 | writer.writeInt32( 600 | 1, 601 | f 602 | ); 603 | } 604 | }; 605 | 606 | 607 | /** 608 | * optional int32 number = 1; 609 | * @return {number} 610 | */ 611 | proto.calculator.FindMaximumRequest.prototype.getNumber = function() { 612 | return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); 613 | }; 614 | 615 | 616 | /** 617 | * @param {number} value 618 | * @return {!proto.calculator.FindMaximumRequest} returns this 619 | */ 620 | proto.calculator.FindMaximumRequest.prototype.setNumber = function(value) { 621 | return jspb.Message.setProto3IntField(this, 1, value); 622 | }; 623 | 624 | 625 | 626 | 627 | 628 | if (jspb.Message.GENERATE_TO_OBJECT) { 629 | /** 630 | * Creates an object representation of this proto. 631 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 632 | * Optional fields that are not set will be set to undefined. 633 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 634 | * For the list of reserved names please see: 635 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 636 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 637 | * JSPB instance for transitional soy proto support: 638 | * http://goto/soy-param-migration 639 | * @return {!Object} 640 | */ 641 | proto.calculator.FindMaximumResponse.prototype.toObject = function(opt_includeInstance) { 642 | return proto.calculator.FindMaximumResponse.toObject(opt_includeInstance, this); 643 | }; 644 | 645 | 646 | /** 647 | * Static version of the {@see toObject} method. 648 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 649 | * the JSPB instance for transitional soy proto support: 650 | * http://goto/soy-param-migration 651 | * @param {!proto.calculator.FindMaximumResponse} msg The msg instance to transform. 652 | * @return {!Object} 653 | * @suppress {unusedLocalVariables} f is only used for nested messages 654 | */ 655 | proto.calculator.FindMaximumResponse.toObject = function(includeInstance, msg) { 656 | var f, obj = { 657 | maximum: jspb.Message.getFieldWithDefault(msg, 1, 0) 658 | }; 659 | 660 | if (includeInstance) { 661 | obj.$jspbMessageInstance = msg; 662 | } 663 | return obj; 664 | }; 665 | } 666 | 667 | 668 | /** 669 | * Deserializes binary data (in protobuf wire format). 670 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 671 | * @return {!proto.calculator.FindMaximumResponse} 672 | */ 673 | proto.calculator.FindMaximumResponse.deserializeBinary = function(bytes) { 674 | var reader = new jspb.BinaryReader(bytes); 675 | var msg = new proto.calculator.FindMaximumResponse; 676 | return proto.calculator.FindMaximumResponse.deserializeBinaryFromReader(msg, reader); 677 | }; 678 | 679 | 680 | /** 681 | * Deserializes binary data (in protobuf wire format) from the 682 | * given reader into the given message object. 683 | * @param {!proto.calculator.FindMaximumResponse} msg The message object to deserialize into. 684 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 685 | * @return {!proto.calculator.FindMaximumResponse} 686 | */ 687 | proto.calculator.FindMaximumResponse.deserializeBinaryFromReader = function(msg, reader) { 688 | while (reader.nextField()) { 689 | if (reader.isEndGroup()) { 690 | break; 691 | } 692 | var field = reader.getFieldNumber(); 693 | switch (field) { 694 | case 1: 695 | var value = /** @type {number} */ (reader.readInt32()); 696 | msg.setMaximum(value); 697 | break; 698 | default: 699 | reader.skipField(); 700 | break; 701 | } 702 | } 703 | return msg; 704 | }; 705 | 706 | 707 | /** 708 | * Serializes the message to binary data (in protobuf wire format). 709 | * @return {!Uint8Array} 710 | */ 711 | proto.calculator.FindMaximumResponse.prototype.serializeBinary = function() { 712 | var writer = new jspb.BinaryWriter(); 713 | proto.calculator.FindMaximumResponse.serializeBinaryToWriter(this, writer); 714 | return writer.getResultBuffer(); 715 | }; 716 | 717 | 718 | /** 719 | * Serializes the given message to binary data (in protobuf wire 720 | * format), writing to the given BinaryWriter. 721 | * @param {!proto.calculator.FindMaximumResponse} message 722 | * @param {!jspb.BinaryWriter} writer 723 | * @suppress {unusedLocalVariables} f is only used for nested messages 724 | */ 725 | proto.calculator.FindMaximumResponse.serializeBinaryToWriter = function(message, writer) { 726 | var f = undefined; 727 | f = message.getMaximum(); 728 | if (f !== 0) { 729 | writer.writeInt32( 730 | 1, 731 | f 732 | ); 733 | } 734 | }; 735 | 736 | 737 | /** 738 | * optional int32 maximum = 1; 739 | * @return {number} 740 | */ 741 | proto.calculator.FindMaximumResponse.prototype.getMaximum = function() { 742 | return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); 743 | }; 744 | 745 | 746 | /** 747 | * @param {number} value 748 | * @return {!proto.calculator.FindMaximumResponse} returns this 749 | */ 750 | proto.calculator.FindMaximumResponse.prototype.setMaximum = function(value) { 751 | return jspb.Message.setProto3IntField(this, 1, value); 752 | }; 753 | 754 | 755 | 756 | 757 | 758 | if (jspb.Message.GENERATE_TO_OBJECT) { 759 | /** 760 | * Creates an object representation of this proto. 761 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 762 | * Optional fields that are not set will be set to undefined. 763 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 764 | * For the list of reserved names please see: 765 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 766 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 767 | * JSPB instance for transitional soy proto support: 768 | * http://goto/soy-param-migration 769 | * @return {!Object} 770 | */ 771 | proto.calculator.ComputeAverageResponse.prototype.toObject = function(opt_includeInstance) { 772 | return proto.calculator.ComputeAverageResponse.toObject(opt_includeInstance, this); 773 | }; 774 | 775 | 776 | /** 777 | * Static version of the {@see toObject} method. 778 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 779 | * the JSPB instance for transitional soy proto support: 780 | * http://goto/soy-param-migration 781 | * @param {!proto.calculator.ComputeAverageResponse} msg The msg instance to transform. 782 | * @return {!Object} 783 | * @suppress {unusedLocalVariables} f is only used for nested messages 784 | */ 785 | proto.calculator.ComputeAverageResponse.toObject = function(includeInstance, msg) { 786 | var f, obj = { 787 | average: jspb.Message.getFloatingPointFieldWithDefault(msg, 1, 0.0) 788 | }; 789 | 790 | if (includeInstance) { 791 | obj.$jspbMessageInstance = msg; 792 | } 793 | return obj; 794 | }; 795 | } 796 | 797 | 798 | /** 799 | * Deserializes binary data (in protobuf wire format). 800 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 801 | * @return {!proto.calculator.ComputeAverageResponse} 802 | */ 803 | proto.calculator.ComputeAverageResponse.deserializeBinary = function(bytes) { 804 | var reader = new jspb.BinaryReader(bytes); 805 | var msg = new proto.calculator.ComputeAverageResponse; 806 | return proto.calculator.ComputeAverageResponse.deserializeBinaryFromReader(msg, reader); 807 | }; 808 | 809 | 810 | /** 811 | * Deserializes binary data (in protobuf wire format) from the 812 | * given reader into the given message object. 813 | * @param {!proto.calculator.ComputeAverageResponse} msg The message object to deserialize into. 814 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 815 | * @return {!proto.calculator.ComputeAverageResponse} 816 | */ 817 | proto.calculator.ComputeAverageResponse.deserializeBinaryFromReader = function(msg, reader) { 818 | while (reader.nextField()) { 819 | if (reader.isEndGroup()) { 820 | break; 821 | } 822 | var field = reader.getFieldNumber(); 823 | switch (field) { 824 | case 1: 825 | var value = /** @type {number} */ (reader.readDouble()); 826 | msg.setAverage(value); 827 | break; 828 | default: 829 | reader.skipField(); 830 | break; 831 | } 832 | } 833 | return msg; 834 | }; 835 | 836 | 837 | /** 838 | * Serializes the message to binary data (in protobuf wire format). 839 | * @return {!Uint8Array} 840 | */ 841 | proto.calculator.ComputeAverageResponse.prototype.serializeBinary = function() { 842 | var writer = new jspb.BinaryWriter(); 843 | proto.calculator.ComputeAverageResponse.serializeBinaryToWriter(this, writer); 844 | return writer.getResultBuffer(); 845 | }; 846 | 847 | 848 | /** 849 | * Serializes the given message to binary data (in protobuf wire 850 | * format), writing to the given BinaryWriter. 851 | * @param {!proto.calculator.ComputeAverageResponse} message 852 | * @param {!jspb.BinaryWriter} writer 853 | * @suppress {unusedLocalVariables} f is only used for nested messages 854 | */ 855 | proto.calculator.ComputeAverageResponse.serializeBinaryToWriter = function(message, writer) { 856 | var f = undefined; 857 | f = message.getAverage(); 858 | if (f !== 0.0) { 859 | writer.writeDouble( 860 | 1, 861 | f 862 | ); 863 | } 864 | }; 865 | 866 | 867 | /** 868 | * optional double average = 1; 869 | * @return {number} 870 | */ 871 | proto.calculator.ComputeAverageResponse.prototype.getAverage = function() { 872 | return /** @type {number} */ (jspb.Message.getFloatingPointFieldWithDefault(this, 1, 0.0)); 873 | }; 874 | 875 | 876 | /** 877 | * @param {number} value 878 | * @return {!proto.calculator.ComputeAverageResponse} returns this 879 | */ 880 | proto.calculator.ComputeAverageResponse.prototype.setAverage = function(value) { 881 | return jspb.Message.setProto3FloatField(this, 1, value); 882 | }; 883 | 884 | 885 | 886 | 887 | 888 | if (jspb.Message.GENERATE_TO_OBJECT) { 889 | /** 890 | * Creates an object representation of this proto. 891 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 892 | * Optional fields that are not set will be set to undefined. 893 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 894 | * For the list of reserved names please see: 895 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 896 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 897 | * JSPB instance for transitional soy proto support: 898 | * http://goto/soy-param-migration 899 | * @return {!Object} 900 | */ 901 | proto.calculator.ComputeAverageRequest.prototype.toObject = function(opt_includeInstance) { 902 | return proto.calculator.ComputeAverageRequest.toObject(opt_includeInstance, this); 903 | }; 904 | 905 | 906 | /** 907 | * Static version of the {@see toObject} method. 908 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 909 | * the JSPB instance for transitional soy proto support: 910 | * http://goto/soy-param-migration 911 | * @param {!proto.calculator.ComputeAverageRequest} msg The msg instance to transform. 912 | * @return {!Object} 913 | * @suppress {unusedLocalVariables} f is only used for nested messages 914 | */ 915 | proto.calculator.ComputeAverageRequest.toObject = function(includeInstance, msg) { 916 | var f, obj = { 917 | number: jspb.Message.getFieldWithDefault(msg, 1, 0) 918 | }; 919 | 920 | if (includeInstance) { 921 | obj.$jspbMessageInstance = msg; 922 | } 923 | return obj; 924 | }; 925 | } 926 | 927 | 928 | /** 929 | * Deserializes binary data (in protobuf wire format). 930 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 931 | * @return {!proto.calculator.ComputeAverageRequest} 932 | */ 933 | proto.calculator.ComputeAverageRequest.deserializeBinary = function(bytes) { 934 | var reader = new jspb.BinaryReader(bytes); 935 | var msg = new proto.calculator.ComputeAverageRequest; 936 | return proto.calculator.ComputeAverageRequest.deserializeBinaryFromReader(msg, reader); 937 | }; 938 | 939 | 940 | /** 941 | * Deserializes binary data (in protobuf wire format) from the 942 | * given reader into the given message object. 943 | * @param {!proto.calculator.ComputeAverageRequest} msg The message object to deserialize into. 944 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 945 | * @return {!proto.calculator.ComputeAverageRequest} 946 | */ 947 | proto.calculator.ComputeAverageRequest.deserializeBinaryFromReader = function(msg, reader) { 948 | while (reader.nextField()) { 949 | if (reader.isEndGroup()) { 950 | break; 951 | } 952 | var field = reader.getFieldNumber(); 953 | switch (field) { 954 | case 1: 955 | var value = /** @type {number} */ (reader.readInt32()); 956 | msg.setNumber(value); 957 | break; 958 | default: 959 | reader.skipField(); 960 | break; 961 | } 962 | } 963 | return msg; 964 | }; 965 | 966 | 967 | /** 968 | * Serializes the message to binary data (in protobuf wire format). 969 | * @return {!Uint8Array} 970 | */ 971 | proto.calculator.ComputeAverageRequest.prototype.serializeBinary = function() { 972 | var writer = new jspb.BinaryWriter(); 973 | proto.calculator.ComputeAverageRequest.serializeBinaryToWriter(this, writer); 974 | return writer.getResultBuffer(); 975 | }; 976 | 977 | 978 | /** 979 | * Serializes the given message to binary data (in protobuf wire 980 | * format), writing to the given BinaryWriter. 981 | * @param {!proto.calculator.ComputeAverageRequest} message 982 | * @param {!jspb.BinaryWriter} writer 983 | * @suppress {unusedLocalVariables} f is only used for nested messages 984 | */ 985 | proto.calculator.ComputeAverageRequest.serializeBinaryToWriter = function(message, writer) { 986 | var f = undefined; 987 | f = message.getNumber(); 988 | if (f !== 0) { 989 | writer.writeInt32( 990 | 1, 991 | f 992 | ); 993 | } 994 | }; 995 | 996 | 997 | /** 998 | * optional int32 number = 1; 999 | * @return {number} 1000 | */ 1001 | proto.calculator.ComputeAverageRequest.prototype.getNumber = function() { 1002 | return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); 1003 | }; 1004 | 1005 | 1006 | /** 1007 | * @param {number} value 1008 | * @return {!proto.calculator.ComputeAverageRequest} returns this 1009 | */ 1010 | proto.calculator.ComputeAverageRequest.prototype.setNumber = function(value) { 1011 | return jspb.Message.setProto3IntField(this, 1, value); 1012 | }; 1013 | 1014 | 1015 | 1016 | 1017 | 1018 | if (jspb.Message.GENERATE_TO_OBJECT) { 1019 | /** 1020 | * Creates an object representation of this proto. 1021 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 1022 | * Optional fields that are not set will be set to undefined. 1023 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 1024 | * For the list of reserved names please see: 1025 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 1026 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 1027 | * JSPB instance for transitional soy proto support: 1028 | * http://goto/soy-param-migration 1029 | * @return {!Object} 1030 | */ 1031 | proto.calculator.PrimeNumberDecompositionRequest.prototype.toObject = function(opt_includeInstance) { 1032 | return proto.calculator.PrimeNumberDecompositionRequest.toObject(opt_includeInstance, this); 1033 | }; 1034 | 1035 | 1036 | /** 1037 | * Static version of the {@see toObject} method. 1038 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 1039 | * the JSPB instance for transitional soy proto support: 1040 | * http://goto/soy-param-migration 1041 | * @param {!proto.calculator.PrimeNumberDecompositionRequest} msg The msg instance to transform. 1042 | * @return {!Object} 1043 | * @suppress {unusedLocalVariables} f is only used for nested messages 1044 | */ 1045 | proto.calculator.PrimeNumberDecompositionRequest.toObject = function(includeInstance, msg) { 1046 | var f, obj = { 1047 | number: jspb.Message.getFieldWithDefault(msg, 1, 0) 1048 | }; 1049 | 1050 | if (includeInstance) { 1051 | obj.$jspbMessageInstance = msg; 1052 | } 1053 | return obj; 1054 | }; 1055 | } 1056 | 1057 | 1058 | /** 1059 | * Deserializes binary data (in protobuf wire format). 1060 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 1061 | * @return {!proto.calculator.PrimeNumberDecompositionRequest} 1062 | */ 1063 | proto.calculator.PrimeNumberDecompositionRequest.deserializeBinary = function(bytes) { 1064 | var reader = new jspb.BinaryReader(bytes); 1065 | var msg = new proto.calculator.PrimeNumberDecompositionRequest; 1066 | return proto.calculator.PrimeNumberDecompositionRequest.deserializeBinaryFromReader(msg, reader); 1067 | }; 1068 | 1069 | 1070 | /** 1071 | * Deserializes binary data (in protobuf wire format) from the 1072 | * given reader into the given message object. 1073 | * @param {!proto.calculator.PrimeNumberDecompositionRequest} msg The message object to deserialize into. 1074 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 1075 | * @return {!proto.calculator.PrimeNumberDecompositionRequest} 1076 | */ 1077 | proto.calculator.PrimeNumberDecompositionRequest.deserializeBinaryFromReader = function(msg, reader) { 1078 | while (reader.nextField()) { 1079 | if (reader.isEndGroup()) { 1080 | break; 1081 | } 1082 | var field = reader.getFieldNumber(); 1083 | switch (field) { 1084 | case 1: 1085 | var value = /** @type {number} */ (reader.readInt32()); 1086 | msg.setNumber(value); 1087 | break; 1088 | default: 1089 | reader.skipField(); 1090 | break; 1091 | } 1092 | } 1093 | return msg; 1094 | }; 1095 | 1096 | 1097 | /** 1098 | * Serializes the message to binary data (in protobuf wire format). 1099 | * @return {!Uint8Array} 1100 | */ 1101 | proto.calculator.PrimeNumberDecompositionRequest.prototype.serializeBinary = function() { 1102 | var writer = new jspb.BinaryWriter(); 1103 | proto.calculator.PrimeNumberDecompositionRequest.serializeBinaryToWriter(this, writer); 1104 | return writer.getResultBuffer(); 1105 | }; 1106 | 1107 | 1108 | /** 1109 | * Serializes the given message to binary data (in protobuf wire 1110 | * format), writing to the given BinaryWriter. 1111 | * @param {!proto.calculator.PrimeNumberDecompositionRequest} message 1112 | * @param {!jspb.BinaryWriter} writer 1113 | * @suppress {unusedLocalVariables} f is only used for nested messages 1114 | */ 1115 | proto.calculator.PrimeNumberDecompositionRequest.serializeBinaryToWriter = function(message, writer) { 1116 | var f = undefined; 1117 | f = message.getNumber(); 1118 | if (f !== 0) { 1119 | writer.writeInt32( 1120 | 1, 1121 | f 1122 | ); 1123 | } 1124 | }; 1125 | 1126 | 1127 | /** 1128 | * optional int32 number = 1; 1129 | * @return {number} 1130 | */ 1131 | proto.calculator.PrimeNumberDecompositionRequest.prototype.getNumber = function() { 1132 | return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); 1133 | }; 1134 | 1135 | 1136 | /** 1137 | * @param {number} value 1138 | * @return {!proto.calculator.PrimeNumberDecompositionRequest} returns this 1139 | */ 1140 | proto.calculator.PrimeNumberDecompositionRequest.prototype.setNumber = function(value) { 1141 | return jspb.Message.setProto3IntField(this, 1, value); 1142 | }; 1143 | 1144 | 1145 | 1146 | 1147 | 1148 | if (jspb.Message.GENERATE_TO_OBJECT) { 1149 | /** 1150 | * Creates an object representation of this proto. 1151 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 1152 | * Optional fields that are not set will be set to undefined. 1153 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 1154 | * For the list of reserved names please see: 1155 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 1156 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 1157 | * JSPB instance for transitional soy proto support: 1158 | * http://goto/soy-param-migration 1159 | * @return {!Object} 1160 | */ 1161 | proto.calculator.PrimeNumberDecompositionResponse.prototype.toObject = function(opt_includeInstance) { 1162 | return proto.calculator.PrimeNumberDecompositionResponse.toObject(opt_includeInstance, this); 1163 | }; 1164 | 1165 | 1166 | /** 1167 | * Static version of the {@see toObject} method. 1168 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 1169 | * the JSPB instance for transitional soy proto support: 1170 | * http://goto/soy-param-migration 1171 | * @param {!proto.calculator.PrimeNumberDecompositionResponse} msg The msg instance to transform. 1172 | * @return {!Object} 1173 | * @suppress {unusedLocalVariables} f is only used for nested messages 1174 | */ 1175 | proto.calculator.PrimeNumberDecompositionResponse.toObject = function(includeInstance, msg) { 1176 | var f, obj = { 1177 | primeFactor: jspb.Message.getFieldWithDefault(msg, 1, 0) 1178 | }; 1179 | 1180 | if (includeInstance) { 1181 | obj.$jspbMessageInstance = msg; 1182 | } 1183 | return obj; 1184 | }; 1185 | } 1186 | 1187 | 1188 | /** 1189 | * Deserializes binary data (in protobuf wire format). 1190 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 1191 | * @return {!proto.calculator.PrimeNumberDecompositionResponse} 1192 | */ 1193 | proto.calculator.PrimeNumberDecompositionResponse.deserializeBinary = function(bytes) { 1194 | var reader = new jspb.BinaryReader(bytes); 1195 | var msg = new proto.calculator.PrimeNumberDecompositionResponse; 1196 | return proto.calculator.PrimeNumberDecompositionResponse.deserializeBinaryFromReader(msg, reader); 1197 | }; 1198 | 1199 | 1200 | /** 1201 | * Deserializes binary data (in protobuf wire format) from the 1202 | * given reader into the given message object. 1203 | * @param {!proto.calculator.PrimeNumberDecompositionResponse} msg The message object to deserialize into. 1204 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 1205 | * @return {!proto.calculator.PrimeNumberDecompositionResponse} 1206 | */ 1207 | proto.calculator.PrimeNumberDecompositionResponse.deserializeBinaryFromReader = function(msg, reader) { 1208 | while (reader.nextField()) { 1209 | if (reader.isEndGroup()) { 1210 | break; 1211 | } 1212 | var field = reader.getFieldNumber(); 1213 | switch (field) { 1214 | case 1: 1215 | var value = /** @type {number} */ (reader.readInt32()); 1216 | msg.setPrimeFactor(value); 1217 | break; 1218 | default: 1219 | reader.skipField(); 1220 | break; 1221 | } 1222 | } 1223 | return msg; 1224 | }; 1225 | 1226 | 1227 | /** 1228 | * Serializes the message to binary data (in protobuf wire format). 1229 | * @return {!Uint8Array} 1230 | */ 1231 | proto.calculator.PrimeNumberDecompositionResponse.prototype.serializeBinary = function() { 1232 | var writer = new jspb.BinaryWriter(); 1233 | proto.calculator.PrimeNumberDecompositionResponse.serializeBinaryToWriter(this, writer); 1234 | return writer.getResultBuffer(); 1235 | }; 1236 | 1237 | 1238 | /** 1239 | * Serializes the given message to binary data (in protobuf wire 1240 | * format), writing to the given BinaryWriter. 1241 | * @param {!proto.calculator.PrimeNumberDecompositionResponse} message 1242 | * @param {!jspb.BinaryWriter} writer 1243 | * @suppress {unusedLocalVariables} f is only used for nested messages 1244 | */ 1245 | proto.calculator.PrimeNumberDecompositionResponse.serializeBinaryToWriter = function(message, writer) { 1246 | var f = undefined; 1247 | f = message.getPrimeFactor(); 1248 | if (f !== 0) { 1249 | writer.writeInt32( 1250 | 1, 1251 | f 1252 | ); 1253 | } 1254 | }; 1255 | 1256 | 1257 | /** 1258 | * optional int32 prime_factor = 1; 1259 | * @return {number} 1260 | */ 1261 | proto.calculator.PrimeNumberDecompositionResponse.prototype.getPrimeFactor = function() { 1262 | return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); 1263 | }; 1264 | 1265 | 1266 | /** 1267 | * @param {number} value 1268 | * @return {!proto.calculator.PrimeNumberDecompositionResponse} returns this 1269 | */ 1270 | proto.calculator.PrimeNumberDecompositionResponse.prototype.setPrimeFactor = function(value) { 1271 | return jspb.Message.setProto3IntField(this, 1, value); 1272 | }; 1273 | 1274 | 1275 | 1276 | 1277 | 1278 | if (jspb.Message.GENERATE_TO_OBJECT) { 1279 | /** 1280 | * Creates an object representation of this proto. 1281 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 1282 | * Optional fields that are not set will be set to undefined. 1283 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 1284 | * For the list of reserved names please see: 1285 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 1286 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 1287 | * JSPB instance for transitional soy proto support: 1288 | * http://goto/soy-param-migration 1289 | * @return {!Object} 1290 | */ 1291 | proto.calculator.SumRequest.prototype.toObject = function(opt_includeInstance) { 1292 | return proto.calculator.SumRequest.toObject(opt_includeInstance, this); 1293 | }; 1294 | 1295 | 1296 | /** 1297 | * Static version of the {@see toObject} method. 1298 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 1299 | * the JSPB instance for transitional soy proto support: 1300 | * http://goto/soy-param-migration 1301 | * @param {!proto.calculator.SumRequest} msg The msg instance to transform. 1302 | * @return {!Object} 1303 | * @suppress {unusedLocalVariables} f is only used for nested messages 1304 | */ 1305 | proto.calculator.SumRequest.toObject = function(includeInstance, msg) { 1306 | var f, obj = { 1307 | firstNumber: jspb.Message.getFieldWithDefault(msg, 1, 0), 1308 | secondNumber: jspb.Message.getFieldWithDefault(msg, 2, 0) 1309 | }; 1310 | 1311 | if (includeInstance) { 1312 | obj.$jspbMessageInstance = msg; 1313 | } 1314 | return obj; 1315 | }; 1316 | } 1317 | 1318 | 1319 | /** 1320 | * Deserializes binary data (in protobuf wire format). 1321 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 1322 | * @return {!proto.calculator.SumRequest} 1323 | */ 1324 | proto.calculator.SumRequest.deserializeBinary = function(bytes) { 1325 | var reader = new jspb.BinaryReader(bytes); 1326 | var msg = new proto.calculator.SumRequest; 1327 | return proto.calculator.SumRequest.deserializeBinaryFromReader(msg, reader); 1328 | }; 1329 | 1330 | 1331 | /** 1332 | * Deserializes binary data (in protobuf wire format) from the 1333 | * given reader into the given message object. 1334 | * @param {!proto.calculator.SumRequest} msg The message object to deserialize into. 1335 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 1336 | * @return {!proto.calculator.SumRequest} 1337 | */ 1338 | proto.calculator.SumRequest.deserializeBinaryFromReader = function(msg, reader) { 1339 | while (reader.nextField()) { 1340 | if (reader.isEndGroup()) { 1341 | break; 1342 | } 1343 | var field = reader.getFieldNumber(); 1344 | switch (field) { 1345 | case 1: 1346 | var value = /** @type {number} */ (reader.readInt32()); 1347 | msg.setFirstNumber(value); 1348 | break; 1349 | case 2: 1350 | var value = /** @type {number} */ (reader.readInt32()); 1351 | msg.setSecondNumber(value); 1352 | break; 1353 | default: 1354 | reader.skipField(); 1355 | break; 1356 | } 1357 | } 1358 | return msg; 1359 | }; 1360 | 1361 | 1362 | /** 1363 | * Serializes the message to binary data (in protobuf wire format). 1364 | * @return {!Uint8Array} 1365 | */ 1366 | proto.calculator.SumRequest.prototype.serializeBinary = function() { 1367 | var writer = new jspb.BinaryWriter(); 1368 | proto.calculator.SumRequest.serializeBinaryToWriter(this, writer); 1369 | return writer.getResultBuffer(); 1370 | }; 1371 | 1372 | 1373 | /** 1374 | * Serializes the given message to binary data (in protobuf wire 1375 | * format), writing to the given BinaryWriter. 1376 | * @param {!proto.calculator.SumRequest} message 1377 | * @param {!jspb.BinaryWriter} writer 1378 | * @suppress {unusedLocalVariables} f is only used for nested messages 1379 | */ 1380 | proto.calculator.SumRequest.serializeBinaryToWriter = function(message, writer) { 1381 | var f = undefined; 1382 | f = message.getFirstNumber(); 1383 | if (f !== 0) { 1384 | writer.writeInt32( 1385 | 1, 1386 | f 1387 | ); 1388 | } 1389 | f = message.getSecondNumber(); 1390 | if (f !== 0) { 1391 | writer.writeInt32( 1392 | 2, 1393 | f 1394 | ); 1395 | } 1396 | }; 1397 | 1398 | 1399 | /** 1400 | * optional int32 first_number = 1; 1401 | * @return {number} 1402 | */ 1403 | proto.calculator.SumRequest.prototype.getFirstNumber = function() { 1404 | return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); 1405 | }; 1406 | 1407 | 1408 | /** 1409 | * @param {number} value 1410 | * @return {!proto.calculator.SumRequest} returns this 1411 | */ 1412 | proto.calculator.SumRequest.prototype.setFirstNumber = function(value) { 1413 | return jspb.Message.setProto3IntField(this, 1, value); 1414 | }; 1415 | 1416 | 1417 | /** 1418 | * optional int32 second_number = 2; 1419 | * @return {number} 1420 | */ 1421 | proto.calculator.SumRequest.prototype.getSecondNumber = function() { 1422 | return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 2, 0)); 1423 | }; 1424 | 1425 | 1426 | /** 1427 | * @param {number} value 1428 | * @return {!proto.calculator.SumRequest} returns this 1429 | */ 1430 | proto.calculator.SumRequest.prototype.setSecondNumber = function(value) { 1431 | return jspb.Message.setProto3IntField(this, 2, value); 1432 | }; 1433 | 1434 | 1435 | 1436 | 1437 | 1438 | if (jspb.Message.GENERATE_TO_OBJECT) { 1439 | /** 1440 | * Creates an object representation of this proto. 1441 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 1442 | * Optional fields that are not set will be set to undefined. 1443 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 1444 | * For the list of reserved names please see: 1445 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 1446 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 1447 | * JSPB instance for transitional soy proto support: 1448 | * http://goto/soy-param-migration 1449 | * @return {!Object} 1450 | */ 1451 | proto.calculator.SumResponse.prototype.toObject = function(opt_includeInstance) { 1452 | return proto.calculator.SumResponse.toObject(opt_includeInstance, this); 1453 | }; 1454 | 1455 | 1456 | /** 1457 | * Static version of the {@see toObject} method. 1458 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 1459 | * the JSPB instance for transitional soy proto support: 1460 | * http://goto/soy-param-migration 1461 | * @param {!proto.calculator.SumResponse} msg The msg instance to transform. 1462 | * @return {!Object} 1463 | * @suppress {unusedLocalVariables} f is only used for nested messages 1464 | */ 1465 | proto.calculator.SumResponse.toObject = function(includeInstance, msg) { 1466 | var f, obj = { 1467 | sumResult: jspb.Message.getFieldWithDefault(msg, 1, 0) 1468 | }; 1469 | 1470 | if (includeInstance) { 1471 | obj.$jspbMessageInstance = msg; 1472 | } 1473 | return obj; 1474 | }; 1475 | } 1476 | 1477 | 1478 | /** 1479 | * Deserializes binary data (in protobuf wire format). 1480 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 1481 | * @return {!proto.calculator.SumResponse} 1482 | */ 1483 | proto.calculator.SumResponse.deserializeBinary = function(bytes) { 1484 | var reader = new jspb.BinaryReader(bytes); 1485 | var msg = new proto.calculator.SumResponse; 1486 | return proto.calculator.SumResponse.deserializeBinaryFromReader(msg, reader); 1487 | }; 1488 | 1489 | 1490 | /** 1491 | * Deserializes binary data (in protobuf wire format) from the 1492 | * given reader into the given message object. 1493 | * @param {!proto.calculator.SumResponse} msg The message object to deserialize into. 1494 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 1495 | * @return {!proto.calculator.SumResponse} 1496 | */ 1497 | proto.calculator.SumResponse.deserializeBinaryFromReader = function(msg, reader) { 1498 | while (reader.nextField()) { 1499 | if (reader.isEndGroup()) { 1500 | break; 1501 | } 1502 | var field = reader.getFieldNumber(); 1503 | switch (field) { 1504 | case 1: 1505 | var value = /** @type {number} */ (reader.readInt32()); 1506 | msg.setSumResult(value); 1507 | break; 1508 | default: 1509 | reader.skipField(); 1510 | break; 1511 | } 1512 | } 1513 | return msg; 1514 | }; 1515 | 1516 | 1517 | /** 1518 | * Serializes the message to binary data (in protobuf wire format). 1519 | * @return {!Uint8Array} 1520 | */ 1521 | proto.calculator.SumResponse.prototype.serializeBinary = function() { 1522 | var writer = new jspb.BinaryWriter(); 1523 | proto.calculator.SumResponse.serializeBinaryToWriter(this, writer); 1524 | return writer.getResultBuffer(); 1525 | }; 1526 | 1527 | 1528 | /** 1529 | * Serializes the given message to binary data (in protobuf wire 1530 | * format), writing to the given BinaryWriter. 1531 | * @param {!proto.calculator.SumResponse} message 1532 | * @param {!jspb.BinaryWriter} writer 1533 | * @suppress {unusedLocalVariables} f is only used for nested messages 1534 | */ 1535 | proto.calculator.SumResponse.serializeBinaryToWriter = function(message, writer) { 1536 | var f = undefined; 1537 | f = message.getSumResult(); 1538 | if (f !== 0) { 1539 | writer.writeInt32( 1540 | 1, 1541 | f 1542 | ); 1543 | } 1544 | }; 1545 | 1546 | 1547 | /** 1548 | * optional int32 sum_result = 1; 1549 | * @return {number} 1550 | */ 1551 | proto.calculator.SumResponse.prototype.getSumResult = function() { 1552 | return /** @type {number} */ (jspb.Message.getFieldWithDefault(this, 1, 0)); 1553 | }; 1554 | 1555 | 1556 | /** 1557 | * @param {number} value 1558 | * @return {!proto.calculator.SumResponse} returns this 1559 | */ 1560 | proto.calculator.SumResponse.prototype.setSumResult = function(value) { 1561 | return jspb.Message.setProto3IntField(this, 1, value); 1562 | }; 1563 | 1564 | 1565 | goog.object.extend(exports, proto.calculator); 1566 | -------------------------------------------------------------------------------- /server/protos/dummy_grpc_pb.js: -------------------------------------------------------------------------------- 1 | // GENERATED CODE -- DO NOT EDIT! 2 | 3 | 'use strict'; 4 | var grpc = require('grpc'); 5 | var protos_dummy_pb = require('../protos/dummy_pb.js'); 6 | 7 | 8 | var DummyServiceService = exports.DummyServiceService = { 9 | }; 10 | 11 | exports.DummyServiceClient = grpc.makeGenericClientConstructor(DummyServiceService); 12 | -------------------------------------------------------------------------------- /server/protos/dummy_pb.js: -------------------------------------------------------------------------------- 1 | // source: protos/dummy.proto 2 | /** 3 | * @fileoverview 4 | * @enhanceable 5 | * @suppress {messageConventions} JS Compiler reports an error if a variable or 6 | * field starts with 'MSG_' and isn't a translatable message. 7 | * @public 8 | */ 9 | // GENERATED CODE -- DO NOT EDIT! 10 | 11 | var jspb = require('google-protobuf'); 12 | var goog = jspb; 13 | var global = Function('return this')(); 14 | 15 | goog.exportSymbol('proto.dummy.DummyMessage', null, global); 16 | /** 17 | * Generated by JsPbCodeGenerator. 18 | * @param {Array=} opt_data Optional initial data array, typically from a 19 | * server response, or constructed directly in Javascript. The array is used 20 | * in place and becomes part of the constructed object. It is not cloned. 21 | * If no data is provided, the constructed object will be empty, but still 22 | * valid. 23 | * @extends {jspb.Message} 24 | * @constructor 25 | */ 26 | proto.dummy.DummyMessage = function(opt_data) { 27 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 28 | }; 29 | goog.inherits(proto.dummy.DummyMessage, jspb.Message); 30 | if (goog.DEBUG && !COMPILED) { 31 | /** 32 | * @public 33 | * @override 34 | */ 35 | proto.dummy.DummyMessage.displayName = 'proto.dummy.DummyMessage'; 36 | } 37 | 38 | 39 | 40 | if (jspb.Message.GENERATE_TO_OBJECT) { 41 | /** 42 | * Creates an object representation of this proto. 43 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 44 | * Optional fields that are not set will be set to undefined. 45 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 46 | * For the list of reserved names please see: 47 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 48 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 49 | * JSPB instance for transitional soy proto support: 50 | * http://goto/soy-param-migration 51 | * @return {!Object} 52 | */ 53 | proto.dummy.DummyMessage.prototype.toObject = function(opt_includeInstance) { 54 | return proto.dummy.DummyMessage.toObject(opt_includeInstance, this); 55 | }; 56 | 57 | 58 | /** 59 | * Static version of the {@see toObject} method. 60 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 61 | * the JSPB instance for transitional soy proto support: 62 | * http://goto/soy-param-migration 63 | * @param {!proto.dummy.DummyMessage} msg The msg instance to transform. 64 | * @return {!Object} 65 | * @suppress {unusedLocalVariables} f is only used for nested messages 66 | */ 67 | proto.dummy.DummyMessage.toObject = function(includeInstance, msg) { 68 | var f, obj = { 69 | 70 | }; 71 | 72 | if (includeInstance) { 73 | obj.$jspbMessageInstance = msg; 74 | } 75 | return obj; 76 | }; 77 | } 78 | 79 | 80 | /** 81 | * Deserializes binary data (in protobuf wire format). 82 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 83 | * @return {!proto.dummy.DummyMessage} 84 | */ 85 | proto.dummy.DummyMessage.deserializeBinary = function(bytes) { 86 | var reader = new jspb.BinaryReader(bytes); 87 | var msg = new proto.dummy.DummyMessage; 88 | return proto.dummy.DummyMessage.deserializeBinaryFromReader(msg, reader); 89 | }; 90 | 91 | 92 | /** 93 | * Deserializes binary data (in protobuf wire format) from the 94 | * given reader into the given message object. 95 | * @param {!proto.dummy.DummyMessage} msg The message object to deserialize into. 96 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 97 | * @return {!proto.dummy.DummyMessage} 98 | */ 99 | proto.dummy.DummyMessage.deserializeBinaryFromReader = function(msg, reader) { 100 | while (reader.nextField()) { 101 | if (reader.isEndGroup()) { 102 | break; 103 | } 104 | var field = reader.getFieldNumber(); 105 | switch (field) { 106 | default: 107 | reader.skipField(); 108 | break; 109 | } 110 | } 111 | return msg; 112 | }; 113 | 114 | 115 | /** 116 | * Serializes the message to binary data (in protobuf wire format). 117 | * @return {!Uint8Array} 118 | */ 119 | proto.dummy.DummyMessage.prototype.serializeBinary = function() { 120 | var writer = new jspb.BinaryWriter(); 121 | proto.dummy.DummyMessage.serializeBinaryToWriter(this, writer); 122 | return writer.getResultBuffer(); 123 | }; 124 | 125 | 126 | /** 127 | * Serializes the given message to binary data (in protobuf wire 128 | * format), writing to the given BinaryWriter. 129 | * @param {!proto.dummy.DummyMessage} message 130 | * @param {!jspb.BinaryWriter} writer 131 | * @suppress {unusedLocalVariables} f is only used for nested messages 132 | */ 133 | proto.dummy.DummyMessage.serializeBinaryToWriter = function(message, writer) { 134 | var f = undefined; 135 | }; 136 | 137 | 138 | goog.object.extend(exports, proto.dummy); 139 | -------------------------------------------------------------------------------- /server/protos/greet_grpc_pb.js: -------------------------------------------------------------------------------- 1 | // GENERATED CODE -- DO NOT EDIT! 2 | 3 | 'use strict'; 4 | var grpc = require('grpc'); 5 | var protos_greet_pb = require('../protos/greet_pb.js'); 6 | 7 | function serialize_greet_GreetEveryoneRequest(arg) { 8 | if (!(arg instanceof protos_greet_pb.GreetEveryoneRequest)) { 9 | throw new Error('Expected argument of type greet.GreetEveryoneRequest'); 10 | } 11 | return Buffer.from(arg.serializeBinary()); 12 | } 13 | 14 | function deserialize_greet_GreetEveryoneRequest(buffer_arg) { 15 | return protos_greet_pb.GreetEveryoneRequest.deserializeBinary(new Uint8Array(buffer_arg)); 16 | } 17 | 18 | function serialize_greet_GreetEveryoneResponse(arg) { 19 | if (!(arg instanceof protos_greet_pb.GreetEveryoneResponse)) { 20 | throw new Error('Expected argument of type greet.GreetEveryoneResponse'); 21 | } 22 | return Buffer.from(arg.serializeBinary()); 23 | } 24 | 25 | function deserialize_greet_GreetEveryoneResponse(buffer_arg) { 26 | return protos_greet_pb.GreetEveryoneResponse.deserializeBinary(new Uint8Array(buffer_arg)); 27 | } 28 | 29 | function serialize_greet_GreetManyTimesRequest(arg) { 30 | if (!(arg instanceof protos_greet_pb.GreetManyTimesRequest)) { 31 | throw new Error('Expected argument of type greet.GreetManyTimesRequest'); 32 | } 33 | return Buffer.from(arg.serializeBinary()); 34 | } 35 | 36 | function deserialize_greet_GreetManyTimesRequest(buffer_arg) { 37 | return protos_greet_pb.GreetManyTimesRequest.deserializeBinary(new Uint8Array(buffer_arg)); 38 | } 39 | 40 | function serialize_greet_GreetManyTimesResponse(arg) { 41 | if (!(arg instanceof protos_greet_pb.GreetManyTimesResponse)) { 42 | throw new Error('Expected argument of type greet.GreetManyTimesResponse'); 43 | } 44 | return Buffer.from(arg.serializeBinary()); 45 | } 46 | 47 | function deserialize_greet_GreetManyTimesResponse(buffer_arg) { 48 | return protos_greet_pb.GreetManyTimesResponse.deserializeBinary(new Uint8Array(buffer_arg)); 49 | } 50 | 51 | function serialize_greet_GreetRequest(arg) { 52 | if (!(arg instanceof protos_greet_pb.GreetRequest)) { 53 | throw new Error('Expected argument of type greet.GreetRequest'); 54 | } 55 | return Buffer.from(arg.serializeBinary()); 56 | } 57 | 58 | function deserialize_greet_GreetRequest(buffer_arg) { 59 | return protos_greet_pb.GreetRequest.deserializeBinary(new Uint8Array(buffer_arg)); 60 | } 61 | 62 | function serialize_greet_GreetResponse(arg) { 63 | if (!(arg instanceof protos_greet_pb.GreetResponse)) { 64 | throw new Error('Expected argument of type greet.GreetResponse'); 65 | } 66 | return Buffer.from(arg.serializeBinary()); 67 | } 68 | 69 | function deserialize_greet_GreetResponse(buffer_arg) { 70 | return protos_greet_pb.GreetResponse.deserializeBinary(new Uint8Array(buffer_arg)); 71 | } 72 | 73 | function serialize_greet_LongGreetRequest(arg) { 74 | if (!(arg instanceof protos_greet_pb.LongGreetRequest)) { 75 | throw new Error('Expected argument of type greet.LongGreetRequest'); 76 | } 77 | return Buffer.from(arg.serializeBinary()); 78 | } 79 | 80 | function deserialize_greet_LongGreetRequest(buffer_arg) { 81 | return protos_greet_pb.LongGreetRequest.deserializeBinary(new Uint8Array(buffer_arg)); 82 | } 83 | 84 | function serialize_greet_LongGreetResponse(arg) { 85 | if (!(arg instanceof protos_greet_pb.LongGreetResponse)) { 86 | throw new Error('Expected argument of type greet.LongGreetResponse'); 87 | } 88 | return Buffer.from(arg.serializeBinary()); 89 | } 90 | 91 | function deserialize_greet_LongGreetResponse(buffer_arg) { 92 | return protos_greet_pb.LongGreetResponse.deserializeBinary(new Uint8Array(buffer_arg)); 93 | } 94 | 95 | 96 | var GreetServiceService = exports.GreetServiceService = { 97 | // unary API 98 | greet: { 99 | path: '/greet.GreetService/Greet', 100 | requestStream: false, 101 | responseStream: false, 102 | requestType: protos_greet_pb.GreetRequest, 103 | responseType: protos_greet_pb.GreetResponse, 104 | requestSerialize: serialize_greet_GreetRequest, 105 | requestDeserialize: deserialize_greet_GreetRequest, 106 | responseSerialize: serialize_greet_GreetResponse, 107 | responseDeserialize: deserialize_greet_GreetResponse, 108 | }, 109 | // Server streaming API 110 | greetManyTimes: { 111 | path: '/greet.GreetService/GreetManyTimes', 112 | requestStream: false, 113 | responseStream: true, 114 | requestType: protos_greet_pb.GreetManyTimesRequest, 115 | responseType: protos_greet_pb.GreetManyTimesResponse, 116 | requestSerialize: serialize_greet_GreetManyTimesRequest, 117 | requestDeserialize: deserialize_greet_GreetManyTimesRequest, 118 | responseSerialize: serialize_greet_GreetManyTimesResponse, 119 | responseDeserialize: deserialize_greet_GreetManyTimesResponse, 120 | }, 121 | // Client Streaming 122 | longGreet: { 123 | path: '/greet.GreetService/LongGreet', 124 | requestStream: true, 125 | responseStream: false, 126 | requestType: protos_greet_pb.LongGreetRequest, 127 | responseType: protos_greet_pb.LongGreetResponse, 128 | requestSerialize: serialize_greet_LongGreetRequest, 129 | requestDeserialize: deserialize_greet_LongGreetRequest, 130 | responseSerialize: serialize_greet_LongGreetResponse, 131 | responseDeserialize: deserialize_greet_LongGreetResponse, 132 | }, 133 | // BiDi Streaming 134 | greetEveryone: { 135 | path: '/greet.GreetService/GreetEveryone', 136 | requestStream: true, 137 | responseStream: true, 138 | requestType: protos_greet_pb.GreetEveryoneRequest, 139 | responseType: protos_greet_pb.GreetEveryoneResponse, 140 | requestSerialize: serialize_greet_GreetEveryoneRequest, 141 | requestDeserialize: deserialize_greet_GreetEveryoneRequest, 142 | responseSerialize: serialize_greet_GreetEveryoneResponse, 143 | responseDeserialize: deserialize_greet_GreetEveryoneResponse, 144 | }, 145 | }; 146 | 147 | exports.GreetServiceClient = grpc.makeGenericClientConstructor(GreetServiceService); 148 | -------------------------------------------------------------------------------- /server/protos/greet_pb.js: -------------------------------------------------------------------------------- 1 | // source: protos/greet.proto 2 | /** 3 | * @fileoverview 4 | * @enhanceable 5 | * @suppress {messageConventions} JS Compiler reports an error if a variable or 6 | * field starts with 'MSG_' and isn't a translatable message. 7 | * @public 8 | */ 9 | // GENERATED CODE -- DO NOT EDIT! 10 | 11 | var jspb = require('google-protobuf'); 12 | var goog = jspb; 13 | var global = Function('return this')(); 14 | 15 | goog.exportSymbol('proto.greet.GreetEveryoneRequest', null, global); 16 | goog.exportSymbol('proto.greet.GreetEveryoneResponse', null, global); 17 | goog.exportSymbol('proto.greet.GreetManyTimesRequest', null, global); 18 | goog.exportSymbol('proto.greet.GreetManyTimesResponse', null, global); 19 | goog.exportSymbol('proto.greet.GreetRequest', null, global); 20 | goog.exportSymbol('proto.greet.GreetResponse', null, global); 21 | goog.exportSymbol('proto.greet.Greeting', null, global); 22 | goog.exportSymbol('proto.greet.LongGreetRequest', null, global); 23 | goog.exportSymbol('proto.greet.LongGreetResponse', null, global); 24 | /** 25 | * Generated by JsPbCodeGenerator. 26 | * @param {Array=} opt_data Optional initial data array, typically from a 27 | * server response, or constructed directly in Javascript. The array is used 28 | * in place and becomes part of the constructed object. It is not cloned. 29 | * If no data is provided, the constructed object will be empty, but still 30 | * valid. 31 | * @extends {jspb.Message} 32 | * @constructor 33 | */ 34 | proto.greet.GreetEveryoneRequest = function(opt_data) { 35 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 36 | }; 37 | goog.inherits(proto.greet.GreetEveryoneRequest, jspb.Message); 38 | if (goog.DEBUG && !COMPILED) { 39 | /** 40 | * @public 41 | * @override 42 | */ 43 | proto.greet.GreetEveryoneRequest.displayName = 'proto.greet.GreetEveryoneRequest'; 44 | } 45 | /** 46 | * Generated by JsPbCodeGenerator. 47 | * @param {Array=} opt_data Optional initial data array, typically from a 48 | * server response, or constructed directly in Javascript. The array is used 49 | * in place and becomes part of the constructed object. It is not cloned. 50 | * If no data is provided, the constructed object will be empty, but still 51 | * valid. 52 | * @extends {jspb.Message} 53 | * @constructor 54 | */ 55 | proto.greet.GreetEveryoneResponse = function(opt_data) { 56 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 57 | }; 58 | goog.inherits(proto.greet.GreetEveryoneResponse, jspb.Message); 59 | if (goog.DEBUG && !COMPILED) { 60 | /** 61 | * @public 62 | * @override 63 | */ 64 | proto.greet.GreetEveryoneResponse.displayName = 'proto.greet.GreetEveryoneResponse'; 65 | } 66 | /** 67 | * Generated by JsPbCodeGenerator. 68 | * @param {Array=} opt_data Optional initial data array, typically from a 69 | * server response, or constructed directly in Javascript. The array is used 70 | * in place and becomes part of the constructed object. It is not cloned. 71 | * If no data is provided, the constructed object will be empty, but still 72 | * valid. 73 | * @extends {jspb.Message} 74 | * @constructor 75 | */ 76 | proto.greet.LongGreetRequest = function(opt_data) { 77 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 78 | }; 79 | goog.inherits(proto.greet.LongGreetRequest, jspb.Message); 80 | if (goog.DEBUG && !COMPILED) { 81 | /** 82 | * @public 83 | * @override 84 | */ 85 | proto.greet.LongGreetRequest.displayName = 'proto.greet.LongGreetRequest'; 86 | } 87 | /** 88 | * Generated by JsPbCodeGenerator. 89 | * @param {Array=} opt_data Optional initial data array, typically from a 90 | * server response, or constructed directly in Javascript. The array is used 91 | * in place and becomes part of the constructed object. It is not cloned. 92 | * If no data is provided, the constructed object will be empty, but still 93 | * valid. 94 | * @extends {jspb.Message} 95 | * @constructor 96 | */ 97 | proto.greet.LongGreetResponse = function(opt_data) { 98 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 99 | }; 100 | goog.inherits(proto.greet.LongGreetResponse, jspb.Message); 101 | if (goog.DEBUG && !COMPILED) { 102 | /** 103 | * @public 104 | * @override 105 | */ 106 | proto.greet.LongGreetResponse.displayName = 'proto.greet.LongGreetResponse'; 107 | } 108 | /** 109 | * Generated by JsPbCodeGenerator. 110 | * @param {Array=} opt_data Optional initial data array, typically from a 111 | * server response, or constructed directly in Javascript. The array is used 112 | * in place and becomes part of the constructed object. It is not cloned. 113 | * If no data is provided, the constructed object will be empty, but still 114 | * valid. 115 | * @extends {jspb.Message} 116 | * @constructor 117 | */ 118 | proto.greet.GreetManyTimesRequest = function(opt_data) { 119 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 120 | }; 121 | goog.inherits(proto.greet.GreetManyTimesRequest, jspb.Message); 122 | if (goog.DEBUG && !COMPILED) { 123 | /** 124 | * @public 125 | * @override 126 | */ 127 | proto.greet.GreetManyTimesRequest.displayName = 'proto.greet.GreetManyTimesRequest'; 128 | } 129 | /** 130 | * Generated by JsPbCodeGenerator. 131 | * @param {Array=} opt_data Optional initial data array, typically from a 132 | * server response, or constructed directly in Javascript. The array is used 133 | * in place and becomes part of the constructed object. It is not cloned. 134 | * If no data is provided, the constructed object will be empty, but still 135 | * valid. 136 | * @extends {jspb.Message} 137 | * @constructor 138 | */ 139 | proto.greet.GreetManyTimesResponse = function(opt_data) { 140 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 141 | }; 142 | goog.inherits(proto.greet.GreetManyTimesResponse, jspb.Message); 143 | if (goog.DEBUG && !COMPILED) { 144 | /** 145 | * @public 146 | * @override 147 | */ 148 | proto.greet.GreetManyTimesResponse.displayName = 'proto.greet.GreetManyTimesResponse'; 149 | } 150 | /** 151 | * Generated by JsPbCodeGenerator. 152 | * @param {Array=} opt_data Optional initial data array, typically from a 153 | * server response, or constructed directly in Javascript. The array is used 154 | * in place and becomes part of the constructed object. It is not cloned. 155 | * If no data is provided, the constructed object will be empty, but still 156 | * valid. 157 | * @extends {jspb.Message} 158 | * @constructor 159 | */ 160 | proto.greet.Greeting = function(opt_data) { 161 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 162 | }; 163 | goog.inherits(proto.greet.Greeting, jspb.Message); 164 | if (goog.DEBUG && !COMPILED) { 165 | /** 166 | * @public 167 | * @override 168 | */ 169 | proto.greet.Greeting.displayName = 'proto.greet.Greeting'; 170 | } 171 | /** 172 | * Generated by JsPbCodeGenerator. 173 | * @param {Array=} opt_data Optional initial data array, typically from a 174 | * server response, or constructed directly in Javascript. The array is used 175 | * in place and becomes part of the constructed object. It is not cloned. 176 | * If no data is provided, the constructed object will be empty, but still 177 | * valid. 178 | * @extends {jspb.Message} 179 | * @constructor 180 | */ 181 | proto.greet.GreetRequest = function(opt_data) { 182 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 183 | }; 184 | goog.inherits(proto.greet.GreetRequest, jspb.Message); 185 | if (goog.DEBUG && !COMPILED) { 186 | /** 187 | * @public 188 | * @override 189 | */ 190 | proto.greet.GreetRequest.displayName = 'proto.greet.GreetRequest'; 191 | } 192 | /** 193 | * Generated by JsPbCodeGenerator. 194 | * @param {Array=} opt_data Optional initial data array, typically from a 195 | * server response, or constructed directly in Javascript. The array is used 196 | * in place and becomes part of the constructed object. It is not cloned. 197 | * If no data is provided, the constructed object will be empty, but still 198 | * valid. 199 | * @extends {jspb.Message} 200 | * @constructor 201 | */ 202 | proto.greet.GreetResponse = function(opt_data) { 203 | jspb.Message.initialize(this, opt_data, 0, -1, null, null); 204 | }; 205 | goog.inherits(proto.greet.GreetResponse, jspb.Message); 206 | if (goog.DEBUG && !COMPILED) { 207 | /** 208 | * @public 209 | * @override 210 | */ 211 | proto.greet.GreetResponse.displayName = 'proto.greet.GreetResponse'; 212 | } 213 | 214 | 215 | 216 | if (jspb.Message.GENERATE_TO_OBJECT) { 217 | /** 218 | * Creates an object representation of this proto. 219 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 220 | * Optional fields that are not set will be set to undefined. 221 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 222 | * For the list of reserved names please see: 223 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 224 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 225 | * JSPB instance for transitional soy proto support: 226 | * http://goto/soy-param-migration 227 | * @return {!Object} 228 | */ 229 | proto.greet.GreetEveryoneRequest.prototype.toObject = function(opt_includeInstance) { 230 | return proto.greet.GreetEveryoneRequest.toObject(opt_includeInstance, this); 231 | }; 232 | 233 | 234 | /** 235 | * Static version of the {@see toObject} method. 236 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 237 | * the JSPB instance for transitional soy proto support: 238 | * http://goto/soy-param-migration 239 | * @param {!proto.greet.GreetEveryoneRequest} msg The msg instance to transform. 240 | * @return {!Object} 241 | * @suppress {unusedLocalVariables} f is only used for nested messages 242 | */ 243 | proto.greet.GreetEveryoneRequest.toObject = function(includeInstance, msg) { 244 | var f, obj = { 245 | greet: (f = msg.getGreet()) && proto.greet.Greeting.toObject(includeInstance, f) 246 | }; 247 | 248 | if (includeInstance) { 249 | obj.$jspbMessageInstance = msg; 250 | } 251 | return obj; 252 | }; 253 | } 254 | 255 | 256 | /** 257 | * Deserializes binary data (in protobuf wire format). 258 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 259 | * @return {!proto.greet.GreetEveryoneRequest} 260 | */ 261 | proto.greet.GreetEveryoneRequest.deserializeBinary = function(bytes) { 262 | var reader = new jspb.BinaryReader(bytes); 263 | var msg = new proto.greet.GreetEveryoneRequest; 264 | return proto.greet.GreetEveryoneRequest.deserializeBinaryFromReader(msg, reader); 265 | }; 266 | 267 | 268 | /** 269 | * Deserializes binary data (in protobuf wire format) from the 270 | * given reader into the given message object. 271 | * @param {!proto.greet.GreetEveryoneRequest} msg The message object to deserialize into. 272 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 273 | * @return {!proto.greet.GreetEveryoneRequest} 274 | */ 275 | proto.greet.GreetEveryoneRequest.deserializeBinaryFromReader = function(msg, reader) { 276 | while (reader.nextField()) { 277 | if (reader.isEndGroup()) { 278 | break; 279 | } 280 | var field = reader.getFieldNumber(); 281 | switch (field) { 282 | case 1: 283 | var value = new proto.greet.Greeting; 284 | reader.readMessage(value,proto.greet.Greeting.deserializeBinaryFromReader); 285 | msg.setGreet(value); 286 | break; 287 | default: 288 | reader.skipField(); 289 | break; 290 | } 291 | } 292 | return msg; 293 | }; 294 | 295 | 296 | /** 297 | * Serializes the message to binary data (in protobuf wire format). 298 | * @return {!Uint8Array} 299 | */ 300 | proto.greet.GreetEveryoneRequest.prototype.serializeBinary = function() { 301 | var writer = new jspb.BinaryWriter(); 302 | proto.greet.GreetEveryoneRequest.serializeBinaryToWriter(this, writer); 303 | return writer.getResultBuffer(); 304 | }; 305 | 306 | 307 | /** 308 | * Serializes the given message to binary data (in protobuf wire 309 | * format), writing to the given BinaryWriter. 310 | * @param {!proto.greet.GreetEveryoneRequest} message 311 | * @param {!jspb.BinaryWriter} writer 312 | * @suppress {unusedLocalVariables} f is only used for nested messages 313 | */ 314 | proto.greet.GreetEveryoneRequest.serializeBinaryToWriter = function(message, writer) { 315 | var f = undefined; 316 | f = message.getGreet(); 317 | if (f != null) { 318 | writer.writeMessage( 319 | 1, 320 | f, 321 | proto.greet.Greeting.serializeBinaryToWriter 322 | ); 323 | } 324 | }; 325 | 326 | 327 | /** 328 | * optional Greeting greet = 1; 329 | * @return {?proto.greet.Greeting} 330 | */ 331 | proto.greet.GreetEveryoneRequest.prototype.getGreet = function() { 332 | return /** @type{?proto.greet.Greeting} */ ( 333 | jspb.Message.getWrapperField(this, proto.greet.Greeting, 1)); 334 | }; 335 | 336 | 337 | /** 338 | * @param {?proto.greet.Greeting|undefined} value 339 | * @return {!proto.greet.GreetEveryoneRequest} returns this 340 | */ 341 | proto.greet.GreetEveryoneRequest.prototype.setGreet = function(value) { 342 | return jspb.Message.setWrapperField(this, 1, value); 343 | }; 344 | 345 | 346 | /** 347 | * Clears the message field making it undefined. 348 | * @return {!proto.greet.GreetEveryoneRequest} returns this 349 | */ 350 | proto.greet.GreetEveryoneRequest.prototype.clearGreet = function() { 351 | return this.setGreet(undefined); 352 | }; 353 | 354 | 355 | /** 356 | * Returns whether this field is set. 357 | * @return {boolean} 358 | */ 359 | proto.greet.GreetEveryoneRequest.prototype.hasGreet = function() { 360 | return jspb.Message.getField(this, 1) != null; 361 | }; 362 | 363 | 364 | 365 | 366 | 367 | if (jspb.Message.GENERATE_TO_OBJECT) { 368 | /** 369 | * Creates an object representation of this proto. 370 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 371 | * Optional fields that are not set will be set to undefined. 372 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 373 | * For the list of reserved names please see: 374 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 375 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 376 | * JSPB instance for transitional soy proto support: 377 | * http://goto/soy-param-migration 378 | * @return {!Object} 379 | */ 380 | proto.greet.GreetEveryoneResponse.prototype.toObject = function(opt_includeInstance) { 381 | return proto.greet.GreetEveryoneResponse.toObject(opt_includeInstance, this); 382 | }; 383 | 384 | 385 | /** 386 | * Static version of the {@see toObject} method. 387 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 388 | * the JSPB instance for transitional soy proto support: 389 | * http://goto/soy-param-migration 390 | * @param {!proto.greet.GreetEveryoneResponse} msg The msg instance to transform. 391 | * @return {!Object} 392 | * @suppress {unusedLocalVariables} f is only used for nested messages 393 | */ 394 | proto.greet.GreetEveryoneResponse.toObject = function(includeInstance, msg) { 395 | var f, obj = { 396 | result: jspb.Message.getFieldWithDefault(msg, 1, "") 397 | }; 398 | 399 | if (includeInstance) { 400 | obj.$jspbMessageInstance = msg; 401 | } 402 | return obj; 403 | }; 404 | } 405 | 406 | 407 | /** 408 | * Deserializes binary data (in protobuf wire format). 409 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 410 | * @return {!proto.greet.GreetEveryoneResponse} 411 | */ 412 | proto.greet.GreetEveryoneResponse.deserializeBinary = function(bytes) { 413 | var reader = new jspb.BinaryReader(bytes); 414 | var msg = new proto.greet.GreetEveryoneResponse; 415 | return proto.greet.GreetEveryoneResponse.deserializeBinaryFromReader(msg, reader); 416 | }; 417 | 418 | 419 | /** 420 | * Deserializes binary data (in protobuf wire format) from the 421 | * given reader into the given message object. 422 | * @param {!proto.greet.GreetEveryoneResponse} msg The message object to deserialize into. 423 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 424 | * @return {!proto.greet.GreetEveryoneResponse} 425 | */ 426 | proto.greet.GreetEveryoneResponse.deserializeBinaryFromReader = function(msg, reader) { 427 | while (reader.nextField()) { 428 | if (reader.isEndGroup()) { 429 | break; 430 | } 431 | var field = reader.getFieldNumber(); 432 | switch (field) { 433 | case 1: 434 | var value = /** @type {string} */ (reader.readString()); 435 | msg.setResult(value); 436 | break; 437 | default: 438 | reader.skipField(); 439 | break; 440 | } 441 | } 442 | return msg; 443 | }; 444 | 445 | 446 | /** 447 | * Serializes the message to binary data (in protobuf wire format). 448 | * @return {!Uint8Array} 449 | */ 450 | proto.greet.GreetEveryoneResponse.prototype.serializeBinary = function() { 451 | var writer = new jspb.BinaryWriter(); 452 | proto.greet.GreetEveryoneResponse.serializeBinaryToWriter(this, writer); 453 | return writer.getResultBuffer(); 454 | }; 455 | 456 | 457 | /** 458 | * Serializes the given message to binary data (in protobuf wire 459 | * format), writing to the given BinaryWriter. 460 | * @param {!proto.greet.GreetEveryoneResponse} message 461 | * @param {!jspb.BinaryWriter} writer 462 | * @suppress {unusedLocalVariables} f is only used for nested messages 463 | */ 464 | proto.greet.GreetEveryoneResponse.serializeBinaryToWriter = function(message, writer) { 465 | var f = undefined; 466 | f = message.getResult(); 467 | if (f.length > 0) { 468 | writer.writeString( 469 | 1, 470 | f 471 | ); 472 | } 473 | }; 474 | 475 | 476 | /** 477 | * optional string result = 1; 478 | * @return {string} 479 | */ 480 | proto.greet.GreetEveryoneResponse.prototype.getResult = function() { 481 | return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); 482 | }; 483 | 484 | 485 | /** 486 | * @param {string} value 487 | * @return {!proto.greet.GreetEveryoneResponse} returns this 488 | */ 489 | proto.greet.GreetEveryoneResponse.prototype.setResult = function(value) { 490 | return jspb.Message.setProto3StringField(this, 1, value); 491 | }; 492 | 493 | 494 | 495 | 496 | 497 | if (jspb.Message.GENERATE_TO_OBJECT) { 498 | /** 499 | * Creates an object representation of this proto. 500 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 501 | * Optional fields that are not set will be set to undefined. 502 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 503 | * For the list of reserved names please see: 504 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 505 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 506 | * JSPB instance for transitional soy proto support: 507 | * http://goto/soy-param-migration 508 | * @return {!Object} 509 | */ 510 | proto.greet.LongGreetRequest.prototype.toObject = function(opt_includeInstance) { 511 | return proto.greet.LongGreetRequest.toObject(opt_includeInstance, this); 512 | }; 513 | 514 | 515 | /** 516 | * Static version of the {@see toObject} method. 517 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 518 | * the JSPB instance for transitional soy proto support: 519 | * http://goto/soy-param-migration 520 | * @param {!proto.greet.LongGreetRequest} msg The msg instance to transform. 521 | * @return {!Object} 522 | * @suppress {unusedLocalVariables} f is only used for nested messages 523 | */ 524 | proto.greet.LongGreetRequest.toObject = function(includeInstance, msg) { 525 | var f, obj = { 526 | greet: (f = msg.getGreet()) && proto.greet.Greeting.toObject(includeInstance, f) 527 | }; 528 | 529 | if (includeInstance) { 530 | obj.$jspbMessageInstance = msg; 531 | } 532 | return obj; 533 | }; 534 | } 535 | 536 | 537 | /** 538 | * Deserializes binary data (in protobuf wire format). 539 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 540 | * @return {!proto.greet.LongGreetRequest} 541 | */ 542 | proto.greet.LongGreetRequest.deserializeBinary = function(bytes) { 543 | var reader = new jspb.BinaryReader(bytes); 544 | var msg = new proto.greet.LongGreetRequest; 545 | return proto.greet.LongGreetRequest.deserializeBinaryFromReader(msg, reader); 546 | }; 547 | 548 | 549 | /** 550 | * Deserializes binary data (in protobuf wire format) from the 551 | * given reader into the given message object. 552 | * @param {!proto.greet.LongGreetRequest} msg The message object to deserialize into. 553 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 554 | * @return {!proto.greet.LongGreetRequest} 555 | */ 556 | proto.greet.LongGreetRequest.deserializeBinaryFromReader = function(msg, reader) { 557 | while (reader.nextField()) { 558 | if (reader.isEndGroup()) { 559 | break; 560 | } 561 | var field = reader.getFieldNumber(); 562 | switch (field) { 563 | case 1: 564 | var value = new proto.greet.Greeting; 565 | reader.readMessage(value,proto.greet.Greeting.deserializeBinaryFromReader); 566 | msg.setGreet(value); 567 | break; 568 | default: 569 | reader.skipField(); 570 | break; 571 | } 572 | } 573 | return msg; 574 | }; 575 | 576 | 577 | /** 578 | * Serializes the message to binary data (in protobuf wire format). 579 | * @return {!Uint8Array} 580 | */ 581 | proto.greet.LongGreetRequest.prototype.serializeBinary = function() { 582 | var writer = new jspb.BinaryWriter(); 583 | proto.greet.LongGreetRequest.serializeBinaryToWriter(this, writer); 584 | return writer.getResultBuffer(); 585 | }; 586 | 587 | 588 | /** 589 | * Serializes the given message to binary data (in protobuf wire 590 | * format), writing to the given BinaryWriter. 591 | * @param {!proto.greet.LongGreetRequest} message 592 | * @param {!jspb.BinaryWriter} writer 593 | * @suppress {unusedLocalVariables} f is only used for nested messages 594 | */ 595 | proto.greet.LongGreetRequest.serializeBinaryToWriter = function(message, writer) { 596 | var f = undefined; 597 | f = message.getGreet(); 598 | if (f != null) { 599 | writer.writeMessage( 600 | 1, 601 | f, 602 | proto.greet.Greeting.serializeBinaryToWriter 603 | ); 604 | } 605 | }; 606 | 607 | 608 | /** 609 | * optional Greeting greet = 1; 610 | * @return {?proto.greet.Greeting} 611 | */ 612 | proto.greet.LongGreetRequest.prototype.getGreet = function() { 613 | return /** @type{?proto.greet.Greeting} */ ( 614 | jspb.Message.getWrapperField(this, proto.greet.Greeting, 1)); 615 | }; 616 | 617 | 618 | /** 619 | * @param {?proto.greet.Greeting|undefined} value 620 | * @return {!proto.greet.LongGreetRequest} returns this 621 | */ 622 | proto.greet.LongGreetRequest.prototype.setGreet = function(value) { 623 | return jspb.Message.setWrapperField(this, 1, value); 624 | }; 625 | 626 | 627 | /** 628 | * Clears the message field making it undefined. 629 | * @return {!proto.greet.LongGreetRequest} returns this 630 | */ 631 | proto.greet.LongGreetRequest.prototype.clearGreet = function() { 632 | return this.setGreet(undefined); 633 | }; 634 | 635 | 636 | /** 637 | * Returns whether this field is set. 638 | * @return {boolean} 639 | */ 640 | proto.greet.LongGreetRequest.prototype.hasGreet = function() { 641 | return jspb.Message.getField(this, 1) != null; 642 | }; 643 | 644 | 645 | 646 | 647 | 648 | if (jspb.Message.GENERATE_TO_OBJECT) { 649 | /** 650 | * Creates an object representation of this proto. 651 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 652 | * Optional fields that are not set will be set to undefined. 653 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 654 | * For the list of reserved names please see: 655 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 656 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 657 | * JSPB instance for transitional soy proto support: 658 | * http://goto/soy-param-migration 659 | * @return {!Object} 660 | */ 661 | proto.greet.LongGreetResponse.prototype.toObject = function(opt_includeInstance) { 662 | return proto.greet.LongGreetResponse.toObject(opt_includeInstance, this); 663 | }; 664 | 665 | 666 | /** 667 | * Static version of the {@see toObject} method. 668 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 669 | * the JSPB instance for transitional soy proto support: 670 | * http://goto/soy-param-migration 671 | * @param {!proto.greet.LongGreetResponse} msg The msg instance to transform. 672 | * @return {!Object} 673 | * @suppress {unusedLocalVariables} f is only used for nested messages 674 | */ 675 | proto.greet.LongGreetResponse.toObject = function(includeInstance, msg) { 676 | var f, obj = { 677 | result: jspb.Message.getFieldWithDefault(msg, 1, "") 678 | }; 679 | 680 | if (includeInstance) { 681 | obj.$jspbMessageInstance = msg; 682 | } 683 | return obj; 684 | }; 685 | } 686 | 687 | 688 | /** 689 | * Deserializes binary data (in protobuf wire format). 690 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 691 | * @return {!proto.greet.LongGreetResponse} 692 | */ 693 | proto.greet.LongGreetResponse.deserializeBinary = function(bytes) { 694 | var reader = new jspb.BinaryReader(bytes); 695 | var msg = new proto.greet.LongGreetResponse; 696 | return proto.greet.LongGreetResponse.deserializeBinaryFromReader(msg, reader); 697 | }; 698 | 699 | 700 | /** 701 | * Deserializes binary data (in protobuf wire format) from the 702 | * given reader into the given message object. 703 | * @param {!proto.greet.LongGreetResponse} msg The message object to deserialize into. 704 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 705 | * @return {!proto.greet.LongGreetResponse} 706 | */ 707 | proto.greet.LongGreetResponse.deserializeBinaryFromReader = function(msg, reader) { 708 | while (reader.nextField()) { 709 | if (reader.isEndGroup()) { 710 | break; 711 | } 712 | var field = reader.getFieldNumber(); 713 | switch (field) { 714 | case 1: 715 | var value = /** @type {string} */ (reader.readString()); 716 | msg.setResult(value); 717 | break; 718 | default: 719 | reader.skipField(); 720 | break; 721 | } 722 | } 723 | return msg; 724 | }; 725 | 726 | 727 | /** 728 | * Serializes the message to binary data (in protobuf wire format). 729 | * @return {!Uint8Array} 730 | */ 731 | proto.greet.LongGreetResponse.prototype.serializeBinary = function() { 732 | var writer = new jspb.BinaryWriter(); 733 | proto.greet.LongGreetResponse.serializeBinaryToWriter(this, writer); 734 | return writer.getResultBuffer(); 735 | }; 736 | 737 | 738 | /** 739 | * Serializes the given message to binary data (in protobuf wire 740 | * format), writing to the given BinaryWriter. 741 | * @param {!proto.greet.LongGreetResponse} message 742 | * @param {!jspb.BinaryWriter} writer 743 | * @suppress {unusedLocalVariables} f is only used for nested messages 744 | */ 745 | proto.greet.LongGreetResponse.serializeBinaryToWriter = function(message, writer) { 746 | var f = undefined; 747 | f = message.getResult(); 748 | if (f.length > 0) { 749 | writer.writeString( 750 | 1, 751 | f 752 | ); 753 | } 754 | }; 755 | 756 | 757 | /** 758 | * optional string result = 1; 759 | * @return {string} 760 | */ 761 | proto.greet.LongGreetResponse.prototype.getResult = function() { 762 | return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); 763 | }; 764 | 765 | 766 | /** 767 | * @param {string} value 768 | * @return {!proto.greet.LongGreetResponse} returns this 769 | */ 770 | proto.greet.LongGreetResponse.prototype.setResult = function(value) { 771 | return jspb.Message.setProto3StringField(this, 1, value); 772 | }; 773 | 774 | 775 | 776 | 777 | 778 | if (jspb.Message.GENERATE_TO_OBJECT) { 779 | /** 780 | * Creates an object representation of this proto. 781 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 782 | * Optional fields that are not set will be set to undefined. 783 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 784 | * For the list of reserved names please see: 785 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 786 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 787 | * JSPB instance for transitional soy proto support: 788 | * http://goto/soy-param-migration 789 | * @return {!Object} 790 | */ 791 | proto.greet.GreetManyTimesRequest.prototype.toObject = function(opt_includeInstance) { 792 | return proto.greet.GreetManyTimesRequest.toObject(opt_includeInstance, this); 793 | }; 794 | 795 | 796 | /** 797 | * Static version of the {@see toObject} method. 798 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 799 | * the JSPB instance for transitional soy proto support: 800 | * http://goto/soy-param-migration 801 | * @param {!proto.greet.GreetManyTimesRequest} msg The msg instance to transform. 802 | * @return {!Object} 803 | * @suppress {unusedLocalVariables} f is only used for nested messages 804 | */ 805 | proto.greet.GreetManyTimesRequest.toObject = function(includeInstance, msg) { 806 | var f, obj = { 807 | greeting: (f = msg.getGreeting()) && proto.greet.Greeting.toObject(includeInstance, f) 808 | }; 809 | 810 | if (includeInstance) { 811 | obj.$jspbMessageInstance = msg; 812 | } 813 | return obj; 814 | }; 815 | } 816 | 817 | 818 | /** 819 | * Deserializes binary data (in protobuf wire format). 820 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 821 | * @return {!proto.greet.GreetManyTimesRequest} 822 | */ 823 | proto.greet.GreetManyTimesRequest.deserializeBinary = function(bytes) { 824 | var reader = new jspb.BinaryReader(bytes); 825 | var msg = new proto.greet.GreetManyTimesRequest; 826 | return proto.greet.GreetManyTimesRequest.deserializeBinaryFromReader(msg, reader); 827 | }; 828 | 829 | 830 | /** 831 | * Deserializes binary data (in protobuf wire format) from the 832 | * given reader into the given message object. 833 | * @param {!proto.greet.GreetManyTimesRequest} msg The message object to deserialize into. 834 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 835 | * @return {!proto.greet.GreetManyTimesRequest} 836 | */ 837 | proto.greet.GreetManyTimesRequest.deserializeBinaryFromReader = function(msg, reader) { 838 | while (reader.nextField()) { 839 | if (reader.isEndGroup()) { 840 | break; 841 | } 842 | var field = reader.getFieldNumber(); 843 | switch (field) { 844 | case 1: 845 | var value = new proto.greet.Greeting; 846 | reader.readMessage(value,proto.greet.Greeting.deserializeBinaryFromReader); 847 | msg.setGreeting(value); 848 | break; 849 | default: 850 | reader.skipField(); 851 | break; 852 | } 853 | } 854 | return msg; 855 | }; 856 | 857 | 858 | /** 859 | * Serializes the message to binary data (in protobuf wire format). 860 | * @return {!Uint8Array} 861 | */ 862 | proto.greet.GreetManyTimesRequest.prototype.serializeBinary = function() { 863 | var writer = new jspb.BinaryWriter(); 864 | proto.greet.GreetManyTimesRequest.serializeBinaryToWriter(this, writer); 865 | return writer.getResultBuffer(); 866 | }; 867 | 868 | 869 | /** 870 | * Serializes the given message to binary data (in protobuf wire 871 | * format), writing to the given BinaryWriter. 872 | * @param {!proto.greet.GreetManyTimesRequest} message 873 | * @param {!jspb.BinaryWriter} writer 874 | * @suppress {unusedLocalVariables} f is only used for nested messages 875 | */ 876 | proto.greet.GreetManyTimesRequest.serializeBinaryToWriter = function(message, writer) { 877 | var f = undefined; 878 | f = message.getGreeting(); 879 | if (f != null) { 880 | writer.writeMessage( 881 | 1, 882 | f, 883 | proto.greet.Greeting.serializeBinaryToWriter 884 | ); 885 | } 886 | }; 887 | 888 | 889 | /** 890 | * optional Greeting greeting = 1; 891 | * @return {?proto.greet.Greeting} 892 | */ 893 | proto.greet.GreetManyTimesRequest.prototype.getGreeting = function() { 894 | return /** @type{?proto.greet.Greeting} */ ( 895 | jspb.Message.getWrapperField(this, proto.greet.Greeting, 1)); 896 | }; 897 | 898 | 899 | /** 900 | * @param {?proto.greet.Greeting|undefined} value 901 | * @return {!proto.greet.GreetManyTimesRequest} returns this 902 | */ 903 | proto.greet.GreetManyTimesRequest.prototype.setGreeting = function(value) { 904 | return jspb.Message.setWrapperField(this, 1, value); 905 | }; 906 | 907 | 908 | /** 909 | * Clears the message field making it undefined. 910 | * @return {!proto.greet.GreetManyTimesRequest} returns this 911 | */ 912 | proto.greet.GreetManyTimesRequest.prototype.clearGreeting = function() { 913 | return this.setGreeting(undefined); 914 | }; 915 | 916 | 917 | /** 918 | * Returns whether this field is set. 919 | * @return {boolean} 920 | */ 921 | proto.greet.GreetManyTimesRequest.prototype.hasGreeting = function() { 922 | return jspb.Message.getField(this, 1) != null; 923 | }; 924 | 925 | 926 | 927 | 928 | 929 | if (jspb.Message.GENERATE_TO_OBJECT) { 930 | /** 931 | * Creates an object representation of this proto. 932 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 933 | * Optional fields that are not set will be set to undefined. 934 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 935 | * For the list of reserved names please see: 936 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 937 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 938 | * JSPB instance for transitional soy proto support: 939 | * http://goto/soy-param-migration 940 | * @return {!Object} 941 | */ 942 | proto.greet.GreetManyTimesResponse.prototype.toObject = function(opt_includeInstance) { 943 | return proto.greet.GreetManyTimesResponse.toObject(opt_includeInstance, this); 944 | }; 945 | 946 | 947 | /** 948 | * Static version of the {@see toObject} method. 949 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 950 | * the JSPB instance for transitional soy proto support: 951 | * http://goto/soy-param-migration 952 | * @param {!proto.greet.GreetManyTimesResponse} msg The msg instance to transform. 953 | * @return {!Object} 954 | * @suppress {unusedLocalVariables} f is only used for nested messages 955 | */ 956 | proto.greet.GreetManyTimesResponse.toObject = function(includeInstance, msg) { 957 | var f, obj = { 958 | result: jspb.Message.getFieldWithDefault(msg, 1, "") 959 | }; 960 | 961 | if (includeInstance) { 962 | obj.$jspbMessageInstance = msg; 963 | } 964 | return obj; 965 | }; 966 | } 967 | 968 | 969 | /** 970 | * Deserializes binary data (in protobuf wire format). 971 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 972 | * @return {!proto.greet.GreetManyTimesResponse} 973 | */ 974 | proto.greet.GreetManyTimesResponse.deserializeBinary = function(bytes) { 975 | var reader = new jspb.BinaryReader(bytes); 976 | var msg = new proto.greet.GreetManyTimesResponse; 977 | return proto.greet.GreetManyTimesResponse.deserializeBinaryFromReader(msg, reader); 978 | }; 979 | 980 | 981 | /** 982 | * Deserializes binary data (in protobuf wire format) from the 983 | * given reader into the given message object. 984 | * @param {!proto.greet.GreetManyTimesResponse} msg The message object to deserialize into. 985 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 986 | * @return {!proto.greet.GreetManyTimesResponse} 987 | */ 988 | proto.greet.GreetManyTimesResponse.deserializeBinaryFromReader = function(msg, reader) { 989 | while (reader.nextField()) { 990 | if (reader.isEndGroup()) { 991 | break; 992 | } 993 | var field = reader.getFieldNumber(); 994 | switch (field) { 995 | case 1: 996 | var value = /** @type {string} */ (reader.readString()); 997 | msg.setResult(value); 998 | break; 999 | default: 1000 | reader.skipField(); 1001 | break; 1002 | } 1003 | } 1004 | return msg; 1005 | }; 1006 | 1007 | 1008 | /** 1009 | * Serializes the message to binary data (in protobuf wire format). 1010 | * @return {!Uint8Array} 1011 | */ 1012 | proto.greet.GreetManyTimesResponse.prototype.serializeBinary = function() { 1013 | var writer = new jspb.BinaryWriter(); 1014 | proto.greet.GreetManyTimesResponse.serializeBinaryToWriter(this, writer); 1015 | return writer.getResultBuffer(); 1016 | }; 1017 | 1018 | 1019 | /** 1020 | * Serializes the given message to binary data (in protobuf wire 1021 | * format), writing to the given BinaryWriter. 1022 | * @param {!proto.greet.GreetManyTimesResponse} message 1023 | * @param {!jspb.BinaryWriter} writer 1024 | * @suppress {unusedLocalVariables} f is only used for nested messages 1025 | */ 1026 | proto.greet.GreetManyTimesResponse.serializeBinaryToWriter = function(message, writer) { 1027 | var f = undefined; 1028 | f = message.getResult(); 1029 | if (f.length > 0) { 1030 | writer.writeString( 1031 | 1, 1032 | f 1033 | ); 1034 | } 1035 | }; 1036 | 1037 | 1038 | /** 1039 | * optional string result = 1; 1040 | * @return {string} 1041 | */ 1042 | proto.greet.GreetManyTimesResponse.prototype.getResult = function() { 1043 | return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); 1044 | }; 1045 | 1046 | 1047 | /** 1048 | * @param {string} value 1049 | * @return {!proto.greet.GreetManyTimesResponse} returns this 1050 | */ 1051 | proto.greet.GreetManyTimesResponse.prototype.setResult = function(value) { 1052 | return jspb.Message.setProto3StringField(this, 1, value); 1053 | }; 1054 | 1055 | 1056 | 1057 | 1058 | 1059 | if (jspb.Message.GENERATE_TO_OBJECT) { 1060 | /** 1061 | * Creates an object representation of this proto. 1062 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 1063 | * Optional fields that are not set will be set to undefined. 1064 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 1065 | * For the list of reserved names please see: 1066 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 1067 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 1068 | * JSPB instance for transitional soy proto support: 1069 | * http://goto/soy-param-migration 1070 | * @return {!Object} 1071 | */ 1072 | proto.greet.Greeting.prototype.toObject = function(opt_includeInstance) { 1073 | return proto.greet.Greeting.toObject(opt_includeInstance, this); 1074 | }; 1075 | 1076 | 1077 | /** 1078 | * Static version of the {@see toObject} method. 1079 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 1080 | * the JSPB instance for transitional soy proto support: 1081 | * http://goto/soy-param-migration 1082 | * @param {!proto.greet.Greeting} msg The msg instance to transform. 1083 | * @return {!Object} 1084 | * @suppress {unusedLocalVariables} f is only used for nested messages 1085 | */ 1086 | proto.greet.Greeting.toObject = function(includeInstance, msg) { 1087 | var f, obj = { 1088 | firstName: jspb.Message.getFieldWithDefault(msg, 1, ""), 1089 | lastName: jspb.Message.getFieldWithDefault(msg, 2, "") 1090 | }; 1091 | 1092 | if (includeInstance) { 1093 | obj.$jspbMessageInstance = msg; 1094 | } 1095 | return obj; 1096 | }; 1097 | } 1098 | 1099 | 1100 | /** 1101 | * Deserializes binary data (in protobuf wire format). 1102 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 1103 | * @return {!proto.greet.Greeting} 1104 | */ 1105 | proto.greet.Greeting.deserializeBinary = function(bytes) { 1106 | var reader = new jspb.BinaryReader(bytes); 1107 | var msg = new proto.greet.Greeting; 1108 | return proto.greet.Greeting.deserializeBinaryFromReader(msg, reader); 1109 | }; 1110 | 1111 | 1112 | /** 1113 | * Deserializes binary data (in protobuf wire format) from the 1114 | * given reader into the given message object. 1115 | * @param {!proto.greet.Greeting} msg The message object to deserialize into. 1116 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 1117 | * @return {!proto.greet.Greeting} 1118 | */ 1119 | proto.greet.Greeting.deserializeBinaryFromReader = function(msg, reader) { 1120 | while (reader.nextField()) { 1121 | if (reader.isEndGroup()) { 1122 | break; 1123 | } 1124 | var field = reader.getFieldNumber(); 1125 | switch (field) { 1126 | case 1: 1127 | var value = /** @type {string} */ (reader.readString()); 1128 | msg.setFirstName(value); 1129 | break; 1130 | case 2: 1131 | var value = /** @type {string} */ (reader.readString()); 1132 | msg.setLastName(value); 1133 | break; 1134 | default: 1135 | reader.skipField(); 1136 | break; 1137 | } 1138 | } 1139 | return msg; 1140 | }; 1141 | 1142 | 1143 | /** 1144 | * Serializes the message to binary data (in protobuf wire format). 1145 | * @return {!Uint8Array} 1146 | */ 1147 | proto.greet.Greeting.prototype.serializeBinary = function() { 1148 | var writer = new jspb.BinaryWriter(); 1149 | proto.greet.Greeting.serializeBinaryToWriter(this, writer); 1150 | return writer.getResultBuffer(); 1151 | }; 1152 | 1153 | 1154 | /** 1155 | * Serializes the given message to binary data (in protobuf wire 1156 | * format), writing to the given BinaryWriter. 1157 | * @param {!proto.greet.Greeting} message 1158 | * @param {!jspb.BinaryWriter} writer 1159 | * @suppress {unusedLocalVariables} f is only used for nested messages 1160 | */ 1161 | proto.greet.Greeting.serializeBinaryToWriter = function(message, writer) { 1162 | var f = undefined; 1163 | f = message.getFirstName(); 1164 | if (f.length > 0) { 1165 | writer.writeString( 1166 | 1, 1167 | f 1168 | ); 1169 | } 1170 | f = message.getLastName(); 1171 | if (f.length > 0) { 1172 | writer.writeString( 1173 | 2, 1174 | f 1175 | ); 1176 | } 1177 | }; 1178 | 1179 | 1180 | /** 1181 | * optional string first_name = 1; 1182 | * @return {string} 1183 | */ 1184 | proto.greet.Greeting.prototype.getFirstName = function() { 1185 | return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); 1186 | }; 1187 | 1188 | 1189 | /** 1190 | * @param {string} value 1191 | * @return {!proto.greet.Greeting} returns this 1192 | */ 1193 | proto.greet.Greeting.prototype.setFirstName = function(value) { 1194 | return jspb.Message.setProto3StringField(this, 1, value); 1195 | }; 1196 | 1197 | 1198 | /** 1199 | * optional string last_name = 2; 1200 | * @return {string} 1201 | */ 1202 | proto.greet.Greeting.prototype.getLastName = function() { 1203 | return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 2, "")); 1204 | }; 1205 | 1206 | 1207 | /** 1208 | * @param {string} value 1209 | * @return {!proto.greet.Greeting} returns this 1210 | */ 1211 | proto.greet.Greeting.prototype.setLastName = function(value) { 1212 | return jspb.Message.setProto3StringField(this, 2, value); 1213 | }; 1214 | 1215 | 1216 | 1217 | 1218 | 1219 | if (jspb.Message.GENERATE_TO_OBJECT) { 1220 | /** 1221 | * Creates an object representation of this proto. 1222 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 1223 | * Optional fields that are not set will be set to undefined. 1224 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 1225 | * For the list of reserved names please see: 1226 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 1227 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 1228 | * JSPB instance for transitional soy proto support: 1229 | * http://goto/soy-param-migration 1230 | * @return {!Object} 1231 | */ 1232 | proto.greet.GreetRequest.prototype.toObject = function(opt_includeInstance) { 1233 | return proto.greet.GreetRequest.toObject(opt_includeInstance, this); 1234 | }; 1235 | 1236 | 1237 | /** 1238 | * Static version of the {@see toObject} method. 1239 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 1240 | * the JSPB instance for transitional soy proto support: 1241 | * http://goto/soy-param-migration 1242 | * @param {!proto.greet.GreetRequest} msg The msg instance to transform. 1243 | * @return {!Object} 1244 | * @suppress {unusedLocalVariables} f is only used for nested messages 1245 | */ 1246 | proto.greet.GreetRequest.toObject = function(includeInstance, msg) { 1247 | var f, obj = { 1248 | greeting: (f = msg.getGreeting()) && proto.greet.Greeting.toObject(includeInstance, f) 1249 | }; 1250 | 1251 | if (includeInstance) { 1252 | obj.$jspbMessageInstance = msg; 1253 | } 1254 | return obj; 1255 | }; 1256 | } 1257 | 1258 | 1259 | /** 1260 | * Deserializes binary data (in protobuf wire format). 1261 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 1262 | * @return {!proto.greet.GreetRequest} 1263 | */ 1264 | proto.greet.GreetRequest.deserializeBinary = function(bytes) { 1265 | var reader = new jspb.BinaryReader(bytes); 1266 | var msg = new proto.greet.GreetRequest; 1267 | return proto.greet.GreetRequest.deserializeBinaryFromReader(msg, reader); 1268 | }; 1269 | 1270 | 1271 | /** 1272 | * Deserializes binary data (in protobuf wire format) from the 1273 | * given reader into the given message object. 1274 | * @param {!proto.greet.GreetRequest} msg The message object to deserialize into. 1275 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 1276 | * @return {!proto.greet.GreetRequest} 1277 | */ 1278 | proto.greet.GreetRequest.deserializeBinaryFromReader = function(msg, reader) { 1279 | while (reader.nextField()) { 1280 | if (reader.isEndGroup()) { 1281 | break; 1282 | } 1283 | var field = reader.getFieldNumber(); 1284 | switch (field) { 1285 | case 1: 1286 | var value = new proto.greet.Greeting; 1287 | reader.readMessage(value,proto.greet.Greeting.deserializeBinaryFromReader); 1288 | msg.setGreeting(value); 1289 | break; 1290 | default: 1291 | reader.skipField(); 1292 | break; 1293 | } 1294 | } 1295 | return msg; 1296 | }; 1297 | 1298 | 1299 | /** 1300 | * Serializes the message to binary data (in protobuf wire format). 1301 | * @return {!Uint8Array} 1302 | */ 1303 | proto.greet.GreetRequest.prototype.serializeBinary = function() { 1304 | var writer = new jspb.BinaryWriter(); 1305 | proto.greet.GreetRequest.serializeBinaryToWriter(this, writer); 1306 | return writer.getResultBuffer(); 1307 | }; 1308 | 1309 | 1310 | /** 1311 | * Serializes the given message to binary data (in protobuf wire 1312 | * format), writing to the given BinaryWriter. 1313 | * @param {!proto.greet.GreetRequest} message 1314 | * @param {!jspb.BinaryWriter} writer 1315 | * @suppress {unusedLocalVariables} f is only used for nested messages 1316 | */ 1317 | proto.greet.GreetRequest.serializeBinaryToWriter = function(message, writer) { 1318 | var f = undefined; 1319 | f = message.getGreeting(); 1320 | if (f != null) { 1321 | writer.writeMessage( 1322 | 1, 1323 | f, 1324 | proto.greet.Greeting.serializeBinaryToWriter 1325 | ); 1326 | } 1327 | }; 1328 | 1329 | 1330 | /** 1331 | * optional Greeting greeting = 1; 1332 | * @return {?proto.greet.Greeting} 1333 | */ 1334 | proto.greet.GreetRequest.prototype.getGreeting = function() { 1335 | return /** @type{?proto.greet.Greeting} */ ( 1336 | jspb.Message.getWrapperField(this, proto.greet.Greeting, 1)); 1337 | }; 1338 | 1339 | 1340 | /** 1341 | * @param {?proto.greet.Greeting|undefined} value 1342 | * @return {!proto.greet.GreetRequest} returns this 1343 | */ 1344 | proto.greet.GreetRequest.prototype.setGreeting = function(value) { 1345 | return jspb.Message.setWrapperField(this, 1, value); 1346 | }; 1347 | 1348 | 1349 | /** 1350 | * Clears the message field making it undefined. 1351 | * @return {!proto.greet.GreetRequest} returns this 1352 | */ 1353 | proto.greet.GreetRequest.prototype.clearGreeting = function() { 1354 | return this.setGreeting(undefined); 1355 | }; 1356 | 1357 | 1358 | /** 1359 | * Returns whether this field is set. 1360 | * @return {boolean} 1361 | */ 1362 | proto.greet.GreetRequest.prototype.hasGreeting = function() { 1363 | return jspb.Message.getField(this, 1) != null; 1364 | }; 1365 | 1366 | 1367 | 1368 | 1369 | 1370 | if (jspb.Message.GENERATE_TO_OBJECT) { 1371 | /** 1372 | * Creates an object representation of this proto. 1373 | * Field names that are reserved in JavaScript and will be renamed to pb_name. 1374 | * Optional fields that are not set will be set to undefined. 1375 | * To access a reserved field use, foo.pb_, eg, foo.pb_default. 1376 | * For the list of reserved names please see: 1377 | * net/proto2/compiler/js/internal/generator.cc#kKeyword. 1378 | * @param {boolean=} opt_includeInstance Deprecated. whether to include the 1379 | * JSPB instance for transitional soy proto support: 1380 | * http://goto/soy-param-migration 1381 | * @return {!Object} 1382 | */ 1383 | proto.greet.GreetResponse.prototype.toObject = function(opt_includeInstance) { 1384 | return proto.greet.GreetResponse.toObject(opt_includeInstance, this); 1385 | }; 1386 | 1387 | 1388 | /** 1389 | * Static version of the {@see toObject} method. 1390 | * @param {boolean|undefined} includeInstance Deprecated. Whether to include 1391 | * the JSPB instance for transitional soy proto support: 1392 | * http://goto/soy-param-migration 1393 | * @param {!proto.greet.GreetResponse} msg The msg instance to transform. 1394 | * @return {!Object} 1395 | * @suppress {unusedLocalVariables} f is only used for nested messages 1396 | */ 1397 | proto.greet.GreetResponse.toObject = function(includeInstance, msg) { 1398 | var f, obj = { 1399 | result: jspb.Message.getFieldWithDefault(msg, 1, "") 1400 | }; 1401 | 1402 | if (includeInstance) { 1403 | obj.$jspbMessageInstance = msg; 1404 | } 1405 | return obj; 1406 | }; 1407 | } 1408 | 1409 | 1410 | /** 1411 | * Deserializes binary data (in protobuf wire format). 1412 | * @param {jspb.ByteSource} bytes The bytes to deserialize. 1413 | * @return {!proto.greet.GreetResponse} 1414 | */ 1415 | proto.greet.GreetResponse.deserializeBinary = function(bytes) { 1416 | var reader = new jspb.BinaryReader(bytes); 1417 | var msg = new proto.greet.GreetResponse; 1418 | return proto.greet.GreetResponse.deserializeBinaryFromReader(msg, reader); 1419 | }; 1420 | 1421 | 1422 | /** 1423 | * Deserializes binary data (in protobuf wire format) from the 1424 | * given reader into the given message object. 1425 | * @param {!proto.greet.GreetResponse} msg The message object to deserialize into. 1426 | * @param {!jspb.BinaryReader} reader The BinaryReader to use. 1427 | * @return {!proto.greet.GreetResponse} 1428 | */ 1429 | proto.greet.GreetResponse.deserializeBinaryFromReader = function(msg, reader) { 1430 | while (reader.nextField()) { 1431 | if (reader.isEndGroup()) { 1432 | break; 1433 | } 1434 | var field = reader.getFieldNumber(); 1435 | switch (field) { 1436 | case 1: 1437 | var value = /** @type {string} */ (reader.readString()); 1438 | msg.setResult(value); 1439 | break; 1440 | default: 1441 | reader.skipField(); 1442 | break; 1443 | } 1444 | } 1445 | return msg; 1446 | }; 1447 | 1448 | 1449 | /** 1450 | * Serializes the message to binary data (in protobuf wire format). 1451 | * @return {!Uint8Array} 1452 | */ 1453 | proto.greet.GreetResponse.prototype.serializeBinary = function() { 1454 | var writer = new jspb.BinaryWriter(); 1455 | proto.greet.GreetResponse.serializeBinaryToWriter(this, writer); 1456 | return writer.getResultBuffer(); 1457 | }; 1458 | 1459 | 1460 | /** 1461 | * Serializes the given message to binary data (in protobuf wire 1462 | * format), writing to the given BinaryWriter. 1463 | * @param {!proto.greet.GreetResponse} message 1464 | * @param {!jspb.BinaryWriter} writer 1465 | * @suppress {unusedLocalVariables} f is only used for nested messages 1466 | */ 1467 | proto.greet.GreetResponse.serializeBinaryToWriter = function(message, writer) { 1468 | var f = undefined; 1469 | f = message.getResult(); 1470 | if (f.length > 0) { 1471 | writer.writeString( 1472 | 1, 1473 | f 1474 | ); 1475 | } 1476 | }; 1477 | 1478 | 1479 | /** 1480 | * optional string result = 1; 1481 | * @return {string} 1482 | */ 1483 | proto.greet.GreetResponse.prototype.getResult = function() { 1484 | return /** @type {string} */ (jspb.Message.getFieldWithDefault(this, 1, "")); 1485 | }; 1486 | 1487 | 1488 | /** 1489 | * @param {string} value 1490 | * @return {!proto.greet.GreetResponse} returns this 1491 | */ 1492 | proto.greet.GreetResponse.prototype.setResult = function(value) { 1493 | return jspb.Message.setProto3StringField(this, 1, value); 1494 | }; 1495 | 1496 | 1497 | goog.object.extend(exports, proto.greet); 1498 | --------------------------------------------------------------------------------