Skip to content

Commit 4f43cb8

Browse files
committed
ping/pong handshake after subscription attempt
1 parent 76be45c commit 4f43cb8

19 files changed

Lines changed: 80 additions & 0 deletions

File tree

kobby-generator-kotlin/src/main/kotlin/io/github/ermadmi78/kobby/generator/kotlin/ktor.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -683,6 +683,14 @@ private fun TypeSpecBuilder.buildExecuteSubscriptionImplFun(schema: KobbySchema,
683683
}
684684
addStatement("")
685685

686+
buildSendMessage(layout, WS_CLIENT_MESSAGE_PING)
687+
addStatement(
688+
"$receiveMessage(${ktor.compositePropertySocket})·?:·throw·%T(%P, $request)",
689+
graphql.subscriptionExceptionClass,
690+
"Subscription timeout expired"
691+
)
692+
addStatement("")
693+
686694
val returnClass: ClassName = if (adapter.extendedApi) {
687695
dto.graphql.subscriptionResultClass
688696
} else {

kobby-gradle-plugin/src/test/resources/io/github/ermadmi78/kobby/testcases/adapter_extended_api/expected/io/github/ermadmi78/kobby/testcases/adapter_extended_api/kobby/kotlin/adapter/ktor/CountryCompositeKtorAdapter.kt.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,6 +225,10 @@ public open class CountryCompositeKtorAdapter(
225225
val subscriptionId = idGenerator()
226226
sendMessage(socket, CountryClientMessageSubscribe(subscriptionId, request))
227227

228+
sendMessage(socket, CountryClientMessagePing())
229+
receiveMessage(socket) ?: throw CountrySubscriptionException("""Subscription timeout expired""",
230+
request)
231+
228232
try {
229233
block.invoke(object : CountryReceiver<CountrySubscriptionResult> {
230234
override suspend fun receive(): CountrySubscriptionResult {

kobby-gradle-plugin/src/test/resources/io/github/ermadmi78/kobby/testcases/adapter_throw_exception/expected/io/github/ermadmi78/kobby/testcases/adapter_throw_exception/kobby/kotlin/adapter/ktor/CountryCompositeKtorAdapter.kt.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,10 @@ public open class CountryCompositeKtorAdapter(
183183
val subscriptionId = idGenerator()
184184
sendMessage(socket, CountryClientMessageSubscribe(subscriptionId, request))
185185

186+
sendMessage(socket, CountryClientMessagePing())
187+
receiveMessage(socket) ?: throw CountrySubscriptionException("""Subscription timeout expired""",
188+
request)
189+
186190
try {
187191
block.invoke(object : CountryReceiver<CountrySubscriptionResult> {
188192
override suspend fun receive(): CountrySubscriptionResult {

kobby-gradle-plugin/src/test/resources/io/github/ermadmi78/kobby/testcases/cinema/expected/io/github/ermadmi78/kobby/testcases/cinema/kobby/kotlin/adapter/ktor/CinemaCompositeKtorAdapter.kt.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ public open class CinemaCompositeKtorAdapter(
218218
val subscriptionId = idGenerator()
219219
sendMessage(socket, CinemaClientMessageSubscribe(subscriptionId, request))
220220

221+
sendMessage(socket, CinemaClientMessagePing())
222+
receiveMessage(socket) ?: throw CinemaSubscriptionException("""Subscription timeout expired""",
223+
request)
224+
221225
try {
222226
block.invoke(object : CinemaReceiver<SubscriptionDto> {
223227
override suspend fun receive(): SubscriptionDto {

kobby-gradle-plugin/src/test/resources/io/github/ermadmi78/kobby/testcases/cinema_infix/expected/io/github/ermadmi78/kobby/testcases/cinema/kobby/kotlin/adapter/ktor/CinemaCompositeKtorAdapter.kt.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ public open class CinemaCompositeKtorAdapter(
218218
val subscriptionId = idGenerator()
219219
sendMessage(socket, CinemaClientMessageSubscribe(subscriptionId, request))
220220

221+
sendMessage(socket, CinemaClientMessagePing())
222+
receiveMessage(socket) ?: throw CinemaSubscriptionException("""Subscription timeout expired""",
223+
request)
224+
221225
try {
222226
block.invoke(object : CinemaReceiver<SubscriptionDto> {
223227
override suspend fun receive(): SubscriptionDto {

kobby-gradle-plugin/src/test/resources/io/github/ermadmi78/kobby/testcases/customize_jackson/expected/io/github/ermadmi78/kobby/testcases/customize_jackson/kobby/kotlin/adapter/ktor/CountryCompositeKtorAdapter.kt.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ public open class CountryCompositeKtorAdapter(
218218
val subscriptionId = idGenerator()
219219
sendMessage(socket, CountryClientMessageSubscribe(subscriptionId, request))
220220

221+
sendMessage(socket, CountryClientMessagePing())
222+
receiveMessage(socket) ?: throw CountrySubscriptionException("""Subscription timeout expired""",
223+
request)
224+
221225
try {
222226
block.invoke(object : CountryReceiver<SubscriptionDto> {
223227
override suspend fun receive(): SubscriptionDto {

kobby-gradle-plugin/src/test/resources/io/github/ermadmi78/kobby/testcases/disable_builder/expected/io/github/ermadmi78/kobby/testcases/disable_builder/kobby/kotlin/adapter/ktor/CountryCompositeKtorAdapter.kt.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ public open class CountryCompositeKtorAdapter(
218218
val subscriptionId = idGenerator()
219219
sendMessage(socket, CountryClientMessageSubscribe(subscriptionId, request))
220220

221+
sendMessage(socket, CountryClientMessagePing())
222+
receiveMessage(socket) ?: throw CountrySubscriptionException("""Subscription timeout expired""",
223+
request)
224+
221225
try {
222226
block.invoke(object : CountryReceiver<SubscriptionDto> {
223227
override suspend fun receive(): SubscriptionDto {

kobby-gradle-plugin/src/test/resources/io/github/ermadmi78/kobby/testcases/disable_jackson/expected/io/github/ermadmi78/kobby/testcases/disable_jackson/kobby/kotlin/adapter/ktor/CountryCompositeKtorAdapter.kt.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ public open class CountryCompositeKtorAdapter(
218218
val subscriptionId = idGenerator()
219219
sendMessage(socket, CountryClientMessageSubscribe(subscriptionId, request))
220220

221+
sendMessage(socket, CountryClientMessagePing())
222+
receiveMessage(socket) ?: throw CountrySubscriptionException("""Subscription timeout expired""",
223+
request)
224+
221225
try {
222226
block.invoke(object : CountryReceiver<SubscriptionDto> {
223227
override suspend fun receive(): SubscriptionDto {

kobby-gradle-plugin/src/test/resources/io/github/ermadmi78/kobby/testcases/disable_ktor_receive_timeout/expected/io/github/ermadmi78/kobby/testcases/disable_ktor_receive_timeout/kobby/kotlin/adapter/ktor/CountryCompositeKtorAdapter.kt.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ public open class CountryCompositeKtorAdapter(
218218
val subscriptionId = idGenerator()
219219
sendMessage(socket, CountryClientMessageSubscribe(subscriptionId, request))
220220

221+
sendMessage(socket, CountryClientMessagePing())
222+
receiveMessage(socket) ?: throw CountrySubscriptionException("""Subscription timeout expired""",
223+
request)
224+
221225
try {
222226
block.invoke(object : CountryReceiver<SubscriptionDto> {
223227
override suspend fun receive(): SubscriptionDto {

kobby-gradle-plugin/src/test/resources/io/github/ermadmi78/kobby/testcases/disable_ktor_simple/expected/io/github/ermadmi78/kobby/testcases/disable_ktor_simple/kobby/kotlin/adapter/ktor/CountryCompositeKtorAdapter.kt.txt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,10 @@ public open class CountryCompositeKtorAdapter(
218218
val subscriptionId = idGenerator()
219219
sendMessage(socket, CountryClientMessageSubscribe(subscriptionId, request))
220220

221+
sendMessage(socket, CountryClientMessagePing())
222+
receiveMessage(socket) ?: throw CountrySubscriptionException("""Subscription timeout expired""",
223+
request)
224+
221225
try {
222226
block.invoke(object : CountryReceiver<SubscriptionDto> {
223227
override suspend fun receive(): SubscriptionDto {

0 commit comments

Comments
 (0)