11import org.jetbrains.dokka.gradle.DokkaTask
22import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
33import java.io.InputStream
4+ import java.util.concurrent.atomic.AtomicBoolean
45
56plugins {
67 maven
@@ -110,19 +111,22 @@ tasks {
110111 project(" server" ).tasks.jar.get().archiveFile.get().asFile.absolutePath)
111112 .redirectOutput(testLogDir.resolve(" server.log" )).redirectError(testLogDir.resolve(" server-err.log" ))
112113 .directory(project(" server" ).buildDir.resolve(" runnable" )).start()
113- Thread .sleep(1000 )
114+ Thread .sleep(400 )
114115 val startClient: (Int ) -> Process = {
116+ Thread .sleep(100 )
115117 ProcessBuilder (" java" , " -jar" , deployDir.resolve(deployedPlayer).absolutePath)
116118 .redirectOutput(testLogDir.resolve(" client$it .log" )).redirectError(testLogDir.resolve(" client$it -err.log" )).start()
117119 }
118120 startClient(1 )
119121 startClient(2 )
122+ val timeout = AtomicBoolean (false )
120123 val thread = Thread {
121124 try {
122125 Thread .sleep(maxGameLength * 1000 )
123126 } catch (e: InterruptedException ) {
124127 return @Thread
125128 }
129+ timeout.set(true )
126130 println (" $this has been running for over $maxGameLength seconds - killing server!" )
127131 server.destroyForcibly()
128132 }.apply {
@@ -131,12 +135,21 @@ tasks {
131135 }
132136 try {
133137 for (i in 1 .. 2 ) {
138+ val logFile = testLogDir.resolve(" client$i .log" )
139+ var log: String
134140 println (" Waiting for client $i to receive game result" )
135141 do {
136- if (! server.isAlive)
137- throw Exception (" Server terminated unexpectedly!" )
138- Thread .sleep(200 )
139- } while (! testLogDir.resolve(" client$i .log" ).readText().contains(" Received game result" , true ))
142+ if (! server.isAlive) {
143+ if (! timeout.get())
144+ throw Exception (" Server terminated unexpectedly!" )
145+ return @doFirst
146+ }
147+ Thread .yield ()
148+ Thread .sleep(100 )
149+ log = logFile.readText()
150+ } while (! log.contains(" stop" , true ))
151+ if (! log.contains(" Received game result" ))
152+ throw Exception (" Client $i did not receive the game result - check $logFile " )
140153 }
141154 } catch (t: Throwable ) {
142155 println (" Error in $this - check the logs in $testLogDir " )
0 commit comments