Skip to content

Commit 1635bea

Browse files
author
Flávio Ferreira
committed
Improve kotlin code
1 parent b5b2b76 commit 1635bea

File tree

6 files changed

+60
-54
lines changed

6 files changed

+60
-54
lines changed

README.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,22 @@ The user service must get data from the key value service to provide all informa
1010
* Maven
1111

1212
### About gRPC
13+
...
1314

1415
### About Kotlin
16+
...
1517

1618
## Try it
1719

1820
### Run key value service
21+
```
1922
mvn -pl kotlin-grpc-keyvalue-service exec:java
20-
23+
```
2124
### Run user service
25+
```
2226
mvn -pl kotlin-grpc-user-service exec:java
23-
27+
```
2428
### Run the client
29+
```
2530
mvn -pl kotlin-grpc-client exec:java
31+
```

kotlin-grpc-client/src/main/java/grpc/client/GrpcClient.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
package grpc.client
2+
13
import com.google.common.collect.Iterators
24
import io.grpc.ManagedChannelBuilder
35
import services.UserRequest
@@ -10,13 +12,13 @@ fun main(args: Array<String>) {
1012
val blockingStub = UserServiceGrpc.newBlockingStub(channel)
1113

1214
try {
13-
val users = Iterators.cycle("flavio", "carol", "ines")
15+
val users = Iterators.cycle("radha", "kanti", "chanda", "kali")
1416
var i = 0
1517
while (users.hasNext() && i < 100) {
1618

1719
val request = UserRequest.newBuilder().setName(users.next()).build()
1820

19-
println("Response from server: ${blockingStub.getUser(request)}")
21+
println("Response from server:\n${blockingStub.getUser(request)}")
2022
i++
2123
}
2224

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package grpc.service.kv
22

3-
43
fun main(args: Array<String>) {
54

65
val server = io.grpc.ServerBuilder.forPort(15000).addService(KeyValueService()).build()
76
server.start()
87

9-
println("Server started")
8+
println("Key value service started")
109

1110
Runtime.getRuntime().addShutdownHook(Thread() { println("Ups, JVM shutdown") })
1211
server.awaitTermination()
1312

14-
println("Server stopped")
13+
println("Key value service stopped")
1514
}

kotlin-grpc-keyvalue-service/src/main/java/grpc/service/kv/KeyValueService.kt

Lines changed: 26 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,48 @@
11
package grpc.service.kv
22

3-
import com.google.common.collect.ImmutableMap
4-
import com.google.common.collect.Maps
53
import io.grpc.stub.StreamObserver
64
import services.GetRequest
75
import services.GetResponse
86
import services.KeyValueServiceGrpc.KeyValueServiceImplBase
97
import services.PutRequest
108
import services.PutResponse
11-
import java.util.*
129

1310
class KeyValueService : KeyValueServiceImplBase() {
1411

15-
internal var store: MutableMap<String, String> = Maps.newHashMap(ImmutableMap.builder<String, String>()
16-
.put("flavio.emailAddress", "flavio@gmail.com")
17-
.put("flavio.country", "PT")
18-
.put("flavio.active", "true")
19-
.put("carol.emailAddress", "carol@gmail.com")
20-
.put("carol.country", "UK")
21-
.put("carol.active", "true")
22-
.put("ines.emailAddress", "ines@gmail.com")
23-
.put("ines.country", "Spain")
24-
.put("ines.active", "false")
25-
.build()
12+
val names = listOf("radha", "kanti", "chanda", "kali")
13+
14+
internal var store: MutableMap<String, String> = hashMapOf(
15+
"${names[0]}.email" to "${names[0]}@gmail.com",
16+
"${names[0]}.country" to "Portugal",
17+
"${names[0]}.active" to "true",
18+
"${names[1]}.email" to "${names[1]}@gmail.com",
19+
"${names[1]}.country" to "France",
20+
"${names[1]}.active" to "true",
21+
"${names[2]}.email" to "${names[2]}@gmail.com",
22+
"${names[2]}.country" to "Spain",
23+
"${names[2]}.active" to "true",
24+
"${names[3]}.email" to "${names[3]}@gmail.com",
25+
"${names[3]}.country" to "UK",
26+
"${names[3]}.active" to "false"
2627
)
2728

2829
override fun put(request: PutRequest, responseObserver: StreamObserver<PutResponse>) {
29-
store.put(request.key, request.value)
30+
store.put(request.key ?: throw IllegalArgumentException("key can not be null"),
31+
request.value ?: throw IllegalArgumentException("value can not be null")
32+
)
3033
responseObserver.onNext(PutResponse.newBuilder().build())
3134
responseObserver.onCompleted()
3235
}
3336

3437
override fun get(request: GetRequest, responseObserver: StreamObserver<GetResponse>) {
35-
val response = GetResponse.newBuilder()
36-
37-
val value = store[request.key]
38-
39-
if (value != null) {
40-
response.value = value
41-
}
42-
43-
responseObserver.onNext(response.build())
38+
val response = GetResponse
39+
.newBuilder()
40+
.setValue(
41+
store[request.key ?: throw IllegalArgumentException("key can not be null")]
42+
?: throw IllegalArgumentException("${request.key} key not found")
43+
).build()
44+
45+
responseObserver.onNext(response)
4446
responseObserver.onCompleted()
4547
}
4648

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import grpc.service.user.UserService
1+
package grpc.service.user
2+
23
import io.grpc.ManagedChannelBuilder
34
import io.grpc.ServerBuilder
45
import services.KeyValueServiceGrpc
56

6-
77
fun main(args: Array<String>) {
88

99
val channel = ManagedChannelBuilder.forAddress("localhost", 15000).usePlaintext(true).build()
@@ -12,10 +12,10 @@ fun main(args: Array<String>) {
1212
val server = ServerBuilder.forPort(15001).addService(UserService(kvsClient)).build()
1313
server.start()
1414

15-
println("Server started")
15+
println("User service started")
1616

1717
Runtime.getRuntime().addShutdownHook(Thread() { println("Ups, JVM shutdown") })
1818
server.awaitTermination()
1919

20-
println("Server stopped")
20+
println("User service stopped")
2121
}

kotlin-grpc-user-service/src/main/java/grpc/service/user/UserService.kt

Lines changed: 16 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -13,26 +13,23 @@ class UserService(keyValue: KeyValueServiceBlockingStub) : UserServiceImplBase()
1313
private val keyValue = Preconditions.checkNotNull(keyValue)
1414

1515
override fun getUser(request: UserRequest, responseObserver: StreamObserver<UserResponse>) {
16-
val response = UserResponse.newBuilder()
1716

18-
response.name = request.name
19-
20-
response.emailAddress = keyValue.get(GetRequest.newBuilder()
21-
.setKey(request.name + ".emailAddress")
22-
.build())
23-
.value
24-
25-
response.country = keyValue.get(GetRequest.newBuilder()
26-
.setKey(request.name + ".country")
27-
.build())
28-
.value
29-
30-
response.active = java.lang.Boolean.valueOf(keyValue.get(GetRequest.newBuilder()
31-
.setKey(request.name + ".active")
32-
.build())
33-
.value)!!
34-
35-
responseObserver.onNext(response.build())
17+
fun getValue(key: String) = keyValue.get(
18+
GetRequest
19+
.newBuilder()
20+
.setKey(request.name + key)
21+
.build() ?: throw IllegalArgumentException("key not found")
22+
).value
23+
24+
val response = UserResponse
25+
.newBuilder()
26+
.setName(request?.name ?: throw IllegalArgumentException("name can not be null"))
27+
.setEmailAddress(getValue(".email"))
28+
.setCountry(getValue(".country"))
29+
.setActive(getValue(".active").toBoolean())
30+
.build()
31+
32+
responseObserver.onNext(response)
3633
responseObserver.onCompleted()
3734
}
3835

0 commit comments

Comments
 (0)