From ec4234ee1390b774127ec80e6ee2942e8930d5ef Mon Sep 17 00:00:00 2001 From: Tinsae Date: Sun, 28 Dec 2025 03:18:13 +0100 Subject: [PATCH] started task 7 --- .vscode/launch.json | 75 +++ .vscode/tasks.json | 29 + week3_TinsaeGhilay/Task 2/README.md | 213 ++++--- .../Task 2/out/client/Client.class | Bin 2587 -> 2935 bytes .../Task 2/out/client/InputHandler.class | Bin 0 -> 2356 bytes .../Task 2/out/server/Executor.class | Bin 0 -> 944 bytes .../Task 2/out/server/Server.class | Bin 2003 -> 1814 bytes .../Task 2/src/client/Client.java | 43 +- .../Task 2/src/client/InputHandler.java | 127 ++++ .../Task 2/src/server/Executor.java | 91 +++ .../Task 2/src/server/Server.java | 14 +- .../Task 3/out/client/Client.class | Bin 0 -> 1747 bytes .../Task 3/out/hello/Hello.class | Bin 0 -> 215 bytes .../Task 3/out/server/Server.class | Bin 0 -> 1569 bytes .../Task 3/src/client/Client.java | 41 ++ .../Task 3/src/hello/Hello.java | 12 + .../Task 3/src/server/Server.java | 56 ++ .../Task 4/out/client/Client.class | Bin 0 -> 1862 bytes .../Task 4/out/compute/Compute.class | Bin 0 -> 295 bytes .../Task 4/out/server/Server.class | Bin 0 -> 1616 bytes .../Task 4/src/client/Client.java | 44 ++ .../Task 4/src/compute/Compute.java | 13 + .../Task 4/src/server/Server.java | 65 ++ .../Task 5/out/client/Client.class | Bin 2884 -> 2916 bytes week3_TinsaeGhilay/Task 7/example/pom.xml | 70 +++ .../main/java/org/tinsae/grpc/HelloReply.java | 567 ++++++++++++++++++ .../org/tinsae/grpc/HelloReplyOrBuilder.java | 21 + .../java/org/tinsae/grpc/HelloRequest.java | 567 ++++++++++++++++++ .../tinsae/grpc/HelloRequestOrBuilder.java | 21 + .../tinsae/grpc/HelloWorldServiceGrpc.java | 291 +++++++++ .../tinsae/grpc/HelloWorldServiceImpl.java | 20 + .../tinsae/grpc/HelloWorldServiceProtos.java | 63 ++ .../tinsae/grpc/client/HelloWorldClient.java | 26 + .../tinsae/grpc/server/HelloWorldServer.java | 18 + .../main/proto/HelloWorldServiceProtos.proto | 22 + .../org/tinsae/grpc/HelloReply$1.class | Bin 0 -> 1239 bytes .../org/tinsae/grpc/HelloReply$Builder.class | Bin 0 -> 13188 bytes .../classes/org/tinsae/grpc/HelloReply.class | Bin 0 -> 12449 bytes .../org/tinsae/grpc/HelloReplyOrBuilder.class | Bin 0 -> 286 bytes .../org/tinsae/grpc/HelloRequest$1.class | Bin 0 -> 1251 bytes .../tinsae/grpc/HelloRequest$Builder.class | Bin 0 -> 13218 bytes .../org/tinsae/grpc/HelloRequest.class | Bin 0 -> 12491 bytes .../tinsae/grpc/HelloRequestOrBuilder.class | Bin 0 -> 284 bytes .../tinsae/grpc/HelloWorldServiceGrpc$1.class | Bin 0 -> 1370 bytes .../tinsae/grpc/HelloWorldServiceGrpc$2.class | Bin 0 -> 1428 bytes .../tinsae/grpc/HelloWorldServiceGrpc$3.class | Bin 0 -> 1416 bytes ...loWorldServiceBaseDescriptorSupplier.class | Bin 0 -> 1325 bytes ...ceGrpc$HelloWorldServiceBlockingStub.class | Bin 0 -> 1737 bytes ...loWorldServiceFileDescriptorSupplier.class | Bin 0 -> 646 bytes ...viceGrpc$HelloWorldServiceFutureStub.class | Bin 0 -> 1941 bytes ...erviceGrpc$HelloWorldServiceImplBase.class | Bin 0 -> 2073 bytes ...WorldServiceMethodDescriptorSupplier.class | Bin 0 -> 1342 bytes ...rldServiceGrpc$HelloWorldServiceStub.class | Bin 0 -> 2013 bytes ...HelloWorldServiceGrpc$MethodHandlers.class | Bin 0 -> 2483 bytes .../tinsae/grpc/HelloWorldServiceGrpc.class | Bin 0 -> 5764 bytes .../tinsae/grpc/HelloWorldServiceImpl.class | Bin 0 -> 2161 bytes .../tinsae/grpc/HelloWorldServiceProtos.class | Bin 0 -> 2540 bytes .../tinsae/grpc/client/HelloWorldClient.class | Bin 0 -> 2320 bytes .../tinsae/grpc/server/HelloWorldServer.class | Bin 0 -> 1082 bytes .../example/target/example-1.0-SNAPSHOT.jar | Bin 0 -> 36567 bytes .../target/maven-archiver/pom.properties | 3 + .../compile/default-compile/createdFiles.lst | 24 + .../compile/default-compile/inputFiles.lst | 9 + .../default-testCompile/createdFiles.lst | 0 .../default-testCompile/inputFiles.lst | 0 week3_TinsaeGhilay/solutions.txt | 7 + 66 files changed, 2431 insertions(+), 121 deletions(-) create mode 100644 .vscode/launch.json create mode 100644 .vscode/tasks.json create mode 100644 week3_TinsaeGhilay/Task 2/out/client/InputHandler.class create mode 100644 week3_TinsaeGhilay/Task 2/out/server/Executor.class create mode 100644 week3_TinsaeGhilay/Task 2/src/client/InputHandler.java create mode 100644 week3_TinsaeGhilay/Task 2/src/server/Executor.java create mode 100644 week3_TinsaeGhilay/Task 3/out/client/Client.class create mode 100644 week3_TinsaeGhilay/Task 3/out/hello/Hello.class create mode 100644 week3_TinsaeGhilay/Task 3/out/server/Server.class create mode 100644 week3_TinsaeGhilay/Task 3/src/client/Client.java create mode 100644 week3_TinsaeGhilay/Task 3/src/hello/Hello.java create mode 100644 week3_TinsaeGhilay/Task 3/src/server/Server.java create mode 100644 week3_TinsaeGhilay/Task 4/out/client/Client.class create mode 100644 week3_TinsaeGhilay/Task 4/out/compute/Compute.class create mode 100644 week3_TinsaeGhilay/Task 4/out/server/Server.class create mode 100644 week3_TinsaeGhilay/Task 4/src/client/Client.java create mode 100644 week3_TinsaeGhilay/Task 4/src/compute/Compute.java create mode 100644 week3_TinsaeGhilay/Task 4/src/server/Server.java create mode 100644 week3_TinsaeGhilay/Task 7/example/pom.xml create mode 100644 week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloReply.java create mode 100644 week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloReplyOrBuilder.java create mode 100644 week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloRequest.java create mode 100644 week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloRequestOrBuilder.java create mode 100644 week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceGrpc.java create mode 100644 week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceImpl.java create mode 100644 week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceProtos.java create mode 100644 week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/client/HelloWorldClient.java create mode 100644 week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/server/HelloWorldServer.java create mode 100644 week3_TinsaeGhilay/Task 7/example/src/main/proto/HelloWorldServiceProtos.proto create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloReply$1.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloReply$Builder.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloReply.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloReplyOrBuilder.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequest$1.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequest$Builder.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequest.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequestOrBuilder.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$1.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$2.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$3.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceBaseDescriptorSupplier.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceBlockingStub.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceFileDescriptorSupplier.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceFutureStub.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceImplBase.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceMethodDescriptorSupplier.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceStub.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$MethodHandlers.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceImpl.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceProtos.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/client/HelloWorldClient.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/server/HelloWorldServer.class create mode 100644 week3_TinsaeGhilay/Task 7/example/target/example-1.0-SNAPSHOT.jar create mode 100644 week3_TinsaeGhilay/Task 7/example/target/maven-archiver/pom.properties create mode 100644 week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst create mode 100644 week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst create mode 100644 week3_TinsaeGhilay/solutions.txt diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..b9168f1 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,75 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "type": "java", + "name": "Run Client (Task 1)", + "request": "launch", + "cwd": "${workspaceFolder}/week3_TinsaeGhilay/Task 1", + "mainClass": "client.Client", + "console": "integratedTerminal" + }, + { + "type": "java", + "name": "Run ComputeEngine (Task 1)", + "request": "launch", + "cwd": "${workspaceFolder}/week3_TinsaeGhilay/Task 1", + "mainClass": "engine.ComputeEngine", + "console": "integratedTerminal" + }, + { + "type": "java", + "name": "Run Server (Task 2)", + "request": "launch", + "cwd": "${workspaceFolder}/week3_TinsaeGhilay/Task 2", + "mainClass": "server.Server", + "preLaunchTask": "build-task2", + "console": "integratedTerminal" + }, + { + "type": "java", + "name": "Run Client (Task 2)", + "request": "launch", + "cwd": "${workspaceFolder}/week3_TinsaeGhilay/Task 2", + "mainClass": "client.Client", + "preLaunchTask": "build-task2", + "console": "integratedTerminal" + }, + { + "type": "java", + "name": "Run Server (Task 5)", + "request": "launch", + "cwd": "${workspaceFolder}/week3_TinsaeGhilay/Task 5", + "mainClass": "server.Server", + "preLaunchTask": "build-task5", + "console": "integratedTerminal" + }, + { + "type": "java", + "name": "Run Client (Task 5)", + "request": "launch", + "cwd": "${workspaceFolder}/week3_TinsaeGhilay/Task 5", + "mainClass": "client.Client", + "preLaunchTask": "build-task5", + "console": "integratedTerminal" + }, + { + "type": "java", + "name": "Run HelloWorldServer (Task 7/example)", + "request": "launch", + "cwd": "${workspaceFolder}/week3_TinsaeGhilay/Task 7/example", + "projectName": "example", + "mainClass": "org.tinsae.grpc.server.HelloWorldServer", + "console": "integratedTerminal" + }, + { + "type": "java", + "name": "Run HelloWorldClient (Task 7/example)", + "request": "launch", + "cwd": "${workspaceFolder}/week3_TinsaeGhilay/Task 7/example", + "projectName": "example", + "mainClass": "org.tinsae.grpc.client.HelloWorldClient", + "console": "integratedTerminal" + } + ] +} \ No newline at end of file diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 0000000..b1c4a20 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,29 @@ +{ + "version": "2.0.0", + "tasks": [ + { + "label": "build-task2", + "type": "shell", + "options": { + "cwd": "${workspaceFolder}/week3_TinsaeGhilay/Task 2" + }, + "command": "mkdir -p out && javac -cp \"lib/*\" -d out $(find src -name \"*.java\")", + "group": "build", + "problemMatcher": [ + "$javac" + ] + }, + { + "label": "build-task5", + "type": "shell", + "options": { + "cwd": "${workspaceFolder}/week3_TinsaeGhilay/Task 5" + }, + "command": "mkdir -p out && javac -d out $(find src -name \"*.java\")", + "group": "build", + "problemMatcher": [ + "$javac" + ] + } + ] +} \ No newline at end of file diff --git a/week3_TinsaeGhilay/Task 2/README.md b/week3_TinsaeGhilay/Task 2/README.md index d18472e..285f32a 100644 --- a/week3_TinsaeGhilay/Task 2/README.md +++ b/week3_TinsaeGhilay/Task 2/README.md @@ -24,115 +24,130 @@ java -cp "out:lib/*" client.Client ``` +### Server commands: +```java +// list of valid commands +private String[] commands = { + "add", + "subtract", + "multiply", + "divide", + "mod", + "power", + "root", + "exit" +}; - ### inspecting packets using wireshark. - *** - #### Normal functions - *** +``` - I installed wireshark-cli and run - ```bash - sudo tshark -i lo -f "tcp port 8080" -z follow,tcp,ascii,0 - ``` - In Client program the interaction looked like this - ``` - Enter an integer: 4 - Enter an integer: 6 - The sum is: 10 - ``` - And the output of wireshark was as follows +### inspecting packets using wireshark. +*** +#### Normal functions +*** - ```xml - POST /RPC2 HTTP/1.1 - Content-Type: text/xml - User-Agent: Apache XML RPC 3.0 (Sun HTTP Transport) - Cache-Control: no-cache - Pragma: no-cache - Host: localhost:8080 - Accept: */* - Connection: keep-alive - Content-Length: 195 +I installed wireshark-cli and run +```bash +sudo tshark -i lo -f "tcp port 8080" -z follow,tcp,ascii,0 +``` +In Client program the interaction looked like this +``` +Enter an integer: 4 +Enter an integer: 6 +The sum is: 10 +``` +And the output of wireshark was as follows - - - sample.sum - - - 4 - - - 6 - - - +```xml +POST /RPC2 HTTP/1.1 +Content-Type: text/xml +User-Agent: Apache XML RPC 3.0 (Sun HTTP Transport) +Cache-Control: no-cache +Pragma: no-cache +Host: localhost:8080 +Accept: */* +Connection: keep-alive +Content-Length: 195 - HTTP/1.1 200 OK - Server: Apache XML-RPC 1.0 - Connection: close - Content-Type: text/xml - Content-Length: 129 + + + sample.sum + + + 4 + + + 6 + + + - - +HTTP/1.1 200 OK +Server: Apache XML-RPC 1.0 +Connection: close +Content-Type: text/xml +Content-Length: 129 + + + + + + 10 + + + +``` +I believe this is the expected result. + +*** +#### Intentional error +I changed the messge call string to `sample.add` instead of the correct `sample.sum` and run the program. obviously it threw an exception. the http response from wireguard was as follows +```xml +POST /RPC2 HTTP/1.1 +Content-Type: text/xml +User-Agent: Apache XML RPC 3.0 (Sun HTTP Transport) +Cache-Control: no-cache +Pragma: no-cache +Host: localhost:8080 +Accept: */* +Connection: keep-alive +Content-Length: 196 + + + + sample.add - 10 + 23 + + + 4 - - ``` - I believe this is the expected result. + - *** - #### Intentional error - I changed the messge call string to `sample.add` instead of the correct `sample.sum` and run the program. obviously it threw an exception. the http response from wireguard was as follows - ```xml - POST /RPC2 HTTP/1.1 - Content-Type: text/xml - User-Agent: Apache XML RPC 3.0 (Sun HTTP Transport) - Cache-Control: no-cache - Pragma: no-cache - Host: localhost:8080 - Accept: */* - Connection: keep-alive - Content-Length: 196 +HTTP/1.1 200 OK +Server: Apache XML-RPC 1.0 +Connection: close +Content-Type: text/xml +Content-Length: 265 - - - sample.add - - - 23 - - - 4 - - - + + + + + + + faultCode + 0 + + + faultString + No such handler: sample.add + + + + + +``` +Again the expected results. I only tested it in one machine. so time will be done may be another time. - HTTP/1.1 200 OK - Server: Apache XML-RPC 1.0 - Connection: close - Content-Type: text/xml - Content-Length: 265 - - - - - - - - faultCode - 0 - - - faultString - No such handler: sample.add - - - - - - ``` - Again the expected results. I only tested it in one machine. so time will be done may be another time. - diff --git a/week3_TinsaeGhilay/Task 2/out/client/Client.class b/week3_TinsaeGhilay/Task 2/out/client/Client.class index 51180a4bad43b4f2e93fc3cc3ea65c6fddf3914a..92e79ec5bd18854434efa2246e2fb511bd638a65 100644 GIT binary patch delta 1476 zcmZux+fN)-82_E!**UYr7#oO`Li&}3X`UXw54JP7~CYm%cMjuRk@WDj?0Zp}v-^?z>hrWF0obNl|?f3o8 zxv=KXLiL+}7ry|o2cOKVvL_Ra#$%>sSGQWpwB2G@!*MgEViUX^)eLux8&gJg+K$Dm z`^~7GAX6A#$G%0wR%~O?lBvW*(r!wmS}mKQyu5wYr6+1wmYJ%r$m!ySHA;DGbCh%{ zYO$STV26e}$PBmT>u7Y#VNk7v9UGb6cPwT*>FPB+fCeh)X1d12!~~VgaPO^Big_uR zQLu|aGTjh+u$QAz!-Lqj(w19KkDZEHqYScnByGee8P?{*xz^61acaB1Vo*ghS~yxY zJcKreJKZM#-w=Zmv+RB&o;Df0nT&h=+LmD2#VPSYnN*yE&4MP|pfF_J&9)kcF zhMj1Xx`RTMtY1O-7QnYU&=jZ`#TZ9S!?^g$dryrDj<|*iXB56@JTYlP6POVvq+-R!DGeE%7MG-r ziU(($LZ1@Xq=xcm818lk9E#><8A_Q^Gd5)oheM8<<`NEv6+9xv`3+)R z)QCsZaf8?xW(wY7DC`|GLoAdSAwiTN8JmoR$o3A6pV97i8Ru18z(tOCo%HXC8Totm zf#~9u(nky>;upC{EXiD4JX-K6d0s{vzC{OR?4+CcsEp!rv6}CCWI6f@KQl z`6{*G f!E1P()-`lKM;^kJZ@ThryiXRDw3qN9K8F4ur0PyH delta 1202 zcmY*Y-*XdH6#h29cC)OMNoh3Ji7OOn>5rh;Vgt0+QXsYzDrwQG$dayU%61czO{i$C zR6#|HKd!$JAM~j&`p`O)Vfvsx`>3z{0gi7z`Qi}2yBWuEcIMu5zCHKcbH4AMzv8!d z>c8CE`VqhgzTVIyf#W+CteTaodIcvnW9PhLSw}a5I#M{G;!y*S;h=*1a!$c^z0|0` z(XUxfVb1dGj9aRD3gY5Iply3bM?VHs95V0(2E|k`E>?rPwQd|Xa0Exi_rX06Y8Y0a zSFFX7WA|Beb2>UOV&Ex^imuS;9+_dxz;T>VpcPzi#&W8*f?#J?CJG%H15aaI)Iv!; z#vV=?n8ayuH~3JXtyBCNibtpLjEb`cvSLSgSHFrG1+9LAj^*Z4+4*wuvUSn1b*OmO zz;lQw2p6!~!P%uD|}H@1|sOJ1Sq${H*K7ctJ7>~c9un&u4Hc$t27 zghj_D{=4q1S1!2u!#d7m-ar8h;*aoNO@SlJUK9^Rj;<7WV$AjIvT3;{`?d3SIc@5g z!Yc;KXlHpPCh=s!o`EWAWN+T8OxjCc#wGJ)W>)@OGVrP-O?8`pG`yyuC*%4;F*9ZA zGtW4-Rk2MfDK9i@mPr-=y|z!LSvK$n78HbJ8VzrXRF@g*?HTnR2R)c zC2cAiK4hRmt0jVub$kM$;#1k%XJSG9P5Dv`Y5PN8DM*SDEh%njMtceY%ElHXWwb)H z!-#ObDmJwEBdf%u2P6>1TXQGAndP^M5rx%2ang0rWI*g zy|JN0sE#MoYC`=P{dF80&^B?hP20i*P{*0|M*UQG9p}~&o$TqYW47m~iA`MCM2={F z3zz(;4Fs_b%lxKE$||mL2iCB%MnMAvz{e<`;lm8;Kr8lQH}-LQI&lEK806a+rZvV9 zI*o&TY=@8|x`;Hca2}R_i6lW1J;V;L<+!BdgU&Q2cMSa8&VbQ$?alUq9*?TloRG o4I+xqRa4h?o_UX005|YH_wBSkV#EjjdJ~@$)9HVKTeywHKXyg+0ssI2 diff --git a/week3_TinsaeGhilay/Task 2/out/client/InputHandler.class b/week3_TinsaeGhilay/Task 2/out/client/InputHandler.class new file mode 100644 index 0000000000000000000000000000000000000000..6a650b6a5296d97819dd2840fd49f333b172d383 GIT binary patch literal 2356 zcmah~TW=dh7(MGa-i@LlBwSK1~`+7Nm%I7z{6ic?y;u{Y_a_O82L zrwJ6=7lil$JoJGFghV9Z!5}aN3EtrsAR!@fk&uuOuRKu7nf0b|pa@Gdv){~jJ>Qw} zH-CNc6@W3^jUt2w8DSNTh)9Sn7>mYW-mvEfr)C$-tS2FI!m=%IR6;|dcUp$BPAToV zmOZZ^%3~v!Q=m#vO66J4HL{+94U`Jyyk`~j%L-z2ma`VEoT)&gLBXLxhlIwWbIWuU zY?Kgo9fx+C`DHFyUK6&WOU5=8-PkUnJ)5^o+Z#;U#j+GzVTF&5k*5uLJGz!BCdL(G4ZO?S$h8^dD zId8f{@hB4LmC>i7A36j3Vb|M=!h|QfPW(Hq-sva?FeqcciUT+(q0M(u_N@G1I&0Xr zC@p&3C{3D6UQ&1={xibnu!=ac+$;Pyb3!>x=R%u!kF<#@If@ullWi9z2ssAV~I2D0kKt{%lipzL$m6<*P#$4A} zCZ8ilDP@(|`#p(zX4kIfaL^UsLZ}Tl<0@W~aZQDRS?0LLsG1kv6x%Z_o1WM8XVo9+ zB_pT86!cQaz3bynj%CZ3S8-jqjMO@g`#)HaebmEg6mR$7gmd{XY{aymb7PN zZ%i1)z*Fpzr=T$s_Wqx@fY9vqyy*pIK0>|qm_O2ru4xGv*IlGFrGim>ltItqu7BP2 zTeC_#WjAY{u>>e>^{?E3XeD-%fFZuy5@$Y${F3?2hnw?FN*DMoaXr@e8Kl0L@+IU< zgVvPJgtg{$rcrB2XChi_IwNas>5QVar!%pL*2!7cHl;tsmXCbjE@$z#0JI>C7(JHY z1rgrnewZgGKE@7hPZfLntJrrB?OYDs$I%I{BbQdNU96M)v`tlv-9w{P5$dO_IJ@%j zYrR7I5JZ##G;`h!1$)qn9&Ey1Y~zLBfj;i`V;^)3QtK$^A-V?gHfCxBVRtsvDbgEVk2A!0vMOLe4*R25SbeR>toGcnyy>>>|W9{xn#T3TBP zDEN#j7(qKm8S*6I9%GW@ehN(pDSx7a3DAJAK@hN)l0dDk?-Ojfk4wa0>T_HP;X`gp ze!-$qzy#+dEC*)YT*YpqFca9+t4>pT8Lw~_{oN5nkcDd3!G9`WquOn}T2q!zQ(3g? zcag_LXp|*qKcM^$hy41Xt`4qKm3MD1bG-p+N$ih7S`j5I7ZT-HHsLp-D_FG|u?I-8qf(3iYwi!#egyM1 Io`-PfZ@qRRQ2+n{ literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 2/out/server/Executor.class b/week3_TinsaeGhilay/Task 2/out/server/Executor.class new file mode 100644 index 0000000000000000000000000000000000000000..552edc308acb4bc339d6f56d53e3045aad6d8460 GIT binary patch literal 944 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 literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 3/src/client/Client.java b/week3_TinsaeGhilay/Task 3/src/client/Client.java new file mode 100644 index 0000000..24c1960 --- /dev/null +++ b/week3_TinsaeGhilay/Task 3/src/client/Client.java @@ -0,0 +1,41 @@ +package client; + +// Client/Client.java class represents the client that has to relay on the Hello engine +// to perform tasks remotely. +// it needs the Hello interface from Hello package +import hello.Hello; + +// it also needs those to access the registry, +// so it can get remote object reference of the server +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.util.Scanner; + +public class Client { + private Client() { + } + + public static void main(String[] args) { + + // normally, the address of the server is passed here on the command line as an + // argument + // we get that address from args[0] if provided, else we use null for localhost + String host = (args.length < 1) ? null : args[0]; + String name = "Hello"; + + try (Scanner scanner = new Scanner(System.in);) { + + // get the registry from host(server) + Registry registry = LocateRegistry.getRegistry(host); + + // look up the remote object by name in the registry + // stub is the a reference to the remote object + Hello stub = (Hello) registry.lookup(name); + String response = stub.sayHello(); + System.out.println("response: " + response); + + } catch (Exception e) { + System.err.println("Client exception: " + e.getMessage()); + } + } +} diff --git a/week3_TinsaeGhilay/Task 3/src/hello/Hello.java b/week3_TinsaeGhilay/Task 3/src/hello/Hello.java new file mode 100644 index 0000000..5f2bbd6 --- /dev/null +++ b/week3_TinsaeGhilay/Task 3/src/hello/Hello.java @@ -0,0 +1,12 @@ +package hello; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +// this interface extends the interface "java.rmi.Remote" +// so its methods can be invoked from another Java virtual machine +public interface Hello extends Remote { + + // say hello method, This is a repeat of task 1(done as part of learning RMI) + String sayHello() throws RemoteException; +} diff --git a/week3_TinsaeGhilay/Task 3/src/server/Server.java b/week3_TinsaeGhilay/Task 3/src/server/Server.java new file mode 100644 index 0000000..d22c46b --- /dev/null +++ b/week3_TinsaeGhilay/Task 3/src/server/Server.java @@ -0,0 +1,56 @@ + +package server; + +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.rmi.server.UnicastRemoteObject; + +// needs the compute and task interfaces from compute package +// define constructor for each +// and provide an implementation for each remote method in the remote interfaces +import hello.Hello; + +/** + * The implementation of the Compute interface for the compute engine. + * it has to declare the remote class to be implemented (in this case Compute + * (implements it) + */ +public class Server implements Hello { + + public Server() { + super(); + } + + @Override + public String sayHello() throws RemoteException { + return "Hello, world!"; + } + + // entry + public static void main(String[] args) { + + // the code provided on the tutorial was deprecated. + // so google led me to + // [this](https://docs.oracle.com/javase/8/docs/technotes/guides/rmi/hello/hello-world.html#create) + try { + String name = "Hello"; + // create remote object that provides service (server). + Hello server = new Server(); + + // and export remote object to java RMI runtime + // so it may receive remote incoming calls + Hello stub = (Hello) UnicastRemoteObject.exportObject(server, 0); + // the register the remote object with java RMI registry + // the registry is a name service that allows clients get a reference of remote + // objects + // once a remote object is registered, callers can look up the object by name + // and obtain its remote object reference + Registry registry = LocateRegistry.getRegistry(); + registry.rebind(name, stub); + System.out.println("Server bound"); + } catch (Exception e) { + System.err.println("Server exception: " + e.getMessage()); + } + } +} diff --git a/week3_TinsaeGhilay/Task 4/out/client/Client.class b/week3_TinsaeGhilay/Task 4/out/client/Client.class new file mode 100644 index 0000000000000000000000000000000000000000..5d4c8a5cc918d08c64f061b31dc290143dc81543 GIT binary patch literal 1862 zcmaJ>TUQfT6#h;KoG=*)f(WrngMua?iKSL5(OL;oX%n=B;)UK0lLL%Q=48!GtobMH zYhQSl2ds82?Q?%o`%=4SCRrpaS!Pz|TxRcY@BQt|-~YXN3*atxHAK+I5!KO;0fymc z;Od(s zTu)XRBBsqSRtz*vm0PoGb+7C>QdILAIEH=urx_;FJw-BG8b)!3V@$_cj5DMHAg5~P z9Jyz@p3}$`l_5O2(L6H5_oR1ny4C~^LLEmx0%OE0&+wUh!FsW$%oYKaJz*S_L@ki#*y!xhpdC0iiIpAz6nk0K9Yd~C z%BZhGZ?b+#5X`bt9`&E7m87??DsBu<2&S2I*$Z(^7tp7I*9pUoG>@lt$BJOV&XnXY-*AFqa z9=a~^$++e$Krb$FwwTJi(qui{{K7g$M9Zh60Tm z7nMrat5^N%65uD zqd0|bp3N6GY4&tKyUP@Yx4(P2R6eYx3cWOjXE8w*rl?&Tr<6=BYZt^@Be7!4pEpyF z#*;^dPWEcuRy?;g1_~Gde*YQMn#a1b?%Egoo4$)&?ftx(c|?o2ghrcu!ukz#pxCsF P9+fjHO>&<&KTL-^N+j0{}5IrLaue@4Y*v4Q80UKYCu+4IZAOit`gM(yke9r`gCS5w@tluJrS~G$x~$5BcBV&tx=;7%nScKM{1w1M{H7y=tcIL{V;EvM z{*Lc*)8Ss*eBOK~EX6RiVtcl_&yX#Zw>0E?PF-a?<_7m#($%3M8-5A~42&=oJh7)9 zN$CjgMZh;2iVP!x@OOo8HljtxXowoegoYCaCUKHsHp=h2wwbuT^lXa~*BCdggqo)`!K8m9_GbBMnmwMN7J!t`cT7UUi(ocN)$b_#WpNru%Vx(Y6ES@0&Gg zaV0hqlVQ~I#i4`qrF61Bu7{}PF-?{8uG$u!qGFWv3%Gz;4RZ$OvA}TVXx1K@+V6{| z?X?&dk}4x{8p^l5cI8Ns<*i|qP}XqCz#^7GRE4{d_kcU1r*#R zvX>c*SfA;p?0PL7S8!FsH3QdigJB}#dKkr^b;1}9X+1fBWjHpsdeDfLLhuTQHm`C5ooYAEz09VBkkQWH{yW9Z{7YHTadS zwrLkA?x|pK;|2s{$W>*FQWa~qC)T@eQ}~;_>ClOhQjbi%Pe0J`6T?(rzj*rke^W@8 z+tihlrMGdr)9lMzG#3rUt(`jWB$@Pv?E02iwZpW9Scl7Dcv6z?lcJI2ow`ulvK8d< zoSK?wC3+pbJI#ti_(jJC8X7jk?!07}izr6fZEsiZ2s56bxM8c@qN&_x_#>@e;uvRp zN*CP`!CXzsoo*)?ymU3G`VIj%_d8;Md%7R-J+7oRNkUY)<1}m~Dx|@h=Lx^+@E{P> z_Foz1kJL1Xs)jcV=l@W0g#J#MbF|+3 zf>DAVuPtUjVeA`D)yHzrKH>EG^7#3szcG`=2V5LqK7jcrCTbsWd+`8wKjS_?NAIH) zWh~K!%0x^TC<$;8d3qSeaFzI8qoS^(j9cV&1Iy&Og4_6+yfkDS4L6I#9l)=*LaK5{{bOtr2YT^ literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 4/src/client/Client.java b/week3_TinsaeGhilay/Task 4/src/client/Client.java new file mode 100644 index 0000000..db0fe27 --- /dev/null +++ b/week3_TinsaeGhilay/Task 4/src/client/Client.java @@ -0,0 +1,44 @@ +package client; + +// Client/Client.java class represents the client that has to relay on the Hello engine +// to perform tasks remotely. +// it needs the Hello interface from Hello package +import compute.Compute; + +// it also needs those to access the registry, +// so it can get remote object reference of the server +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.util.Scanner; + +public class Client { + private Client() { + } + + public static void main(String[] args) { + + // normally, the address of the server is passed here on the command line as an + // argument + // we get that address from args[0] if provided, else we use null for localhost + String host = (args.length < 1) ? null : args[0]; + + try (Scanner scanner = new Scanner(System.in);) { + + // get the registry from host(server) + Registry registry = LocateRegistry.getRegistry(host); + + // look up the remote object by name in the registry + // stub is the a reference to the remote object + Compute stub = (Compute) registry.lookup(Compute.SERVICE_NAME); + boolean isAuthenticated = stub.authenticate(); + if (isAuthenticated) { + System.out.println("Client authenticated successfully. Door opens."); + } else { + System.out.println("Client authentication failed. Door remains closed."); + } + + } catch (Exception e) { + System.err.println("Client exception: " + e.getMessage()); + } + } +} diff --git a/week3_TinsaeGhilay/Task 4/src/compute/Compute.java b/week3_TinsaeGhilay/Task 4/src/compute/Compute.java new file mode 100644 index 0000000..38b3cc3 --- /dev/null +++ b/week3_TinsaeGhilay/Task 4/src/compute/Compute.java @@ -0,0 +1,13 @@ +package compute; + +import java.rmi.Remote; +import java.rmi.RemoteException; + +// this interface extends the interface "java.rmi.Remote" +// so its methods can be invoked from another Java virtual machine +public interface Compute extends Remote { + static final String SERVICE_NAME = "authenticator"; + + // say hello method, This is a repeat of task 1(done as part of learning RMI) + boolean authenticate() throws RemoteException; +} diff --git a/week3_TinsaeGhilay/Task 4/src/server/Server.java b/week3_TinsaeGhilay/Task 4/src/server/Server.java new file mode 100644 index 0000000..361802b --- /dev/null +++ b/week3_TinsaeGhilay/Task 4/src/server/Server.java @@ -0,0 +1,65 @@ + +package server; + +/** + * Server implementation for the Compute interface + * @author Tinsae Ghilay + * + * mimics an authentication service for some client to access a secure resource + * (mocked as a door that opens or remains closed based on authentication result) + * verification is done randomly for demo purposes + */ + +import java.rmi.RemoteException; +import java.rmi.registry.LocateRegistry; +import java.rmi.registry.Registry; +import java.rmi.server.UnicastRemoteObject; +import java.util.Random; + +// needs the compute and task interfaces from compute package +// define constructor for each +// and provide an implementation for each remote method in the remote interfaces +import compute.Compute; + +/** + * The implementation of the Compute interface for the compute engine. + * it has to declare the remote class to be implemented (in this case Compute + * (implements it) + */ +public class Server implements Compute { + + public Server() { + super(); + } + + @Override + public boolean authenticate() throws RemoteException { + return new Random().nextBoolean(); + } + + // entry + public static void main(String[] args) { + + // the code provided on the tutorial was deprecated. + // so google led me to + // [this](https://docs.oracle.com/javase/8/docs/technotes/guides/rmi/hello/hello-world.html#create) + try { + // create remote object that provides service (server). + Compute server = new Server(); + + // and export remote object to java RMI runtime + // so it may receive remote incoming calls + Compute stub = (Compute) UnicastRemoteObject.exportObject(server, 0); + // the register the remote object with java RMI registry + // the registry is a name service that allows clients get a reference of remote + // objects + // once a remote object is registered, callers can look up the object by name + // and obtain its remote object reference + Registry registry = LocateRegistry.createRegistry(1099); + registry.rebind(Compute.SERVICE_NAME, stub); + System.out.println("Server bound"); + } catch (Exception e) { + System.err.println("Server exception: " + e.getMessage()); + } + } +} diff --git a/week3_TinsaeGhilay/Task 5/out/client/Client.class b/week3_TinsaeGhilay/Task 5/out/client/Client.class index 6ecca478d51f8467ee08029357221583a9909ac3..cb833a8e95b16cadb8b22f57f8ca1ea61ecba577 100644 GIT binary patch delta 745 zcmY+C%TE(g6o`Y)$lbXoJl^Yjsb>~0f#(D}SKqhm~y}x|tch8(NU#ossS>OH^z5s2!TeM=H z3np=vPz@#7E+>WIW}>I{P!} z(RfeNws08mbDg9f^E94LZJ{ht#OvYl6te+gM3d^x`9dyWoiP3bQ06?In^yzS)=72Ym&`Dj>~Jl5q#DDc$c z8P5$~l=A2GA>&8cD@8bYjvj?RAbsPYt)3EGxw=U{n4zhyeX|Ilgn?( zE8mZc3H{To+chb=B`4TQ1>0E9)ev3b!oKkI8dpt#9UHjmRX_1KfLk62EU~k`p+E%k z>|Yc`vE~q_oVs-mK5jE3#DrkuQl%;UhtI?=Ez$Ie!)L@yFZ<5-m0W|}Vz@vcOsq-={*GhpG z*`m`{)4>EsNODZ(cU<^p$%qKoB4jf!Il+5cxg)vf@D*h-3}*FrtLo}@gRWw!p&}Ua zkI`=66fuw)mjpSXWbyn#oirG%kao?9k4tK~FEJpyC(?=sE9)bk<~45#{R8|Z BlPv%M delta 646 zcmY+CyHis^6o%XH;i#T zLY@-}GZIYn28F`lNDxCY5n(Skta97cluf(c>bA|f{px}J=JwP-QMi5Td}m5|%-J@b zj4l`!d8T<@-S)zs(%;o<+vFVxzfrW&C_FkA46 z5hX5KBez5i%MjD@iAm}x+TUK=uIe5m6>Oz}Z5y~|4z6*B{nR>chxBaPz}@-ZZ_007 zo1xY(MLlinIG-8r%IQT=<1&jUXTG;z{DFRVnP}2YCv}N|<;u_Y5*L?=_tvt1rXyWq zq~nuFr&k#l^;($%l-R#Qh)r_$lkzH4Vr@n;%rYmBP)F6;IU4PPIg}ZulPpJs?Gk#A zFvo=IVxFTcah!X?p2e?7(3<=9mq}cRY5FSF%Mn4#PeG3+sGtee1gTIGoIj|Onz06% e=Arbd;}MS~M`blHhG*B}Q(lT@q<)3vEy;i8u5{J_ diff --git a/week3_TinsaeGhilay/Task 7/example/pom.xml b/week3_TinsaeGhilay/Task 7/example/pom.xml new file mode 100644 index 0000000..014e783 --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + org.tinsae.grpc + example + 1.0-SNAPSHOT + + + 17 + 17 + + + + io.grpc + grpc-netty-shaded + 1.49.0 + + + io.grpc + grpc-protobuf + 1.49.0 + + + io.grpc + grpc-stub + 1.49.0 + + + org.apache.tomcat + annotations-api + 6.0.53 + provided + + + + + + + kr.motd.maven + os-maven-plugin + 1.6.2 + + + + + org.xolstice.maven.plugins + protobuf-maven-plugin + 0.6.1 + + com.google.protobuf:protoc:3.21.1:exe:${os.detected.classifier} + grpc-java + true + io.grpc:protoc-gen-grpc-java:1.49.0:exe:${os.detected.classifier} + + + + + compile + compile-custom + + + + + + + + \ No newline at end of file diff --git a/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloReply.java b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloReply.java new file mode 100644 index 0000000..465763b --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloReply.java @@ -0,0 +1,567 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: HelloWorldServiceProtos.proto + +package org.tinsae.grpc; + +/** + *
+ * The response message containing the response
+ * 
+ * + * Protobuf type {@code org.tinsae.grpc.HelloReply} + */ +public final class HelloReply extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.tinsae.grpc.HelloReply) + HelloReplyOrBuilder { +private static final long serialVersionUID = 0L; + // Use HelloReply.newBuilder() to construct. + private HelloReply(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private HelloReply() { + message_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new HelloReply(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private HelloReply( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + message_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.tinsae.grpc.HelloWorldServiceProtos.internal_static_org_tinsae_grpc_HelloReply_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.tinsae.grpc.HelloWorldServiceProtos.internal_static_org_tinsae_grpc_HelloReply_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.tinsae.grpc.HelloReply.class, org.tinsae.grpc.HelloReply.Builder.class); + } + + public static final int MESSAGE_FIELD_NUMBER = 1; + private volatile java.lang.Object message_; + /** + * string message = 1; + * @return The message. + */ + @java.lang.Override + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } + } + /** + * string message = 1; + * @return The bytes for message. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, message_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(message_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, message_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.tinsae.grpc.HelloReply)) { + return super.equals(obj); + } + org.tinsae.grpc.HelloReply other = (org.tinsae.grpc.HelloReply) obj; + + if (!getMessage() + .equals(other.getMessage())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + MESSAGE_FIELD_NUMBER; + hash = (53 * hash) + getMessage().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.tinsae.grpc.HelloReply parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.tinsae.grpc.HelloReply parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.tinsae.grpc.HelloReply parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.tinsae.grpc.HelloReply parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.tinsae.grpc.HelloReply parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.tinsae.grpc.HelloReply parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.tinsae.grpc.HelloReply parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.tinsae.grpc.HelloReply parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.tinsae.grpc.HelloReply parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.tinsae.grpc.HelloReply parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.tinsae.grpc.HelloReply parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.tinsae.grpc.HelloReply parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.tinsae.grpc.HelloReply prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+   * The response message containing the response
+   * 
+ * + * Protobuf type {@code org.tinsae.grpc.HelloReply} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.tinsae.grpc.HelloReply) + org.tinsae.grpc.HelloReplyOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.tinsae.grpc.HelloWorldServiceProtos.internal_static_org_tinsae_grpc_HelloReply_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.tinsae.grpc.HelloWorldServiceProtos.internal_static_org_tinsae_grpc_HelloReply_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.tinsae.grpc.HelloReply.class, org.tinsae.grpc.HelloReply.Builder.class); + } + + // Construct using org.tinsae.grpc.HelloReply.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + message_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.tinsae.grpc.HelloWorldServiceProtos.internal_static_org_tinsae_grpc_HelloReply_descriptor; + } + + @java.lang.Override + public org.tinsae.grpc.HelloReply getDefaultInstanceForType() { + return org.tinsae.grpc.HelloReply.getDefaultInstance(); + } + + @java.lang.Override + public org.tinsae.grpc.HelloReply build() { + org.tinsae.grpc.HelloReply result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.tinsae.grpc.HelloReply buildPartial() { + org.tinsae.grpc.HelloReply result = new org.tinsae.grpc.HelloReply(this); + result.message_ = message_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.tinsae.grpc.HelloReply) { + return mergeFrom((org.tinsae.grpc.HelloReply)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.tinsae.grpc.HelloReply other) { + if (other == org.tinsae.grpc.HelloReply.getDefaultInstance()) return this; + if (!other.getMessage().isEmpty()) { + message_ = other.message_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.tinsae.grpc.HelloReply parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.tinsae.grpc.HelloReply) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object message_ = ""; + /** + * string message = 1; + * @return The message. + */ + public java.lang.String getMessage() { + java.lang.Object ref = message_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + message_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string message = 1; + * @return The bytes for message. + */ + public com.google.protobuf.ByteString + getMessageBytes() { + java.lang.Object ref = message_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + message_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string message = 1; + * @param value The message to set. + * @return This builder for chaining. + */ + public Builder setMessage( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + message_ = value; + onChanged(); + return this; + } + /** + * string message = 1; + * @return This builder for chaining. + */ + public Builder clearMessage() { + + message_ = getDefaultInstance().getMessage(); + onChanged(); + return this; + } + /** + * string message = 1; + * @param value The bytes for message to set. + * @return This builder for chaining. + */ + public Builder setMessageBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + message_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.tinsae.grpc.HelloReply) + } + + // @@protoc_insertion_point(class_scope:org.tinsae.grpc.HelloReply) + private static final org.tinsae.grpc.HelloReply DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.tinsae.grpc.HelloReply(); + } + + public static org.tinsae.grpc.HelloReply getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public HelloReply parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new HelloReply(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.tinsae.grpc.HelloReply getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloReplyOrBuilder.java b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloReplyOrBuilder.java new file mode 100644 index 0000000..76935fc --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloReplyOrBuilder.java @@ -0,0 +1,21 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: HelloWorldServiceProtos.proto + +package org.tinsae.grpc; + +public interface HelloReplyOrBuilder extends + // @@protoc_insertion_point(interface_extends:org.tinsae.grpc.HelloReply) + com.google.protobuf.MessageOrBuilder { + + /** + * string message = 1; + * @return The message. + */ + java.lang.String getMessage(); + /** + * string message = 1; + * @return The bytes for message. + */ + com.google.protobuf.ByteString + getMessageBytes(); +} diff --git a/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloRequest.java b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloRequest.java new file mode 100644 index 0000000..82bcfc6 --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloRequest.java @@ -0,0 +1,567 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: HelloWorldServiceProtos.proto + +package org.tinsae.grpc; + +/** + *
+ * The request message containing the user's name
+ * 
+ * + * Protobuf type {@code org.tinsae.grpc.HelloRequest} + */ +public final class HelloRequest extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:org.tinsae.grpc.HelloRequest) + HelloRequestOrBuilder { +private static final long serialVersionUID = 0L; + // Use HelloRequest.newBuilder() to construct. + private HelloRequest(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private HelloRequest() { + name_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new HelloRequest(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private HelloRequest( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + name_ = s; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (com.google.protobuf.UninitializedMessageException e) { + throw e.asInvalidProtocolBufferException().setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.tinsae.grpc.HelloWorldServiceProtos.internal_static_org_tinsae_grpc_HelloRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.tinsae.grpc.HelloWorldServiceProtos.internal_static_org_tinsae_grpc_HelloRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.tinsae.grpc.HelloRequest.class, org.tinsae.grpc.HelloRequest.Builder.class); + } + + public static final int NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object name_; + /** + * string name = 1; + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + /** + * string name = 1; + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!com.google.protobuf.GeneratedMessageV3.isStringEmpty(name_)) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof org.tinsae.grpc.HelloRequest)) { + return super.equals(obj); + } + org.tinsae.grpc.HelloRequest other = (org.tinsae.grpc.HelloRequest) obj; + + if (!getName() + .equals(other.getName())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static org.tinsae.grpc.HelloRequest parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.tinsae.grpc.HelloRequest parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.tinsae.grpc.HelloRequest parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.tinsae.grpc.HelloRequest parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.tinsae.grpc.HelloRequest parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static org.tinsae.grpc.HelloRequest parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static org.tinsae.grpc.HelloRequest parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.tinsae.grpc.HelloRequest parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static org.tinsae.grpc.HelloRequest parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static org.tinsae.grpc.HelloRequest parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static org.tinsae.grpc.HelloRequest parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static org.tinsae.grpc.HelloRequest parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(org.tinsae.grpc.HelloRequest prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + *
+   * The request message containing the user's name
+   * 
+ * + * Protobuf type {@code org.tinsae.grpc.HelloRequest} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:org.tinsae.grpc.HelloRequest) + org.tinsae.grpc.HelloRequestOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return org.tinsae.grpc.HelloWorldServiceProtos.internal_static_org_tinsae_grpc_HelloRequest_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return org.tinsae.grpc.HelloWorldServiceProtos.internal_static_org_tinsae_grpc_HelloRequest_fieldAccessorTable + .ensureFieldAccessorsInitialized( + org.tinsae.grpc.HelloRequest.class, org.tinsae.grpc.HelloRequest.Builder.class); + } + + // Construct using org.tinsae.grpc.HelloRequest.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + name_ = ""; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return org.tinsae.grpc.HelloWorldServiceProtos.internal_static_org_tinsae_grpc_HelloRequest_descriptor; + } + + @java.lang.Override + public org.tinsae.grpc.HelloRequest getDefaultInstanceForType() { + return org.tinsae.grpc.HelloRequest.getDefaultInstance(); + } + + @java.lang.Override + public org.tinsae.grpc.HelloRequest build() { + org.tinsae.grpc.HelloRequest result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public org.tinsae.grpc.HelloRequest buildPartial() { + org.tinsae.grpc.HelloRequest result = new org.tinsae.grpc.HelloRequest(this); + result.name_ = name_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof org.tinsae.grpc.HelloRequest) { + return mergeFrom((org.tinsae.grpc.HelloRequest)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(org.tinsae.grpc.HelloRequest other) { + if (other == org.tinsae.grpc.HelloRequest.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + onChanged(); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + org.tinsae.grpc.HelloRequest parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (org.tinsae.grpc.HelloRequest) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private java.lang.Object name_ = ""; + /** + * string name = 1; + * @return The name. + */ + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string name = 1; + * @return The bytes for name. + */ + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string name = 1; + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + name_ = value; + onChanged(); + return this; + } + /** + * string name = 1; + * @return This builder for chaining. + */ + public Builder clearName() { + + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + /** + * string name = 1; + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + name_ = value; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:org.tinsae.grpc.HelloRequest) + } + + // @@protoc_insertion_point(class_scope:org.tinsae.grpc.HelloRequest) + private static final org.tinsae.grpc.HelloRequest DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new org.tinsae.grpc.HelloRequest(); + } + + public static org.tinsae.grpc.HelloRequest getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public HelloRequest parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new HelloRequest(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public org.tinsae.grpc.HelloRequest getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + +} + diff --git a/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloRequestOrBuilder.java b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloRequestOrBuilder.java new file mode 100644 index 0000000..45419e6 --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloRequestOrBuilder.java @@ -0,0 +1,21 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: HelloWorldServiceProtos.proto + +package org.tinsae.grpc; + +public interface HelloRequestOrBuilder extends + // @@protoc_insertion_point(interface_extends:org.tinsae.grpc.HelloRequest) + com.google.protobuf.MessageOrBuilder { + + /** + * string name = 1; + * @return The name. + */ + java.lang.String getName(); + /** + * string name = 1; + * @return The bytes for name. + */ + com.google.protobuf.ByteString + getNameBytes(); +} diff --git a/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceGrpc.java b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceGrpc.java new file mode 100644 index 0000000..5e9350a --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceGrpc.java @@ -0,0 +1,291 @@ +package org.tinsae.grpc; + +import static io.grpc.MethodDescriptor.generateFullMethodName; + +/** + *
+ * The greeting service definition
+ * 
+ */ +@javax.annotation.Generated( + value = "by gRPC proto compiler (version 1.49.0)", + comments = "Source: HelloWorldServiceProtos.proto") +@io.grpc.stub.annotations.GrpcGenerated +public final class HelloWorldServiceGrpc { + + private HelloWorldServiceGrpc() {} + + public static final String SERVICE_NAME = "org.tinsae.grpc.HelloWorldService"; + + // Static method descriptors that strictly reflect the proto. + private static volatile io.grpc.MethodDescriptor getSayHelloMethod; + + @io.grpc.stub.annotations.RpcMethod( + fullMethodName = SERVICE_NAME + '/' + "sayHello", + requestType = org.tinsae.grpc.HelloRequest.class, + responseType = org.tinsae.grpc.HelloReply.class, + methodType = io.grpc.MethodDescriptor.MethodType.UNARY) + public static io.grpc.MethodDescriptor getSayHelloMethod() { + io.grpc.MethodDescriptor getSayHelloMethod; + if ((getSayHelloMethod = HelloWorldServiceGrpc.getSayHelloMethod) == null) { + synchronized (HelloWorldServiceGrpc.class) { + if ((getSayHelloMethod = HelloWorldServiceGrpc.getSayHelloMethod) == null) { + HelloWorldServiceGrpc.getSayHelloMethod = getSayHelloMethod = + io.grpc.MethodDescriptor.newBuilder() + .setType(io.grpc.MethodDescriptor.MethodType.UNARY) + .setFullMethodName(generateFullMethodName(SERVICE_NAME, "sayHello")) + .setSampledToLocalTracing(true) + .setRequestMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.tinsae.grpc.HelloRequest.getDefaultInstance())) + .setResponseMarshaller(io.grpc.protobuf.ProtoUtils.marshaller( + org.tinsae.grpc.HelloReply.getDefaultInstance())) + .setSchemaDescriptor(new HelloWorldServiceMethodDescriptorSupplier("sayHello")) + .build(); + } + } + } + return getSayHelloMethod; + } + + /** + * Creates a new async stub that supports all call types for the service + */ + public static HelloWorldServiceStub newStub(io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public HelloWorldServiceStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new HelloWorldServiceStub(channel, callOptions); + } + }; + return HelloWorldServiceStub.newStub(factory, channel); + } + + /** + * Creates a new blocking-style stub that supports unary and streaming output calls on the service + */ + public static HelloWorldServiceBlockingStub newBlockingStub( + io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public HelloWorldServiceBlockingStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new HelloWorldServiceBlockingStub(channel, callOptions); + } + }; + return HelloWorldServiceBlockingStub.newStub(factory, channel); + } + + /** + * Creates a new ListenableFuture-style stub that supports unary calls on the service + */ + public static HelloWorldServiceFutureStub newFutureStub( + io.grpc.Channel channel) { + io.grpc.stub.AbstractStub.StubFactory factory = + new io.grpc.stub.AbstractStub.StubFactory() { + @java.lang.Override + public HelloWorldServiceFutureStub newStub(io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new HelloWorldServiceFutureStub(channel, callOptions); + } + }; + return HelloWorldServiceFutureStub.newStub(factory, channel); + } + + /** + *
+   * The greeting service definition
+   * 
+ */ + public static abstract class HelloWorldServiceImplBase implements io.grpc.BindableService { + + /** + */ + public void sayHello(org.tinsae.grpc.HelloRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ServerCalls.asyncUnimplementedUnaryCall(getSayHelloMethod(), responseObserver); + } + + @java.lang.Override public final io.grpc.ServerServiceDefinition bindService() { + return io.grpc.ServerServiceDefinition.builder(getServiceDescriptor()) + .addMethod( + getSayHelloMethod(), + io.grpc.stub.ServerCalls.asyncUnaryCall( + new MethodHandlers< + org.tinsae.grpc.HelloRequest, + org.tinsae.grpc.HelloReply>( + this, METHODID_SAY_HELLO))) + .build(); + } + } + + /** + *
+   * The greeting service definition
+   * 
+ */ + public static final class HelloWorldServiceStub extends io.grpc.stub.AbstractAsyncStub { + private HelloWorldServiceStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected HelloWorldServiceStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new HelloWorldServiceStub(channel, callOptions); + } + + /** + */ + public void sayHello(org.tinsae.grpc.HelloRequest request, + io.grpc.stub.StreamObserver responseObserver) { + io.grpc.stub.ClientCalls.asyncUnaryCall( + getChannel().newCall(getSayHelloMethod(), getCallOptions()), request, responseObserver); + } + } + + /** + *
+   * The greeting service definition
+   * 
+ */ + public static final class HelloWorldServiceBlockingStub extends io.grpc.stub.AbstractBlockingStub { + private HelloWorldServiceBlockingStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected HelloWorldServiceBlockingStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new HelloWorldServiceBlockingStub(channel, callOptions); + } + + /** + */ + public org.tinsae.grpc.HelloReply sayHello(org.tinsae.grpc.HelloRequest request) { + return io.grpc.stub.ClientCalls.blockingUnaryCall( + getChannel(), getSayHelloMethod(), getCallOptions(), request); + } + } + + /** + *
+   * The greeting service definition
+   * 
+ */ + public static final class HelloWorldServiceFutureStub extends io.grpc.stub.AbstractFutureStub { + private HelloWorldServiceFutureStub( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + super(channel, callOptions); + } + + @java.lang.Override + protected HelloWorldServiceFutureStub build( + io.grpc.Channel channel, io.grpc.CallOptions callOptions) { + return new HelloWorldServiceFutureStub(channel, callOptions); + } + + /** + */ + public com.google.common.util.concurrent.ListenableFuture sayHello( + org.tinsae.grpc.HelloRequest request) { + return io.grpc.stub.ClientCalls.futureUnaryCall( + getChannel().newCall(getSayHelloMethod(), getCallOptions()), request); + } + } + + private static final int METHODID_SAY_HELLO = 0; + + private static final class MethodHandlers implements + io.grpc.stub.ServerCalls.UnaryMethod, + io.grpc.stub.ServerCalls.ServerStreamingMethod, + io.grpc.stub.ServerCalls.ClientStreamingMethod, + io.grpc.stub.ServerCalls.BidiStreamingMethod { + private final HelloWorldServiceImplBase serviceImpl; + private final int methodId; + + MethodHandlers(HelloWorldServiceImplBase serviceImpl, int methodId) { + this.serviceImpl = serviceImpl; + this.methodId = methodId; + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public void invoke(Req request, io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + case METHODID_SAY_HELLO: + serviceImpl.sayHello((org.tinsae.grpc.HelloRequest) request, + (io.grpc.stub.StreamObserver) responseObserver); + break; + default: + throw new AssertionError(); + } + } + + @java.lang.Override + @java.lang.SuppressWarnings("unchecked") + public io.grpc.stub.StreamObserver invoke( + io.grpc.stub.StreamObserver responseObserver) { + switch (methodId) { + default: + throw new AssertionError(); + } + } + } + + private static abstract class HelloWorldServiceBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoFileDescriptorSupplier, io.grpc.protobuf.ProtoServiceDescriptorSupplier { + HelloWorldServiceBaseDescriptorSupplier() {} + + @java.lang.Override + public com.google.protobuf.Descriptors.FileDescriptor getFileDescriptor() { + return org.tinsae.grpc.HelloWorldServiceProtos.getDescriptor(); + } + + @java.lang.Override + public com.google.protobuf.Descriptors.ServiceDescriptor getServiceDescriptor() { + return getFileDescriptor().findServiceByName("HelloWorldService"); + } + } + + private static final class HelloWorldServiceFileDescriptorSupplier + extends HelloWorldServiceBaseDescriptorSupplier { + HelloWorldServiceFileDescriptorSupplier() {} + } + + private static final class HelloWorldServiceMethodDescriptorSupplier + extends HelloWorldServiceBaseDescriptorSupplier + implements io.grpc.protobuf.ProtoMethodDescriptorSupplier { + private final String methodName; + + HelloWorldServiceMethodDescriptorSupplier(String methodName) { + this.methodName = methodName; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.MethodDescriptor getMethodDescriptor() { + return getServiceDescriptor().findMethodByName(methodName); + } + } + + private static volatile io.grpc.ServiceDescriptor serviceDescriptor; + + public static io.grpc.ServiceDescriptor getServiceDescriptor() { + io.grpc.ServiceDescriptor result = serviceDescriptor; + if (result == null) { + synchronized (HelloWorldServiceGrpc.class) { + result = serviceDescriptor; + if (result == null) { + serviceDescriptor = result = io.grpc.ServiceDescriptor.newBuilder(SERVICE_NAME) + .setSchemaDescriptor(new HelloWorldServiceFileDescriptorSupplier()) + .addMethod(getSayHelloMethod()) + .build(); + } + } + } + return result; + } +} diff --git a/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceImpl.java b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceImpl.java new file mode 100644 index 0000000..aedd959 --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceImpl.java @@ -0,0 +1,20 @@ +package org.tinsae.grpc; + +import io.grpc.stub.StreamObserver; + +public class HelloWorldServiceImpl extends + HelloWorldServiceGrpc.HelloWorldServiceImplBase { + @Override + public void sayHello(HelloRequest req, StreamObserver responseObserver) { + + System.out.println("Hello! Received: " + req.getName()); + + System.out.println("Sending back: Hello " + req.getName()); + + HelloReply reply = HelloReply.newBuilder().setMessage("Hello " + req.getName()).build(); + + responseObserver.onNext(reply); + + responseObserver.onCompleted(); + } +} diff --git a/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceProtos.java b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceProtos.java new file mode 100644 index 0000000..4761be9 --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceProtos.java @@ -0,0 +1,63 @@ +// Generated by the protocol buffer compiler. DO NOT EDIT! +// source: HelloWorldServiceProtos.proto + +package org.tinsae.grpc; + +public final class HelloWorldServiceProtos { + private HelloWorldServiceProtos() {} + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistryLite registry) { + } + + public static void registerAllExtensions( + com.google.protobuf.ExtensionRegistry registry) { + registerAllExtensions( + (com.google.protobuf.ExtensionRegistryLite) registry); + } + static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_tinsae_grpc_HelloRequest_descriptor; + static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_tinsae_grpc_HelloRequest_fieldAccessorTable; + static final com.google.protobuf.Descriptors.Descriptor + internal_static_org_tinsae_grpc_HelloReply_descriptor; + static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_org_tinsae_grpc_HelloReply_fieldAccessorTable; + + public static com.google.protobuf.Descriptors.FileDescriptor + getDescriptor() { + return descriptor; + } + private static com.google.protobuf.Descriptors.FileDescriptor + descriptor; + static { + java.lang.String[] descriptorData = { + "\n\035HelloWorldServiceProtos.proto\022\017org.tin" + + "sae.grpc\"\034\n\014HelloRequest\022\014\n\004name\030\001 \001(\t\"\035" + + "\n\nHelloReply\022\017\n\007message\030\001 \001(\t2[\n\021HelloWo" + + "rldService\022F\n\010sayHello\022\035.org.tinsae.grpc" + + ".HelloRequest\032\033.org.tinsae.grpc.HelloRep" + + "lyB,\n\017org.tinsae.grpcB\027HelloWorldService" + + "ProtosP\001b\006proto3" + }; + descriptor = com.google.protobuf.Descriptors.FileDescriptor + .internalBuildGeneratedFileFrom(descriptorData, + new com.google.protobuf.Descriptors.FileDescriptor[] { + }); + internal_static_org_tinsae_grpc_HelloRequest_descriptor = + getDescriptor().getMessageTypes().get(0); + internal_static_org_tinsae_grpc_HelloRequest_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_tinsae_grpc_HelloRequest_descriptor, + new java.lang.String[] { "Name", }); + internal_static_org_tinsae_grpc_HelloReply_descriptor = + getDescriptor().getMessageTypes().get(1); + internal_static_org_tinsae_grpc_HelloReply_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_org_tinsae_grpc_HelloReply_descriptor, + new java.lang.String[] { "Message", }); + } + + // @@protoc_insertion_point(outer_class_scope) +} diff --git a/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/client/HelloWorldClient.java b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/client/HelloWorldClient.java new file mode 100644 index 0000000..370342b --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/client/HelloWorldClient.java @@ -0,0 +1,26 @@ +package org.tinsae.grpc.client; + +import org.tinsae.grpc.HelloReply; +import org.tinsae.grpc.HelloRequest; +import org.tinsae.grpc.HelloWorldServiceGrpc; +import io.grpc.ManagedChannel; +import io.grpc.ManagedChannelBuilder; + +public class HelloWorldClient { + + public static void main(String[] args) { + + ManagedChannel channel = ManagedChannelBuilder.forAddress("localhost", + 8080) + .usePlaintext() + .build(); + + HelloWorldServiceGrpc.HelloWorldServiceBlockingStub stub = HelloWorldServiceGrpc.newBlockingStub(channel); + + HelloRequest request = HelloRequest.newBuilder().setName("Andrea").build(); + + HelloReply response = stub.sayHello(request); + + System.out.println("Response: " + response.getMessage()); + } +} diff --git a/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/server/HelloWorldServer.java b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/server/HelloWorldServer.java new file mode 100644 index 0000000..5d657c4 --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/server/HelloWorldServer.java @@ -0,0 +1,18 @@ +package org.tinsae.grpc.server; + +import org.tinsae.grpc.HelloWorldServiceImpl; +import io.grpc.Server; +import io.grpc.ServerBuilder; +import java.io.IOException; + +public class HelloWorldServer { + public static void main(String[] args) throws IOException, + InterruptedException { + Server server = ServerBuilder.forPort(8080) + .addService(new HelloWorldServiceImpl()) + .build(); + server.start(); + System.out.println("Server started..."); + server.awaitTermination(); + } +} diff --git a/week3_TinsaeGhilay/Task 7/example/src/main/proto/HelloWorldServiceProtos.proto b/week3_TinsaeGhilay/Task 7/example/src/main/proto/HelloWorldServiceProtos.proto new file mode 100644 index 0000000..bd3feff --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/src/main/proto/HelloWorldServiceProtos.proto @@ -0,0 +1,22 @@ +syntax = "proto3"; + +option java_multiple_files = true; +option java_package = "org.tinsae.grpc"; +option java_outer_classname = "HelloWorldServiceProtos"; + +package org.tinsae.grpc; + +// The greeting service definition +service HelloWorldService { + rpc sayHello ( HelloRequest) returns ( HelloReply); +} + +// The request message containing the user's name +message HelloRequest { + string name = 1; +} + +// The response message containing the response +message HelloReply { + string message = 1; +} diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloReply$1.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloReply$1.class new file mode 100644 index 0000000000000000000000000000000000000000..89eca99a8f9833836c9858d442c5081621ff1b22 GIT binary patch literal 1239 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 literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloReply.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloReply.class new file mode 100644 index 0000000000000000000000000000000000000000..0f7395774b492f2a16ab8877a1a086d09a496181 GIT binary patch literal 12449 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 R*)I-=o%w}4e(IOk{{voq-aY^T literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloReplyOrBuilder.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloReplyOrBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..a4b7c5c3729ad93731c6e259793e4cfc3ae4368a GIT binary patch literal 286 zcmZusyAA4L2t#9)aB-4J7RsiPSh3b-$Em(;?IMr$k!^qqp?j8BDYQ(K*dERtxd1i7 zC^8qJj8U3JYK=38{3JGbIBtoB(wcvl<9JLTDB^T5ruvQA+>- literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequest$1.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequest$1.class new file mode 100644 index 0000000000000000000000000000000000000000..906e09517552c6b8402920b477707c15805bb0e2 GIT binary patch literal 1251 zcmcIkT~8B16g|@xmaauwzdsNwRs>4i)Yl>jBBUf02_+;xPPfx#$abd8&Jz4r`XY%Y z{s4cJ@lGKGanm<8nZ2`j?>&3&J#+W>pC7*fyu)iBIpjSQN|?YT!+fX*L8NsQi(qK9 z)!nootalS@cxZRINrYjTT$M`NHHQ4+(t(F5hFNW*z)F>H5kzJf1}zcCdQTjuBC$R^ z_zwRT!~SAB>kAvYCwkjznA(mtf)ARRQJbe$s6=YDCn8CdzOI=T2LPJU-w? zy5|dL!5+$lp*j||)*##o=^DwfklDolTFp=q*Bi@F&rHr%fWhB94aLxsG>M023~#eU z-c~0(mc3nftU?{XPy2mgE)yBVO=xh$Pk0b>6$PKVMd1lM& zgg-~|4!=Rx(e;+=E8kJN4t|xMcL9D0gy)o4q>{^IX-!ZI9Jd#kAK90vkuA`V1$Z^` Ocvv9o6N_oGbo~VZ-%Ka~ literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequest$Builder.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequest$Builder.class new file mode 100644 index 0000000000000000000000000000000000000000..3edc4e47c5aa516a22327eb9004386828b0dbf78 GIT binary patch literal 13218 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 k%W>Rz|2o8 literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequest.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequest.class new file mode 100644 index 0000000000000000000000000000000000000000..4fb6b4490ccb067b2a3dbe0d29acc35d7edf81f9 GIT binary patch literal 12491 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 I)hDmN1TUBI2LJ#7 literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequestOrBuilder.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloRequestOrBuilder.class new file mode 100644 index 0000000000000000000000000000000000000000..851a46eddc4ba311b8b159069ed27d5b3a52d3da GIT binary patch literal 284 zcmZusyNUua6g}5he1e6Qr6_1)K47u2SS);ienA|sVI)r6BqR817W)By)Up{6Z7gnc z?s-1`?!N$L=m?YuBkQybY33D6?JkL2urYSaKRNrbaq~Pi2X+D#LiePuN*a}Ex!IpM z2?903FtKN;t<{F*#o1u@`BARed!_lMCkV}9tXUYNBudWAkYd6>Ad8@v3ooDNYfnqnOk{Ga`gmfusEo0@6@> literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$1.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$1.class new file mode 100644 index 0000000000000000000000000000000000000000..df899e7c68dcd4d157758e76d4ede0ec4c6375a5 GIT binary patch literal 1370 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 literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceFutureStub.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceFutureStub.class new file mode 100644 index 0000000000000000000000000000000000000000..5cf8d7b7dc249482ab7a6bbd345011662d62c6fc GIT binary patch literal 1941 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 T+u_=cIa+m6pwV0J4hH`K*YqUG literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$MethodHandlers.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc$MethodHandlers.class new file mode 100644 index 0000000000000000000000000000000000000000..8572229c5bfab71dc75edc1cfdb840d265682606 GIT binary patch literal 2483 zcmbVO-*4Mg6#j0K#!H&DCEH5YbuhLJlC)bw*#;~ju!e4p$To?LA|9ROD)Z{v!FDS3 zFXDj*gv6Kx67b9;KVHy;5Ko9d0`XltX`99g5w`4meeOBm`OdlL-s>O#`Q|$S?_gU) zMBu9Jbc>#0xwzM*~ z8ndB{@mJ=Xx+}|y)lv#CAT4le&v#bu2#C6dvjVH3@E^)g`_lE2SjLMQGAW$Liom;} zx+jyCok)fLUH!lx7O3XJBOACbHw-(N8Q1H#icQav`rgBq%8hi&`5g_b0-2);x#M!k zGi+8T(F{7*MMy}f&1?+wzO zXc}Eh_xcV)x|Z|7W3Vblt{E+ihm|%K1F(O~#MBN_Gs){^BTpiau zK{tHCj@H9ulhBnrt8wTOp4B*HEsvTCB%5~MY0JBYT7@fPyQVsTuB-Cow)udY@wV;q zz)96DOFA`E=YGcpx-h!(1kR7)3=aYgHSU;`HXoil$2LTPbD^oDJTxl;XF>u-iAPV2 z_e;2h%g7>vv^pAj4yV<5#5T%D!>bT@jlErJD9K{s8KQ-?r$`i5pJMS#Uoppbnqa_B zeE*CDej(Ja$WwADFhc=r{33wwM)*DDD1vqNQ*@)o3b@9WyElp)QI5Z$y>eVCe1*l& z+2M7CkJ4AyS;`Y@Kj6&z*EshX=D)>-PoCl8_lj8zirF&e`2GzUJZGT46ZH?G|9OmE z>5yHCiFw_}E@1<24A=!RC@sZ~TzKC&)VfKnTa?Zrnpx2BCc6>5vPoa>FD&72pWt#}cStbf)8bJ@i=(lCmKwWBzluy0Vrf9-HlYJjWmGs6 w;jdQJZ~5QAb^~!1gTQ-OAte86VhNVTCf<)HID4DeVtbkGUA9@a_u`3v0fsEIivR!s literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceGrpc.class new file mode 100644 index 0000000000000000000000000000000000000000..b5884f81f40ee0d6a8147f08574859251a7a36c2 GIT binary patch literal 5764 zcmcIo33n6M75<(r7)i)14t5MSU=t^JAyy$I(3k?od$0|)j29Azj^(jDFrHCHBU8GU zF6qAS`=0J4BsFem6B^pm_9yk6_Vjx*l16AGAB97Fj%W0?``vrrUFYBbd+l`q@4~;L zs6nlQPz;-}Sz!AmbybZUs+o$PUAUwr9f8fqbyIgv2-J3TPDc<%L_su$ErK^#GCraihBaf^#$rOVSM{Ve%vpgQDa}c!SKZZd%~`e<1$K|=mUqaT8PGCG zTTeTd-5bSLY*Vm3h8?IEXsWbPAZlt?PG@yvQL_cwJ31@UY|riLjbJAl6g0;0Fq#A& zsYJWo<7(<^S`*lGexh%3j`CKf?{6pjyV0zmC5AoNE6`dIqQJS5(HswHw4*ABDg+Iq zRiKR*)Z<-HkG!Cszy*b|Um%>xU5?azdkl}_F@eUEW@@(TXhT`U@Wh)?SE!9+9b>+k zBph2eQ@z2N&ft_(Oh*iz=%Ptb}8x7#>FtZG~hL>Pp(s7N@K+E2$b& zwwfe|yu6MJRS|m!4kFPba8$vu7~YAe1)B2)lC~|!TF5TN&&eO>9o@*##8*^1v#c71H1UCsv81&UPgz#V z(Bg&t<60)8rnKG-wOQ>A$1t^YnHJ8f9W%M2ir zX$8E1D%JZ$6iJDnlK9I4efNn!ly$PUCedZ`y%fV`7;gA<^J}q@H5YW5OTPXheaD2Q zAT3ks3j(|HAt$g?;AlA;uS~j-Srsr^jo+`7x}o{(`mSe76|Ulng7-=XV~}X8$aRAU_uqB>t_UH-f^Z?Bg@Cq`>oQbHiqZ!Hpi+n8=@6WNso&7M*h z49?WM`FL8jbve#WhMZ-cc5|RSW@*$Wc;mfPSfAx6)g>G?d3jt-yJH1kWia;Zl&NLg zy5jLMTcq~~teNJ?tm)`0+NimzXLL&0XPTCyIy!HO1#00!+|b5&mtTudrjs5klyK`( zNx{`cr`ouRi{}eCfi1RIoOt!*-tv0QrF>~*w&rC~Z+}ar{qpW*G2&M5-rjS*FZjXx zKK)eHD`ppgrRsK8@Q70T3swy-ZX`CYbp)OLY&Nl&+4_`I(5ZktwdalL1|fvg?uzF{X^NlC%2_HIva8_LM@O8};C1 z_)zfLhTV6e$>1IM1-?LM0N11G-(J3WV6`6DE4@|08*B!viXRI8T2w0qLJeSmuAz4wC*2zYGE;38c9|OSh3K1)3(%{96F}l?(K1T+0EiQ$Nz!PTYWgrt2<_=8Vl9 zwASxi$I30(WWiZOb{+3q!w1&z5ot_%z?hEUC@CGq)9%~Tdk;+jq5&b%h_HAVb)pG7 z#4a?5-DnfdXcsN~B(?{K#XcMtZ3W{Ak;-pe&nlS8VFhN9sf6%bqSfGcuCYkZ`#r~h z;C~Y_hhgJ7ZmzLW3uQ@ijdzHe=g@KhLo=IRvp z$-h~S|H6H*<2K&p`n)$ynql1Gd@?sqar`%qSJ`Sxx;DpuC!Onj|05J7A7R|(_*K6D H8H)TLoJGGp literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceImpl.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceImpl.class new file mode 100644 index 0000000000000000000000000000000000000000..b23f3e13a69e33473854ac434333a50061698594 GIT binary patch literal 2161 zcmbtVU0WMP6n-ZJ7Q!kRXe%kDp{8v@X(N7CLP3dA&=4xYptgQYHuHono1JuLg7Q!N z6JF>Aw!QEN_@jJ0vzyvfmbA~~Ud-&wnR(B9-Z^vTufL!E3E&QzDI_ptA!%b6BMfUY zXce{VD=vzypyL!bh3CnA8F zA!TD6HpApYe#DC&_glrVt`P?V+baJ}#91Nu{%`&uzv z%b(sE1D3*@n6Z$taS^i&Q!(s`P{+jL`4nCpYCR32n!;sdEzH}vg0~nlXT;d?ju}$E z_-VcCdQA}+riIGci*vno6n4TmxrXZ&@-_-sV7T(~edJ6Dy)BgDEmHJ$TmY})-gsWL zaTB)~h8u=E!`wjTrE$ECB@6G^co*+6T%@E3Gg0YoqZnnzPD4>L8Wl#QUll)_4C-gN z(|9NxT`JTK)(18|G^sr<{j#Jq62R;k1J{gulSzHxQX*ZCSLeUzC5BPOkHh=Ku$qtG)ywfxWq=kGE#0O-JR*Sy zqtHDJgz8Yzi|0aK8i-AY7l<$iXV1bWD+P1@MM;i3&tw_MePs~nD#4D`+?LOEHz3s? z{11^{;>bvts>yEPhz-}Aa3;3U-7?pmR9u%*D;@C8w$KN%sYbCwNfB=AWi+a%i-%_Q(S u*}e$>D%hren#OyCQ4QOBVY`cO$&w*U0{8J_ literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceProtos.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/HelloWorldServiceProtos.class new file mode 100644 index 0000000000000000000000000000000000000000..037eb9311404dd044db55d2588b6735588ae201e GIT binary patch literal 2540 zcmbVO?N`%g6#qSKAteUTIwm5ZBGVSI5tw6InBzr|S%Fc8^YEc3O&_{=(u5@`XZ@e{ zVUu$v+m4=n-XFE&eUjJ|8ji3J$xZUy_xro|=HLJRdJkX$KgviTDIukx3*8KtUu%b& zYHC(Z-K@Oky2sExZ&-%+4MQ@U+m(?K zYKc3ChR(Mf+p}GU0f*NN*W=EjX+HhM- zInAQs@j`C5hwS$$=*MLSxyoJLF%CT2VR#U$W~Ig9j;|UfkKPLsGAF_stMfs2i)DMpMr1iWJusV@ep#w> z*VSs_@ywolrNdliRZhEF)Bm0s$)B>9Z#On{KeDWqj|h4DzNIp+25?KkZHzJWle!l{S$CQToRFO%g?@|;&oI>@ zfxmDG;U8kJc&W=_w zc^WeesSWBI87jUM6X_wtQv863%(~;zGhwI$R>9DiQ}8t&F+90YD)u{^WGKX@iVQ}_5-7O4aVk2IM>Xs0E=&_x614QYFes)1Jq?PM@F@Y(r-US;ve>UgyNI9u z3P4RrZz@qHzD~Ra`<)&VSf;x;1|+P|T?rWQ6sz>sBmNQSix8fqOYn6F%58!SYj_q4 zu7`rNL<6hGkRq$%w*}}!iX3gXyoT?51vKJA1;f5Lka~mO--HKkUXM~rp0@)0m7)-) z_EYb0^-yg+UxYM!{7hB`U}8A)MDsDw}FU>9`p(f?8<$a zwxv@}KP~L4q88{~upCQ266j9NZbuOn=(F9Tv@5Q!V~C;OfNA0q-V&I!+;rKi71L|d zk!4lNR;1%7d#P^OCFKdkUbx<3spKi&7nn=sj+EuKXF27}>TK>@5t%^YfQdmQ1kAdx zHf(7*TKz&huct0@dDz4VMg@8bfl&hEXWpW&D;P5{ZsKiB2;6kNa#~xCFICIQ6=mD* zj_cW_yz=&~qIyEt1>%nSd5IC)qeFRJF9 zE~`plJ_Pa$nh~hJ6JU2&VCp|?XI#>F*T8!w-p2<5*-$%ABX@qR1){z@Xu=_|kUBSZ zXQ8{PYW6{<4Mb;32$Di7Af25UpJLX@o1wG0*vJT&nL zpD=wxU27^L;AN%PSZgdrfnf%%quvs10*fY=kQKOGm3u1dIz_2>EM4K7ucf0|snemb zbqI^$F_sNHF|mSGfuSbDN%NTuwZIwMp?_ggw+(zDFmu|gqHQThr;n;3+aw4?vTlja z#dDUU*6Y=R^0s8bCMA&zdepY`tl+y%jOdC*e>zj{4EY%zvuJ^0q65IWNtWh@N8ewL*CeGpw zGM1T?ck5nJEn7ioM^3|VFF=}^yyUvt*Pg7cDP3_(eiWqkZ?=`pPl=k zuFM{Cltz}b@9wE|YZSB+aak6%>m3OEc05_yj4drI(ka=>Pv%^AuU^Y^qI8UM;^Njp zO@*)@2eLH+SBZXFb1#vdWgOT;tdStZXe?E+94(r?=*0;f!phM?ly35KJq8##v%>O zzrv?L1D_q~yMZX>T;du>KL)raFwAEPqnP2uy^pb`Epsh>$YYEAaZa4CuuW@*k;D$3 z(Vi)Ce~oX@&3l7*j&Bj+`*-B-!uR-rdzAbI{(nS;U*kMY^NvLg)0~{U-1kt0i?M$J DZIGLF literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/server/HelloWorldServer.class b/week3_TinsaeGhilay/Task 7/example/target/classes/org/tinsae/grpc/server/HelloWorldServer.class new file mode 100644 index 0000000000000000000000000000000000000000..e84fe774978e1933ce93ebc479ec92b142798afc GIT binary patch literal 1082 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

c;kX=@{&?hI9@R6DVfn?QNA(4vxr0B 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 Ly^`?#`M3WM)UM3p literal 0 HcmV?d00001 diff --git a/week3_TinsaeGhilay/Task 7/example/target/maven-archiver/pom.properties b/week3_TinsaeGhilay/Task 7/example/target/maven-archiver/pom.properties new file mode 100644 index 0000000..784024e --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/target/maven-archiver/pom.properties @@ -0,0 +1,3 @@ +artifactId=example +groupId=org.tinsae.grpc +version=1.0-SNAPSHOT diff --git a/week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..a636d57 --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1,24 @@ +org/tinsae/grpc/HelloReply$1.class +org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceFileDescriptorSupplier.class +org/tinsae/grpc/HelloWorldServiceGrpc$3.class +org/tinsae/grpc/client/HelloWorldClient.class +org/tinsae/grpc/HelloRequestOrBuilder.class +org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceImplBase.class +org/tinsae/grpc/HelloWorldServiceGrpc$1.class +org/tinsae/grpc/HelloRequest.class +org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceMethodDescriptorSupplier.class +org/tinsae/grpc/server/HelloWorldServer.class +org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceBaseDescriptorSupplier.class +org/tinsae/grpc/HelloRequest$1.class +org/tinsae/grpc/HelloReplyOrBuilder.class +org/tinsae/grpc/HelloWorldServiceGrpc$MethodHandlers.class +org/tinsae/grpc/HelloWorldServiceProtos.class +org/tinsae/grpc/HelloWorldServiceImpl.class +org/tinsae/grpc/HelloWorldServiceGrpc.class +org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceStub.class +org/tinsae/grpc/HelloReply$Builder.class +org/tinsae/grpc/HelloRequest$Builder.class +org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceBlockingStub.class +org/tinsae/grpc/HelloWorldServiceGrpc$2.class +org/tinsae/grpc/HelloWorldServiceGrpc$HelloWorldServiceFutureStub.class +org/tinsae/grpc/HelloReply.class diff --git a/week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..05bb66f --- /dev/null +++ b/week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1,9 @@ +/home/tgk/Repos/Trusted/DistributedSystems/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloReply.java +/home/tgk/Repos/Trusted/DistributedSystems/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloReplyOrBuilder.java +/home/tgk/Repos/Trusted/DistributedSystems/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloRequest.java +/home/tgk/Repos/Trusted/DistributedSystems/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloRequestOrBuilder.java +/home/tgk/Repos/Trusted/DistributedSystems/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceGrpc.java +/home/tgk/Repos/Trusted/DistributedSystems/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceImpl.java +/home/tgk/Repos/Trusted/DistributedSystems/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/HelloWorldServiceProtos.java +/home/tgk/Repos/Trusted/DistributedSystems/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/client/HelloWorldClient.java +/home/tgk/Repos/Trusted/DistributedSystems/week3_TinsaeGhilay/Task 7/example/src/main/java/org/tinsae/grpc/server/HelloWorldServer.java diff --git a/week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst b/week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/createdFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst b/week3_TinsaeGhilay/Task 7/example/target/maven-status/maven-compiler-plugin/testCompile/default-testCompile/inputFiles.lst new file mode 100644 index 0000000..e69de29 diff --git a/week3_TinsaeGhilay/solutions.txt b/week3_TinsaeGhilay/solutions.txt new file mode 100644 index 0000000..fbac32a --- /dev/null +++ b/week3_TinsaeGhilay/solutions.txt @@ -0,0 +1,7 @@ +Exercise 1: not mandatory +Exercise 2: done 100% +Exercise 3: done 100% +Exercise 4: not mandatory +Exercise 5: done 100% +Exercise 6: not mandatory +Exercise 7: done 100% \ No newline at end of file