Korio: Kotlin cORoutines I/O : Virtual File System + Async/Sync Streams + Async TCP Client/Server + WebSockets for Multiplatform Kotlin 1.3

Overview

Korio

Korio

Kotlin I/O : Streams + TCP Client/Server + VFS for Multiplatform Kotlin

Build Status Maven Central Discord

Full Documentation: https://korlibs.soywiz.com/korio/

Use with gradle:

repositories {
    mavenCentral()
}

dependencies {
    implementation "com.soywiz.korlibs.korio:korio-jvm:$korioVersion"
}
Comments
  • RawSocketWebSocketClient.read() blocked Thread

    RawSocketWebSocketClient.read() blocked Thread

    Hello. When I try to read data from a socket, my thread freezes. (data comes in - that's for sure). Here is my code:

    private suspend fun conn(connectionDNSName :String, connPort :Int){ val cl = createTcpClient() cl.connect(connectionDNSName, connPort) val mySocket = RawSocketWebSocketClient( GlobalScope.coroutineContext, cl, URL.invoke(""), null, false, null, "") //val r = MySocketChannel.readBinary() -- freezes //val r = MySocketChannel..client.readAll() -- freezes //val r = MySocketChannel..client.readAvailable() -- freezes

    }
    

    And one more question: can I get RawSocketWebSocketClient from WebSocketClient ? For instance: val url = "ws://hostname:3456" val c: RawSocketWebSocketClient = WebSocketClient(url) as RawSocketWebSocketClient And work with him as with RawSocketWebSocketClient.

    bug 
    opened by lemkoleg 20
  • JVM Test error : java.nio.channels.UnresolvedAddressException

    JVM Test error : java.nio.channels.UnresolvedAddressException

    Hello. Tell me why I get this JVM Test error when I try to get WebSocketClient: val url = "ws://localhostname:3456" val c: WebSocketClient = RawSocketWebSocketClient(url,null, null, null, false) ...java.nio.channels.UnresolvedAddressException at sun.nio.ch.Net.checkAddress(Net.java:101)...

    And one more thing: can I get RawSocketWebSocketClient из WebSocketClient ? For instance: val url = "ws://localhostname:3456" val c: RawSocketWebSocketClient = RawSocketWebSocketClient(url,null, null, null, false) as RawSocketWebSocketClient

    question 
    opened by lemkoleg 18
  • listSimple() is very slow

    listSimple() is very slow

    Hi, I noticed that listSimple() takes 100ms in average even for single file! (not a dir). I didn't manage to understand why it is like that.

    listRecursiveSimple() is also slow because it uses listSimple(). Adding explicit "if file" check to this function improves situation a bit, but not significantly.

    I am using java 8 and OS windows. Also I noticed that under java 15 file operations work twice faster, but I'm not sure it is somehow related to the issue.

    opened by BioRyajenka 14
  • `ZipVfs` out of heap space.

    `ZipVfs` out of heap space.

    I tried to unzip a 1GB ZIP file with ZipVfs and the following code:

    val data = ZipVfs(dir["archive.zip"].open())
    for (name in data.listNames()) {
        data[name].copyTo(dir["archive::$name"])
    }
    

    However, this crashed with out of memory error:

    java.lang.OutOfMemoryError: Java heap space
    	at com.soywiz.kmem.ByteArrayBuilder.<init>(ByteArrayBuilder.kt:10)
    	at com.soywiz.korio.compression.CompressionMethodKt.uncompress(CompressionMethod.kt:56)
    	at com.soywiz.korio.compression.CompressionMethodKt.uncompress$default(CompressionMethod.kt:49)
    	at com.soywiz.korio.file.std.ZipVfsKt$ZipVfs$Impl.open(ZipVfs.kt:64)
    	at com.soywiz.korio.file.Vfs.openInputStream$suspendImpl(Vfs.kt:65)
    	at com.soywiz.korio.file.Vfs.openInputStream(Vfs.kt)
    	at com.soywiz.korio.file.VfsFile.openInputStream(VfsFile.kt:69)
    	at com.soywiz.korio.file.VfsFile.copyTo(VfsFile.kt:57)
    	at Mod$download$2.invokeSuspend(main.kt:188)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
    Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap space
    	at com.soywiz.kmem.ByteArrayBuilder.<init>(ByteArrayBuilder.kt:10)
    	at com.soywiz.korio.compression.CompressionMethodKt.uncompress(CompressionMethod.kt:56)
    	at com.soywiz.korio.compression.CompressionMethodKt.uncompress$default(CompressionMethod.kt:49)
    	at com.soywiz.korio.file.std.ZipVfsKt$ZipVfs$Impl.open(ZipVfs.kt:64)
    	at com.soywiz.korio.file.Vfs.openInputStream$suspendImpl(Vfs.kt:65)
    	at com.soywiz.korio.file.Vfs.openInputStream(Vfs.kt)
    	at com.soywiz.korio.file.VfsFile.openInputStream(VfsFile.kt:69)
    	at com.soywiz.korio.file.VfsFile.copyTo(VfsFile.kt:57)
    	at Mod$download$2.invokeSuspend(main.kt:188)
    	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
    	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:571)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:750)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:678)
    	at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:665)
    
    bug check 
    opened by Kesanov 12
  • Posix calls block main thread.

    Posix calls block main thread.

    Performing a posix call from suspend function blocks the whole UI, until the call returns. For example, the button in the following code will become unresponsive, once firefox is launched.

    button(100.0, 100.0, 2.0, "Open Browser") {
      onClick { platform.posix.system("firefox") }
    }
    
    opened by Kesanov 10
  • TypeError:

    TypeError: "$receiver.onBinaryMessage is undefined"

    I'm using WebSockets in my project, so that the back-end (which is multi-platform for JS Browser and JVM). The back-end sends binary data to the front-end and the other way around. Everything works fine on JVM. But on the JS Browser side I get an error saying that it doesn't find the function or something along the lines. Here is the whole output:

    First error:

    TypeError: "$receiver.onBinaryMessage is undefined"
        readBinary http://localhost/venus/scripts/korio-root-korio.js:30549
        doResume http://localhost/venus/js/venus.js:3
        watchForMessages_0 http://localhost/venus/js/venus.js:3
        doResume http://localhost/venus/js/venus.js:3
        lambda_0 http://localhost/venus/js/venus.js:3
        doResume http://localhost/venus/scripts/korio-root-korio.js:1521
        lambda http://localhost/venus/scripts/korio-root-korio.js:1561
        startCoroutineUndispatched_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:34677
        invoke_3o0yor$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174
        start_b5ul0p$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:442
        launch http://localhost/venus/scripts/kotlinx-coroutines-core.js:823
        _launch http://localhost/venus/scripts/korio-root-korio.js:1565
        launchImmediately http://localhost/venus/scripts/korio-root-korio.js:1220
        launch_1 http://localhost/venus/scripts/korio-root-korio.js:1235
        establishConnection_bm4lxs$ http://localhost/venus/js/venus.js:3
        connectToMotherboard_67wg1e$ http://localhost/venus/js/venus.js:3
        loadSim_a67xwl$ http://localhost/venus/js/venus.js:3
        link_ondwee$ http://localhost/venus/js/venus.js:3
        assembleSimulator http://localhost/venus/js/venus.js:3
        onclick http://localhost/venus/:1
    korio-root-korio.js:46684:13
        printStackTrace_0 http://localhost/venus/scripts/korio-root-korio.js:46684
        doResume http://localhost/venus/scripts/korio-root-korio.js:1533
        lambda http://localhost/venus/scripts/korio-root-korio.js:1561
        startCoroutineUndispatched_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:34677
        invoke_3o0yor$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174
        start_b5ul0p$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:442
        launch http://localhost/venus/scripts/kotlinx-coroutines-core.js:823
        _launch http://localhost/venus/scripts/korio-root-korio.js:1565
        launchImmediately http://localhost/venus/scripts/korio-root-korio.js:1220
        launch_1 http://localhost/venus/scripts/korio-root-korio.js:1235
        establishConnection_bm4lxs$ http://localhost/venus/js/venus.js:3
        connectToMotherboard_67wg1e$ http://localhost/venus/js/venus.js:3
        loadSim_a67xwl$ http://localhost/venus/js/venus.js:3
        link_ondwee$ http://localhost/venus/js/venus.js:3
        assembleSimulator http://localhost/venus/js/venus.js:3
        onclick http://localhost/venus/:1
    

    Second error:

    readBinary@http://localhost/venus/scripts/korio-root-korio.js:30549:5
    Coroutine$watchForMessages_0.prototype.doResume@http://localhost/venus/js/venus.js:3:497208
    MotherboardConnection.prototype.watchForMessages_0@http://localhost/venus/js/venus.js:3:498113
    Coroutine$MotherboardConnection$establishConnection$lambda_0.prototype.doResume@http://localhost/venus/js/venus.js:3:494822
    MotherboardConnection$establishConnection$lambda_0/<@http://localhost/venus/js/venus.js:3:488212
    Coroutine$_launch$lambda.prototype.doResume@http://localhost/venus/scripts/korio-root-korio.js:1521:34
    _launch$lambda/<@http://localhost/venus/scripts/korio-root-korio.js:1561:25
    startCoroutineUndispatched_0@http://localhost/venus/scripts/kotlinx-coroutines-core.js:34677:18
    CoroutineStart.prototype.invoke_3o0yor$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174:35
    AbstractCoroutine.prototype.start_b5ul0p$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:442:9
    launch@http://localhost/venus/scripts/kotlinx-coroutines-core.js:823:15
    _launch@http://localhost/venus/scripts/korio-root-korio.js:1565:12
    launchImmediately@http://localhost/venus/scripts/korio-root-korio.js:1220:12
    launch_1@http://localhost/venus/scripts/korio-root-korio.js:1235:12
    MotherboardConnection.prototype.establishConnection_bm4lxs$@http://localhost/venus/js/venus.js:3:496480
    Simulator_0.prototype.connectToMotherboard_67wg1e$@http://localhost/venus/js/venus.js:3:521160
    Driver.prototype.loadSim_a67xwl$@http://localhost/venus/js/venus.js:3:47038
    Driver.prototype.link_ondwee$@http://localhost/venus/js/venus.js:3:46788
    Driver.prototype.assembleSimulator@http://localhost/venus/js/venus.js:3:43040
    onclick@http://localhost/venus/:1:8
    korio-root-korio.js:46685:13
        printStackTrace_0 http://localhost/venus/scripts/korio-root-korio.js:46685
        doResume http://localhost/venus/scripts/korio-root-korio.js:1533
        lambda http://localhost/venus/scripts/korio-root-korio.js:1561
        startCoroutineUndispatched_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:34677
        invoke_3o0yor$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174
        start_b5ul0p$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:442
        launch http://localhost/venus/scripts/kotlinx-coroutines-core.js:823
        _launch http://localhost/venus/scripts/korio-root-korio.js:1565
        launchImmediately http://localhost/venus/scripts/korio-root-korio.js:1220
        launch_1 http://localhost/venus/scripts/korio-root-korio.js:1235
        establishConnection_bm4lxs$ http://localhost/venus/js/venus.js:3
        connectToMotherboard_67wg1e$ http://localhost/venus/js/venus.js:3
        loadSim_a67xwl$ http://localhost/venus/js/venus.js:3
        link_ondwee$ http://localhost/venus/js/venus.js:3
        assembleSimulator http://localhost/venus/js/venus.js:3
        onclick http://localhost/venus/:1
    

    Third error:

    TypeError: "$receiver.onBinaryMessage is undefined"
        readBinary http://localhost/venus/scripts/korio-root-korio.js:30549
        doResume http://localhost/venus/js/venus.js:3
        watchForMessages_0 http://localhost/venus/js/venus.js:3
        doResume http://localhost/venus/js/venus.js:3
        lambda_0 http://localhost/venus/js/venus.js:3
        doResume http://localhost/venus/scripts/korio-root-korio.js:1521
        lambda http://localhost/venus/scripts/korio-root-korio.js:1561
        startCoroutineUndispatched_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:34677
        invoke_3o0yor$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174
        start_b5ul0p$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:442
        launch http://localhost/venus/scripts/kotlinx-coroutines-core.js:823
        _launch http://localhost/venus/scripts/korio-root-korio.js:1565
        launchImmediately http://localhost/venus/scripts/korio-root-korio.js:1220
        launch_1 http://localhost/venus/scripts/korio-root-korio.js:1235
        establishConnection_bm4lxs$ http://localhost/venus/js/venus.js:3
        connectToMotherboard_67wg1e$ http://localhost/venus/js/venus.js:3
        loadSim_a67xwl$ http://localhost/venus/js/venus.js:3
        link_ondwee$ http://localhost/venus/js/venus.js:3
        assembleSimulator http://localhost/venus/js/venus.js:3
        onclick http://localhost/venus/:1
    kotlinx-coroutines-core.js:36706:13
        handleCoroutineExceptionImpl http://localhost/venus/scripts/kotlinx-coroutines-core.js:36706
        handleCoroutineException http://localhost/venus/scripts/kotlinx-coroutines-core.js:1953
        handleJobException_tcv7n7$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:947
        finalizeFinishingState_10mr1z$_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:3161
        tryMakeCompletingSlowPath_uh1ctj$_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:3899
        tryMakeCompleting_w5s53t$_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:3862
        makeCompletingOnce_8ea4ql$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:3846
        resumeWith_tl1gpc$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:416
        startCoroutineUndispatched_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:34681
        invoke_3o0yor$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174
        start_b5ul0p$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:442
        launch http://localhost/venus/scripts/kotlinx-coroutines-core.js:823
        _launch http://localhost/venus/scripts/korio-root-korio.js:1565
        launchImmediately http://localhost/venus/scripts/korio-root-korio.js:1220
        launch_1 http://localhost/venus/scripts/korio-root-korio.js:1235
        establishConnection_bm4lxs$ http://localhost/venus/js/venus.js:3
        connectToMotherboard_67wg1e$ http://localhost/venus/js/venus.js:3
        loadSim_a67xwl$ http://localhost/venus/js/venus.js:3
        link_ondwee$ http://localhost/venus/js/venus.js:3
        assembleSimulator http://localhost/venus/js/venus.js:3
        onclick http://localhost/venus/:1
    

    Fourth error:

    TypeError: "ensureNotNull(...).send_fqrh44$ is not a function"
        doResume http://localhost/venus/js/venus.js:3
        lambda http://localhost/venus/js/venus.js:3
        doResume http://localhost/venus/scripts/korio-root-korio.js:1521
        lambda http://localhost/venus/scripts/korio-root-korio.js:1561
        startCoroutineUndispatched_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:34677
        invoke_3o0yor$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174
        start_b5ul0p$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:442
        launch http://localhost/venus/scripts/kotlinx-coroutines-core.js:823
        _launch http://localhost/venus/scripts/korio-root-korio.js:1565
        launchImmediately http://localhost/venus/scripts/korio-root-korio.js:1220
        launch_1 http://localhost/venus/scripts/korio-root-korio.js:1235
        send_p8mgzl$ http://localhost/venus/js/venus.js:3
        register_0 http://localhost/venus/js/venus.js:3
        establishConnection_bm4lxs$ http://localhost/venus/js/venus.js:3
        connectToMotherboard_67wg1e$ http://localhost/venus/js/venus.js:3
        loadSim_a67xwl$ http://localhost/venus/js/venus.js:3
        link_ondwee$ http://localhost/venus/js/venus.js:3
        assembleSimulator http://localhost/venus/js/venus.js:3
        onclick http://localhost/venus/:1
    korio-root-korio.js:46684:13
        printStackTrace_0 http://localhost/venus/scripts/korio-root-korio.js:46684
        doResume http://localhost/venus/scripts/korio-root-korio.js:1533
        lambda http://localhost/venus/scripts/korio-root-korio.js:1561
        startCoroutineUndispatched_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:34677
        invoke_3o0yor$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174
        start_b5ul0p$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:442
        launch http://localhost/venus/scripts/kotlinx-coroutines-core.js:823
        _launch http://localhost/venus/scripts/korio-root-korio.js:1565
        launchImmediately http://localhost/venus/scripts/korio-root-korio.js:1220
        launch_1 http://localhost/venus/scripts/korio-root-korio.js:1235
        send_p8mgzl$ http://localhost/venus/js/venus.js:3
        register_0 http://localhost/venus/js/venus.js:3
        establishConnection_bm4lxs$ http://localhost/venus/js/venus.js:3
        connectToMotherboard_67wg1e$ http://localhost/venus/js/venus.js:3
        loadSim_a67xwl$ http://localhost/venus/js/venus.js:3
        link_ondwee$ http://localhost/venus/js/venus.js:3
        assembleSimulator http://localhost/venus/js/venus.js:3
        onclick http://localhost/venus/:1
    

    Fifth error:

    Coroutine$MotherboardConnection$send$lambda.prototype.doResume@http://localhost/venus/js/venus.js:3:499747
    MotherboardConnection$send$lambda/<@http://localhost/venus/js/venus.js:3:488949
    Coroutine$_launch$lambda.prototype.doResume@http://localhost/venus/scripts/korio-root-korio.js:1521:34
    _launch$lambda/<@http://localhost/venus/scripts/korio-root-korio.js:1561:25
    startCoroutineUndispatched_0@http://localhost/venus/scripts/kotlinx-coroutines-core.js:34677:18
    CoroutineStart.prototype.invoke_3o0yor$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174:35
    AbstractCoroutine.prototype.start_b5ul0p$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:442:9
    launch@http://localhost/venus/scripts/kotlinx-coroutines-core.js:823:15
    _launch@http://localhost/venus/scripts/korio-root-korio.js:1565:12
    launchImmediately@http://localhost/venus/scripts/korio-root-korio.js:1220:12
    launch_1@http://localhost/venus/scripts/korio-root-korio.js:1235:12
    MotherboardConnection.prototype.send_p8mgzl$@http://localhost/venus/js/venus.js:3:500445
    MotherboardConnection.prototype.register_0@http://localhost/venus/js/venus.js:3:499030
    MotherboardConnection.prototype.establishConnection_bm4lxs$@http://localhost/venus/js/venus.js:3:496583
    Simulator_0.prototype.connectToMotherboard_67wg1e$@http://localhost/venus/js/venus.js:3:521160
    Driver.prototype.loadSim_a67xwl$@http://localhost/venus/js/venus.js:3:47038
    Driver.prototype.link_ondwee$@http://localhost/venus/js/venus.js:3:46788
    Driver.prototype.assembleSimulator@http://localhost/venus/js/venus.js:3:43040
    onclick@http://localhost/venus/:1:8
    korio-root-korio.js:46685:13
        printStackTrace_0 http://localhost/venus/scripts/korio-root-korio.js:46685
        doResume http://localhost/venus/scripts/korio-root-korio.js:1533
        lambda http://localhost/venus/scripts/korio-root-korio.js:1561
        startCoroutineUndispatched_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:34677
        invoke_3o0yor$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174
        start_b5ul0p$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:442
        launch http://localhost/venus/scripts/kotlinx-coroutines-core.js:823
        _launch http://localhost/venus/scripts/korio-root-korio.js:1565
        launchImmediately http://localhost/venus/scripts/korio-root-korio.js:1220
        launch_1 http://localhost/venus/scripts/korio-root-korio.js:1235
        send_p8mgzl$ http://localhost/venus/js/venus.js:3
        register_0 http://localhost/venus/js/venus.js:3
        establishConnection_bm4lxs$ http://localhost/venus/js/venus.js:3
        connectToMotherboard_67wg1e$ http://localhost/venus/js/venus.js:3
        loadSim_a67xwl$ http://localhost/venus/js/venus.js:3
        link_ondwee$ http://localhost/venus/js/venus.js:3
        assembleSimulator http://localhost/venus/js/venus.js:3
        onclick http://localhost/venus/:1
    

    Sixth error:

    TypeError: "ensureNotNull(...).send_fqrh44$ is not a function"
        doResume http://localhost/venus/js/venus.js:3
        lambda http://localhost/venus/js/venus.js:3
        doResume http://localhost/venus/scripts/korio-root-korio.js:1521
        lambda http://localhost/venus/scripts/korio-root-korio.js:1561
        startCoroutineUndispatched_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:34677
        invoke_3o0yor$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174
        start_b5ul0p$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:442
        launch http://localhost/venus/scripts/kotlinx-coroutines-core.js:823
        _launch http://localhost/venus/scripts/korio-root-korio.js:1565
        launchImmediately http://localhost/venus/scripts/korio-root-korio.js:1220
        launch_1 http://localhost/venus/scripts/korio-root-korio.js:1235
        send_p8mgzl$ http://localhost/venus/js/venus.js:3
        register_0 http://localhost/venus/js/venus.js:3
        establishConnection_bm4lxs$ http://localhost/venus/js/venus.js:3
        connectToMotherboard_67wg1e$ http://localhost/venus/js/venus.js:3
        loadSim_a67xwl$ http://localhost/venus/js/venus.js:3
        link_ondwee$ http://localhost/venus/js/venus.js:3
        assembleSimulator http://localhost/venus/js/venus.js:3
        onclick http://localhost/venus/:1
    kotlinx-coroutines-core.js:36706:13
        handleCoroutineExceptionImpl http://localhost/venus/scripts/kotlinx-coroutines-core.js:36706
        handleCoroutineException http://localhost/venus/scripts/kotlinx-coroutines-core.js:1953
        handleJobException_tcv7n7$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:947
        finalizeFinishingState_10mr1z$_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:3161
        tryMakeCompletingSlowPath_uh1ctj$_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:3899
        tryMakeCompleting_w5s53t$_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:3862
        makeCompletingOnce_8ea4ql$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:3846
        resumeWith_tl1gpc$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:416
        startCoroutineUndispatched_0 http://localhost/venus/scripts/kotlinx-coroutines-core.js:34681
        invoke_3o0yor$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174
        start_b5ul0p$ http://localhost/venus/scripts/kotlinx-coroutines-core.js:442
        launch http://localhost/venus/scripts/kotlinx-coroutines-core.js:823
        _launch http://localhost/venus/scripts/korio-root-korio.js:1565
        launchImmediately http://localhost/venus/scripts/korio-root-korio.js:1220
        launch_1 http://localhost/venus/scripts/korio-root-korio.js:1235
        send_p8mgzl$ http://localhost/venus/js/venus.js:3
        register_0 http://localhost/venus/js/venus.js:3
        establishConnection_bm4lxs$ http://localhost/venus/js/venus.js:3
        connectToMotherboard_67wg1e$ http://localhost/venus/js/venus.js:3
        loadSim_a67xwl$ http://localhost/venus/js/venus.js:3
        link_ondwee$ http://localhost/venus/js/venus.js:3
        assembleSimulator http://localhost/venus/js/venus.js:3
        onclick http://localhost/venus/:1
    

    Seventh and final error:

    {…}
    ​
    "cause_us9j0c$_0": {…}
    ​​
    "cause_th0jdv$_0": Object { "message_8yp7un$_0": "StandaloneCoroutine has completed normally", stack: "captureStack@http://localhost/venus/scripts/kotlin.js:29371:27\nException@http://localhost/venus/scripts/kotlin.js:32720:14\nRuntimeException@http://localhost/venus/scripts/kotlin.js:32749:17\nIllegalStateException@http://localhost/venus/scripts/kotlin.js:32789:24\nCancellationException@http://localhost/venus/scripts/kotlinx-coroutines-core.js:36816:27\nJobCancellationException@http://localhost/venus/scripts/kotlinx-coroutines-core.js:36829:27\nJobSupport.prototype.getCancellationException@http://localhost/venus/scripts/kotlinx-coroutines-core.js:3416:12\nCancellableContinuationImpl.prototype.getContinuationCancellationCause_dqr1mp$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:1394:17\nChildContinuation.prototype.invoke@http://localhost/venus/scripts/kotlinx-coroutines-core.js:4638:49\nJobSupport.prototype.completeStateFinalization_a4ilmi$_0@http://localhost/venus/scripts/kotlinx-coroutines-core.js:3258:13\nJobSupport.prototype.tryFinalizeSimpleState_5emg4m$_0@http://localhost/venus/scripts/kotlinx-coroutines-core.js:3246:8\nJobSupport.prototype.tryMakeCompleting_w5s53t$_0@http://localhost/venus/scripts/kotlinx-coroutines-core.js:3857:14\nJobSupport.prototype.makeCompletingOnce_8ea4ql$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:3846:27\nAbstractCoroutine.prototype.resumeWith_tl1gpc$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:416:20\nstartCoroutineUndispatched_0@http://localhost/venus/scripts/kotlinx-coroutines-core.js:34689:28\nCoroutineStart.prototype.invoke_3o0yor$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:2174:35\nAbstractCoroutine.prototype.start_b5ul0p$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:442:9\nlaunch@http://localhost/venus/scripts/kotlinx-coroutines-core.js:823:15\n_launch@http://localhost/venus/scripts/korio-root-korio.js:1565:12\nlaunchImmediately@http://localhost/venus/scripts/korio-root-korio.js:1220:12\nlaunch_1@http://localhost/venus/scripts/korio-root-korio.js:1235:12\nMotherboardConnection.prototype.busyWait_0@http://localhost/venus/js/venus.js:3:492997\nMotherboardConnection.prototype.establishConnection_bm4lxs$@http://localhost/venus/js/venus.js:3:496201\nSimulator_0.prototype.connectToMotherboard_67wg1e$@http://localhost/venus/js/venus.js:3:521160\nDriver.prototype.loadSim_a67xwl$@http://localhost/venus/js/venus.js:3:47038\nDriver.prototype.link_ondwee$@http://localhost/venus/js/venus.js:3:46788\nDriver.prototype.assembleSimulator@http://localhost/venus/js/venus.js:3:43040\nonclick@http://localhost/venus/:1:8\n", name: "JobCancellationException", … }
    ​​
    "message_8yp7un$_0": "Job StandaloneCoroutine{Completed}@1 is already complete or completing, but is being completed with CompletedExceptionally[JobCancellationException: StandaloneCoroutine has completed normally; job=StandaloneCoroutine{Completed}@1]"
    ​​
    name: "IllegalStateException"
    ​​
    stack: "captureStack@http://localhost/venus/scripts/kotlin.js:29371:27\nException@http://localhost/venus/scripts/kotlin.js:32720:14\nRuntimeException@http://localhost/venus/scripts/kotlin.js:32749:17\nIllegalStateException@http://localhost/venus/scripts/kotlin.js:32789:24\nJobSupport.prototype.makeCompletingOnce_8ea4ql$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:3848:13\nAbstractCoroutine.prototype.resumeWith_tl1gpc$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:416:20\nCoroutineImpl.prototype.resumeWith_tl1gpc$@http://localhost/venus/scripts/kotlin.js:29549:24\n_b.prototype.resumeWith_tl1gpc$@http://localhost/venus/js/kotlin.js:3:409042\nCoroutineImpl.prototype.resumeWith_tl1gpc$@http://localhost/venus/scripts/kotlin.js:29549:24\nDispatchedTask.prototype.run@http://localhost/venus/scripts/kotlinx-coroutines-core.js:33741:22\nMessageQueue.prototype.process@http://localhost/venus/scripts/kotlinx-coroutines-core.js:37055:15\nWindowMessageQueue$schedule$lambda/<@http://localhost/venus/scripts/kotlinx-coroutines-core.js:37010:27\n"
    ​​
    <prototype>: Object { constructor: IllegalStateException(message, cause), stack: "" }
    ​
    "message_q7r8iu$_0": "Fatal exception in coroutines machinery for DispatchedContinuation[WindowDispatcher@2, [object Object]]. Please read KDoc to 'handleFatalException' method and report this incident to maintainers"
    ​
    name: "CoroutinesInternalError"
    ​
    stack: "captureStack@http://localhost/venus/scripts/kotlin.js:29371:27\nError_0@http://localhost/venus/scripts/kotlin.js:32686:14\nCoroutinesInternalError@http://localhost/venus/scripts/kotlinx-coroutines-core.js:2841:13\nDispatchedTask.prototype.handleFatalException_mseuzz$@http://localhost/venus/scripts/kotlinx-coroutines-core.js:33771:16\nDispatchedTask.prototype.run@http://localhost/venus/scripts/kotlinx-coroutines-core.js:33764:10\nMessageQueue.prototype.process@http://localhost/venus/scripts/kotlinx-coroutines-core.js:37055:15\nWindowMessageQueue$schedule$lambda/<@http://localhost/venus/scripts/kotlinx-coroutines-core.js:37010:27\n"
    ​
    <prototype>: {…}
    ​​
    constructor: function CoroutinesInternalError(message, cause)
    ​​
    stack: ""
    ​​
    <prototype>: {…}
    ​​​
    cause: 
    ​​​
    constructor: function Error_0(message, cause)
    ​​​
    message: 
    ​​​
    stack: ""
    ​​​
    <get cause()>: get()
    ​​​​
    length: 0
    ​​​​
    name: "get"
    ​​​​
    prototype: Object { … }
    ​​​​
    <prototype>: function ()
    ​​​
    <get message()>: function get()
    ​​​
    <prototype>: Object { … }
    kotlinx-coroutines-core.js:36706:13
    
    

    It's a lot, I know, but some errors are the same. I wanted to give you as much information as possible. Here is my korio-root-korio.js file and here is the venus.js file and lastly here is my kotlinx-coroutines-core.js

    opened by benny1611 10
  • Websockets clients doenst work

    Websockets clients doenst work

    Hi there! I've just try to use your websocket multiplatform and got a lot of queestions. First of all, you have a ignored test for com.soywiz.korio.net.ws.WebSocketTest. If I try to change the implementation, I always stay in infinity loop in com/soywiz/korio/net/ws/RawSocketWebSocketClient.kt#connect:127 Secondly: implementation for windows doesn't work at all. I had to change something in com.soywiz.korio.net.NativeSocket#connect, and I want to discuss it :) All of this situation seems strange. May be I dont understand some approaches...))) Please give me feedback ASAP

    bug 
    opened by IgorKey 9
  • conflict with coroutines after updating from korio 1.12.0 to 2.0.3

    conflict with coroutines after updating from korio 1.12.0 to 2.0.3

    I'm using org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2-native-mt and com.soywiz.korlibs.korio:korio 1.12.0 in a multiplatform app.

    When trying to update korio it will no longer build on ios:

    > Task :shared:linkDebugFrameworkIosX64
    e: Compilation failed: Unbound symbols not allowed
    	Unbound public symbol for public kotlinx.coroutines/Delay.invokeOnTimeout|-1360839616470570076[0]
    
     * Source files: 
     * Compiler version info: Konan: 1.4.20 / Kotlin: 1.4.20
     * Output kind: STATIC_CACHE
    
    e: java.lang.AssertionError: Unbound symbols not allowed
    	Unbound public symbol for public kotlinx.coroutines/Delay.invokeOnTimeout|-1360839616470570076[0]
    	at org.jetbrains.kotlin.psi2ir.Psi2IrTranslator.generateModuleFragment(Psi2IrTranslator.kt:93)
    	at org.jetbrains.kotlin.backend.konan.PsiToIrKt.psiToIr(PsiToIr.kt:126)
    	at org.jetbrains.kotlin.backend.konan.ToplevelPhasesKt$psiToIrPhase$1.invoke(ToplevelPhases.kt:134)
    	at org.jetbrains.kotlin.backend.konan.ToplevelPhasesKt$psiToIrPhase$1.invoke(ToplevelPhases.kt)
    	at org.jetbrains.kotlin.backend.common.phaser.PhaseBuildersKt$namedOpUnitPhase$1.invoke(PhaseBuilders.kt:97)
    	at org.jetbrains.kotlin.backend.common.phaser.PhaseBuildersKt$namedOpUnitPhase$1.invoke(PhaseBuilders.kt:95)
    	at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:94)
    	at org.jetbrains.kotlin.backend.common.phaser.CompositePhase.invoke(PhaseBuilders.kt:30)
    	at org.jetbrains.kotlin.backend.common.phaser.NamedCompilerPhase.invoke(CompilerPhase.kt:94)
    	at org.jetbrains.kotlin.backend.common.phaser.CompilerPhaseKt.invokeToplevel(CompilerPhase.kt:41)
    	at org.jetbrains.kotlin.backend.konan.KonanDriverKt.runTopLevelPhases(KonanDriver.kt:29)
    	at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:78)
    	at org.jetbrains.kotlin.cli.bc.K2Native.doExecute(K2Native.kt:35)
    	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:88)
    	at org.jetbrains.kotlin.cli.common.CLICompiler.execImpl(CLICompiler.kt:44)
    	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:98)
    	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:76)
    e: Compilation failed: Unbound symbols not allowed
    
    	at org.jetbrains.kotlin.cli.common.CLITool.exec(CLITool.kt:45)
    	at org.jetbrains.kotlin.cli.common.CLITool$Companion.doMainNoExit(CLITool.kt:227)
    	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$mainNoExitWithGradleRenderer$1.invoke(K2Native.kt:277)
    	at org.jetbrains.kotlin.cli.bc.K2Native$Companion$mainNoExitWithGradleRenderer$1.invoke(K2Native.kt:261)
    	at org.jetbrains.kotlin.util.UtilKt.profileIf(Util.kt:27)
    	at org.jetbrains.kotlin.util.UtilKt.profile(Util.kt:21)
    	at org.jetbrains.kotlin.cli.bc.K2Native$Companion.mainNoExitWithGradleRenderer(K2Native.kt:276)
    	at org.jetbrains.kotlin.cli.bc.K2NativeKt.mainNoExitWithGradleRenderer(K2Native.kt:458)
    	at org.jetbrains.kotlin.cli.utilities.MainKt$daemonMain$1.invoke(main.kt:43)
    	at org.jetbrains.kotlin.cli.utilities.MainKt$daemonMain$1.invoke(main.kt)
    	at org.jetbrains.kotlin.cli.utilities.MainKt.mainImpl(main.kt:17)
    	at org.jetbrains.kotlin.cli.utilities.MainKt.daemonMain(main.kt:43)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.jetbrains.kotlin.compilerRunner.KotlinToolRunner.runInProcess(KotlinToolRunner.kt:100)
    	at org.jetbrains.kotlin.compilerRunner.KotlinToolRunner.run(KotlinToolRunner.kt:73)
    	at org.jetbrains.kotlin.gradle.tasks.CacheBuilder.ensureDependencyPrecached(KotlinNativeTasks.kt:782)
    	at org.jetbrains.kotlin.gradle.tasks.CacheBuilder.ensureDependencyPrecached(KotlinNativeTasks.kt:704)
    	at org.jetbrains.kotlin.gradle.tasks.CacheBuilder.buildCompilerArgs(KotlinNativeTasks.kt:838)
    	at org.jetbrains.kotlin.gradle.tasks.KotlinNativeLink.buildCompilerArgs(KotlinNativeTasks.kt:556)
    	at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinNativeCompile.buildArgs(KotlinNativeTasks.kt:300)
    	at org.jetbrains.kotlin.gradle.tasks.AbstractKotlinNativeCompile.compile(KotlinNativeTasks.kt:315)
    	at org.jetbrains.kotlin.gradle.tasks.KotlinNativeLink.compile(KotlinNativeTasks.kt:627)
    	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:498)
    	at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:104)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:58)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:51)
    	at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:29)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.run(ExecuteActionsTaskExecuter.java:555)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:29)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$1.execute(DefaultBuildOperationRunner.java:26)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.run(DefaultBuildOperationRunner.java:56)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$run$1(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.runWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:45)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:71)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:540)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:523)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.access$300(ExecuteActionsTaskExecuter.java:108)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.executeWithPreviousOutputFiles(ExecuteActionsTaskExecuter.java:271)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$TaskExecution.execute(ExecuteActionsTaskExecuter.java:260)
    	at org.gradle.internal.execution.steps.ExecuteStep.lambda$execute$1(ExecuteStep.java:34)
    	at java.util.Optional.orElseGet(Optional.java:267)
    	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:34)
    	at org.gradle.internal.execution.steps.ExecuteStep.execute(ExecuteStep.java:26)
    	at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:67)
    	at org.gradle.internal.execution.steps.CleanupOutputsStep.execute(CleanupOutputsStep.java:36)
    	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:49)
    	at org.gradle.internal.execution.steps.ResolveInputChangesStep.execute(ResolveInputChangesStep.java:34)
    	at org.gradle.internal.execution.steps.CancelExecutionStep.execute(CancelExecutionStep.java:43)
    	at org.gradle.internal.execution.steps.TimeoutStep.executeWithoutTimeout(TimeoutStep.java:73)
    	at org.gradle.internal.execution.steps.TimeoutStep.execute(TimeoutStep.java:54)
    	at org.gradle.internal.execution.steps.CreateOutputsStep.execute(CreateOutputsStep.java:44)
    	at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:54)
    	at org.gradle.internal.execution.steps.SnapshotOutputsStep.execute(SnapshotOutputsStep.java:38)
    	at org.gradle.internal.execution.steps.BroadcastChangingOutputsStep.execute(BroadcastChangingOutputsStep.java:42)
    	at org.gradle.internal.execution.steps.CacheStep.executeWithoutCache(CacheStep.java:159)
    	at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:72)
    	at org.gradle.internal.execution.steps.CacheStep.execute(CacheStep.java:43)
    	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:44)
    	at org.gradle.internal.execution.steps.StoreExecutionStateStep.execute(StoreExecutionStateStep.java:33)
    	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:38)
    	at org.gradle.internal.execution.steps.RecordOutputsStep.execute(RecordOutputsStep.java:24)
    	at org.gradle.internal.execution.steps.SkipUpToDateStep.executeBecause(SkipUpToDateStep.java:92)
    	at org.gradle.internal.execution.steps.SkipUpToDateStep.lambda$execute$0(SkipUpToDateStep.java:85)
    	at java.util.Optional.map(Optional.java:215)
    	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:55)
    	at org.gradle.internal.execution.steps.SkipUpToDateStep.execute(SkipUpToDateStep.java:39)
    	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:76)
    	at org.gradle.internal.execution.steps.ResolveChangesStep.execute(ResolveChangesStep.java:37)
    	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:36)
    	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsFinishedStep.execute(MarkSnapshottingInputsFinishedStep.java:26)
    	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:94)
    	at org.gradle.internal.execution.steps.ResolveCachingStateStep.execute(ResolveCachingStateStep.java:49)
    	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:79)
    	at org.gradle.internal.execution.steps.CaptureStateBeforeExecutionStep.execute(CaptureStateBeforeExecutionStep.java:53)
    	at org.gradle.internal.execution.steps.ValidateStep.execute(ValidateStep.java:74)
    	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.lambda$execute$2(SkipEmptyWorkStep.java:78)
    	at java.util.Optional.orElseGet(Optional.java:267)
    	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:78)
    	at org.gradle.internal.execution.steps.SkipEmptyWorkStep.execute(SkipEmptyWorkStep.java:34)
    	at org.gradle.internal.execution.steps.legacy.MarkSnapshottingInputsStartedStep.execute(MarkSnapshottingInputsStartedStep.java:39)
    	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:40)
    	at org.gradle.internal.execution.steps.LoadExecutionStateStep.execute(LoadExecutionStateStep.java:28)
    	at org.gradle.internal.execution.impl.DefaultWorkExecutor.execute(DefaultWorkExecutor.java:33)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeIfValid(ExecuteActionsTaskExecuter.java:187)
    	at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:179)
    	at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:109)
    	at org.gradle.api.internal.tasks.execution.FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)
    	at org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:62)
    	at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)
    	at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)
    	at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.executeTask(EventFiringTaskExecuter.java:77)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:55)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter$1.call(EventFiringTaskExecuter.java:52)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:200)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$CallableBuildOperationWorker.execute(DefaultBuildOperationRunner.java:195)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:75)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner$3.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:153)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.execute(DefaultBuildOperationRunner.java:68)
    	at org.gradle.internal.operations.DefaultBuildOperationRunner.call(DefaultBuildOperationRunner.java:62)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.lambda$call$2(DefaultBuildOperationExecutor.java:76)
    	at org.gradle.internal.operations.UnmanagedBuildOperationWrapper.callWithUnmanagedSupport(UnmanagedBuildOperationWrapper.java:54)
    	at org.gradle.internal.operations.DefaultBuildOperationExecutor.call(DefaultBuildOperationExecutor.java:76)
    	at org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter.execute(EventFiringTaskExecuter.java:52)
    	at org.gradle.execution.plan.LocalTaskNodeExecutor.execute(LocalTaskNodeExecutor.java:41)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:372)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$InvokeNodeExecutorsAction.execute(DefaultTaskExecutionGraph.java:359)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:352)
    	at org.gradle.execution.taskgraph.DefaultTaskExecutionGraph$BuildOperationAwareExecutionAction.execute(DefaultTaskExecutionGraph.java:338)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.lambda$run$0(DefaultPlanExecutor.java:127)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.execute(DefaultPlanExecutor.java:191)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:182)
    	at org.gradle.execution.plan.DefaultPlanExecutor$ExecutorWorker.run(DefaultPlanExecutor.java:124)
    	at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:64)
    	at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:48)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    	at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:56)
    	at java.lang.Thread.run(Thread.java:745)
    
    e: java.lang.AssertionError: Unbound symbols not allowed
    
    
    > Task :shared:linkDebugFrameworkIosX64 FAILED
    
    Execution failed for task ':shared:linkDebugFrameworkIosX64'.
    > Compilation finished with errors
    

    Reverting to coroutines 1.3.9-native-mt-2 seems to work on ios (I can use the newer korio-version) but this will result in a build-error on android. I get the same error when trying to use coroutines 1.4 with korio 2.0.3:

    Execution failed for task ':androidApp:dataBindingMergeDependencyArtifactsDebug'.
    > Could not resolve all files for configuration ':androidApp:debugRuntimeClasspath'.
       > Could not resolve org.jetbrains.kotlinx:kotlinx-coroutines-core:{strictly 1.4.2-native-mt}.
         Required by:
             project :androidApp > project :shared
          > Cannot find a version of 'org.jetbrains.kotlinx:kotlinx-coroutines-core' that satisfies the version constraints:
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:{strictly 1.4.2-native-mt}'
               Dependency path 'myapp:androidApp:unspecified' --> 'androidx.lifecycle:lifecycle-livedata-ktx:2.2.0' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.0'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.soywiz.korlibs.korio:korio:2.0.3' --> 'com.soywiz.korlibs.korio:korio-android:2.0.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.squareup.sqldelight:coroutines-extensions:1.4.3' --> 'com.squareup.sqldelight:coroutines-extensions-jvm:1.4.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9'
               Dependency path 'myapp:androidApp:unspecified' --> 'androidx.lifecycle:lifecycle-runtime-ktx:2.3.0-beta01' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.2' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.4.2'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.example.libhttp:libhttp:3.0.4' --> 'com.example.libhttp:libhttp-android-debug:3.0.4' --> 'io.ktor:ktor-client-logging:1.4.3' --> 'io.ktor:ktor-client-logging-jvm:1.4.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt-2'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.example.libhttp:libhttp:3.0.4' --> 'com.example.libhttp:libhttp-android-debug:3.0.4' --> 'io.ktor:ktor-client-core:1.4.3' --> 'io.ktor:ktor-client-core-jvm:1.4.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt-2'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.example.libhttp:libhttp:3.0.4' --> 'com.example.libhttp:libhttp-android-debug:3.0.4' --> 'io.ktor:ktor-client-serialization:1.4.3' --> 'io.ktor:ktor-client-serialization-jvm:1.4.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt-2'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.example.libhttp:libhttp:3.0.4' --> 'com.example.libhttp:libhttp-android-debug:3.0.4' --> 'io.ktor:ktor-client-auth:1.4.3' --> 'io.ktor:ktor-client-auth-jvm:1.4.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt-2'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.example.libhttp:libhttp:3.0.4' --> 'com.example.libhttp:libhttp-android-debug:3.0.4' --> 'io.ktor:ktor-client-core:1.4.3' --> 'io.ktor:ktor-client-core-jvm:1.4.3' --> 'io.ktor:ktor-http:1.4.3' --> 'io.ktor:ktor-http-jvm:1.4.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt-2'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.example.libhttp:libhttp:3.0.4' --> 'com.example.libhttp:libhttp-android-debug:3.0.4' --> 'io.ktor:ktor-client-core:1.4.3' --> 'io.ktor:ktor-client-core-jvm:1.4.3' --> 'io.ktor:ktor-http-cio:1.4.3' --> 'io.ktor:ktor-http-cio-jvm:1.4.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt-2'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.example.libhttp:libhttp:3.0.4' --> 'com.example.libhttp:libhttp-android-debug:3.0.4' --> 'io.ktor:ktor-client-serialization:1.4.3' --> 'io.ktor:ktor-client-serialization-jvm:1.4.3' --> 'io.ktor:ktor-client-json:1.4.3' --> 'io.ktor:ktor-client-json-jvm:1.4.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt-2'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.example.libhttp:libhttp:3.0.4' --> 'com.example.libhttp:libhttp-android-debug:3.0.4' --> 'io.ktor:ktor-client-core:1.4.3' --> 'io.ktor:ktor-client-core-jvm:1.4.3' --> 'io.ktor:ktor-http:1.4.3' --> 'io.ktor:ktor-http-jvm:1.4.3' --> 'io.ktor:ktor-utils:1.4.3' --> 'io.ktor:ktor-utils-jvm:1.4.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt-2'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.example.libhttp:libhttp:3.0.4' --> 'com.example.libhttp:libhttp-android-debug:3.0.4' --> 'io.ktor:ktor-client-core:1.4.3' --> 'io.ktor:ktor-client-core-jvm:1.4.3' --> 'io.ktor:ktor-http-cio:1.4.3' --> 'io.ktor:ktor-http-cio-jvm:1.4.3' --> 'io.ktor:ktor-network:1.4.3' --> 'io.ktor:ktor-network-jvm:1.4.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt-2'
               Dependency path 'myapp:androidApp:unspecified' --> 'myapp:shared:1.0' --> 'com.example.libhttp:libhttp:3.0.4' --> 'com.example.libhttp:libhttp-android-debug:3.0.4' --> 'io.ktor:ktor-client-core:1.4.3' --> 'io.ktor:ktor-client-core-jvm:1.4.3' --> 'io.ktor:ktor-http:1.4.3' --> 'io.ktor:ktor-http-jvm:1.4.3' --> 'io.ktor:ktor-utils:1.4.3' --> 'io.ktor:ktor-utils-jvm:1.4.3' --> 'io.ktor:ktor-io:1.4.3' --> 'io.ktor:ktor-io-jvm:1.4.3' --> 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.9-native-mt-2'
    

    The libraries libhttp and liboauth are mine and they're using ktor. They needed an update to ktor 1.4.3 so my main project (myapp) could build with the new coroutines-versions.

    So I'm stuck being able to build only one of both platforms. The only workaround seems to remove korio (I'm also using klock 2.0.0 and * krypto 2.0.1* which are working fine).

    opened by hardysim 8
  • [LinuxX64] ld.lld: error: relocation R_X86_64_PC32 cannot be used against symbol __environ; recompile with -fPIC

    [LinuxX64] ld.lld: error: relocation R_X86_64_PC32 cannot be used against symbol __environ; recompile with -fPIC

    • Kotlin version: 1.4.10
    • korio version: 2.0.0-alpha
        linuxX64 {
            binaries {
                compilations.getByName("main") {
                    val matchInterop by cinterops.creating {
                        defFile("src/nativeInterop/cinterop/libmatch.def")
                        compilerOpts("-fPIC")
                    }
                }
                sharedLib("match", listOf(RELEASE))
            }
        }
    

    Execute :

    ./gradlew :libmatch:linkMatchReleaseSharedLinuxX64
    

    Got error:

    ld.lld: error: relocation R_X86_64_PC32 cannot be used against symbol __environ; recompile with -fPIC
    >>> defined in /home/bennyhuo/.konan/dependencies/target-gcc-toolchain-3-linux-x86-64/x86_64-unknown-linux-gnu/sysroot/lib64/libc.so.6
    >>> referenced by out
    >>>               /tmp/konan_temp7652478800042105268/result.o:(kfun:com.soywiz.korio.lang.Environment.$<init>$lambda-0$FUNCTION_REFERENCE$190.invoke#internal)
    

    btw: :libmatch:linkMatchDebugSharedLinuxX64 will cause similar problem.

    opened by bennyhuo 8
  • ReferenceError: require is not defined  korio-root-korio.js:47299:3

    ReferenceError: require is not defined korio-root-korio.js:47299:3

    Hi,

    I'm trying to make a multi-platform project and I'm using KorIO version 1.11.10. The project needs to work for both JVM and JS Browser. The problem is when I'm trying to run my project I get this error in the browser's console: ReferenceError: require is not defined .......... korio-root-korio.js:47299:3 I'm only using WebSockets (which are available for both platforms) and also com.soywiz.korio.async.delay and com.soywiz.korio.async.launch. Are the last 2 not supported for JS Browser? Can you tell me what I'm doing wrong?

    Thank you!

    question 
    opened by benny1611 8
  • TcpClient in windows seems to have issues

    TcpClient in windows seems to have issues

    Korio version=1.6.4

    Using this simple code:

        GlobalScope.async {
            val tcpClient = createTcpClient(false)
            tcpClient.connect("172.65.204.172", 12995)
            if(tcpClient.connected){
                println("We are connected!")
                tcpClient.write(dataBytes)
                val result = tcpClient.readAll()
            }
        }
    

    Will casts kotlin.IllegalStateException: WSA error(connect): 10051 on Windows. This will work on mac, but instead it does not seem to write/read any of the data the server should get/send back

    bug 
    opened by Syrou 8
Releases(v2.2.1)
  • v2.0.10(Mar 11, 2021)

  • v2.0.5(Jan 24, 2021)

  • v2.0.3-native-mt(Dec 26, 2020)

  • v2.0.0(Nov 20, 2020)

    https://github.com/korlibs/korio/compare/v1.11.13...v2.0.0

    Bumps:

    • Kotlin 1.4.20-M1
    • Coroutines 1.4.0
    • Now depends on krypto

    Optimizations:

    • Json now supports optimizing numeric lists by building and returning a DoubleArrayList instead of a plain ArrayList with boxed Double
    • Optimized some stream readings
    • Greatly optimized asynchronous reading by not using AsyncThread

    Additions:

    • Added runBlockingNoJs
    • Added Signal2 to create a signal that receives two parameters
    • Added PathInfo.relativePathTo
    • Added VfsFile.relativePathTo
    • Added VfsFileFromData as a simplification for MemoryVfs with a single file
    • Integrate krypto hashing functions with korio Streams
    • Cancellable is now a functional interface
    • Added Environment.expand to expand %param% and ~
    • Added Resources, ResourcesContainer and Resourceable
    • Added AsyncOutputStream.writeTempBytes
    • Added high level AsyncInputStream.consume
    • Improved FastByteArrayInputStream with slicing support and more
    • Added redirect delegate using either RedirectMutableField or RedirectField

    Fixes:

    • Some YAML fixes
    • UrlVfs now throw FileNotFoundException on 404 (added failFromStatus boolean property to prevent this to get the 404 content despite of this)

    Expose:

    • Lock class

    Breaking changes:

    • TimeSpan.NULL -> TimeSpan.NIL (problem with K/N on mobile)
    • Vfs.listFlow (Flow) and Vfs.listSimple (List)
    • VfsFile.list, VfsFile.listRecursive -> Flow, VfsFile.listSimple -> List
    • Removed VfsFile.set functions
    • Changed VfsFile.readLines from List to Sequence
    • Some changes to FastByteArrayInputStream
    • Removed Base64 and Hex utilities from Korio since now it includes krypto that already provide those utilities in other package
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0-rc3(Nov 16, 2020)

  • v2.0.0-rc2(Oct 31, 2020)

    https://github.com/korlibs/korio/compare/v1.11.13...v2.0.0-rc2

    Bumps:

    • Kotlin 1.4.20-M1
    • Coroutines 1.4.0
    • Now depends on krypto

    Optimizations:

    • Json now supports optimizing numeric lists by building and returning a DoubleArrayList instead of a plain ArrayList with boxed Double
    • Optimized some stream readings
    • Greatly optimized asynchronous reading by not using AsyncThread

    Additions:

    • Added runBlockingNoJs
    • Added Signal2 to create a signal that receives two parameters
    • Added PathInfo.relativePathTo
    • Added VfsFile.relativePathTo
    • Added VfsFileFromData as a simplification for MemoryVfs with a single file
    • Integrate krypto hashing functions with korio Streams
    • Cancellable is now a functional interface
    • Added Environment.expand to expand %param% and ~
    • Added Resources, ResourcesContainer and Resourceable
    • Added AsyncOutputStream.writeTempBytes
    • Added high level AsyncInputStream.consume
    • Improved FastByteArrayInputStream with slicing support and more
    • Added redirect delegate using either RedirectMutableField or RedirectField

    Fixes:

    • Some YAML fixes

    Expose:

    • Lock class

    Breaking changes:

    • TimeSpan.NULL -> TimeSpan.NIL (problem with K/N on mobile)
    • Vfs.listFlow (Flow) and Vfs.listSimple (List)
    • VfsFile.list, VfsFile.listRecursive -> Flow, VfsFile.listSimple -> List
    • Removed VfsFile.set functions
    • Changed VfsFile.readLines from List to Sequence
    • Some changes to FastByteArrayInputStream
    • Removed Base64 and Hex utilities from Korio since now it includes krypto that already provide those utilities in other package
    Source code(tar.gz)
    Source code(zip)
  • v2.0.0-alpha(Oct 9, 2020)

  • v1.12.0(Sep 8, 2020)

  • v1.11.13(Jul 10, 2020)

  • v1.11.12(Jul 9, 2020)

  • v1.11.11(Jul 1, 2020)

    • Try to fix require_req not found when not using requirejs
    • Fixes #91 - Fixes close reading from server, exposes information about the close in onClose and properly implements continuation frames (#92)
    • Fixes #78: Support SSL on JVM targets
    Source code(tar.gz)
    Source code(zip)
Owner
Kotlin cORoutine Libraries for fullstack development - https://bintray.com/korlibs/korlibs - https://github.com/korlibs
null
Android application to sync RSS without a server using DecSync

Flym DecSync Flym DecSync is a fork of Flym which adds synchronization using DecSync. To start synchronizing, all you have to do is synchronize your s

Aldo Gunsing 20 Dec 30, 2022
Create Android Demo with TCP/IP Protocol.

DEMO说明文档 本demo为Java 编写的给Android手机或平板使用TCP方式控制Dobot协作机器人CR(以下简称CR)的DEMO DEMO系统要求 Android 4.3版本以上即可 工程文件说明 工程文件需要使用Android Studio打开,请使用4.0版本的Android Stu

Dobot 1 Aug 16, 2022
Script Android from TCP socket

What is this? This is an Android application that will execute commands received over TCP port 9988, which includes automatic introspection to call an

Pierre-Hugues HUSSON 9 Jun 3, 2022
German public broadcasting live streams as an Android app

Über FAQ Changelog Bibliotheken Über Zapp ist Teil von MediathekView und gibt dir einen schnellen Zugang zu vielen deutschen öffentlich-rechtlichen Fe

MediathekView 140 Jan 1, 2023
A Discord audio player that streams audio from the desktop.

Synced A Discord audio player that streams audio from the desktop. Synced runs as a bot that plays audio to your selected Discord server. You can cont

Leo Denault 3 Oct 23, 2022
Object-streams - An experimental library for dealing with legacy code

Object Streams Super experimental! no guarantees to the public API surface. At t

Ragunath Jawahar 5 Jan 18, 2022
xposed安卓虚拟摄像头 android virtual camera on xposed hook

android_virtual_cam xposed安卓虚拟摄像头 感谢https://github.com/wangwei1237/CameraHook 提供的HOOK思路!! 求有无极的大佬,希望帮忙测试一下此模块虚拟框架下是否可用,测试后希望在issue中反馈一下,谢谢!!! 具体的使用方法(

null 645 Jan 1, 2023
Android app for virtual dean's office of WSEI

WSEI Dziekanat An application for Android devices that facilitates the use of the virtual dean's office of the College of Economics and Computer Scien

null 5 Nov 15, 2022
Sync DND state between Android phone and watch

DNDSync This App was developed to enable Do Not Disturb (DND) synchronization between my Pixel phone and the Galaxy Watch 4 since this option was only

rhaeus 57 Jan 5, 2023
Sync floder from drive to local storage

GDrive #refrence and steps to upload - https://developers.google.com/drive/api/v3/manage-uploads to download - https://developers.goo

Karn_Rahul 0 Nov 4, 2021
DAVx⁵ is an open-source CalDAV/CardDAV suite and sync app for Android.

DAVx⁵ Please see the DAVx⁵ Web site for comprehensive information about DAVx⁵. DAVx⁵ is licensed under the GPLv3 License. News and updates: @davx5app

bitfire web engineering 478 Dec 28, 2022
Mobile client for official Nextcloud News App written as Kotlin Multiplatform Project

Newsout Android and iOS mobile client for Nextcloud news App. The Android client is already available to download in the Play Store. F-Droid and Apple

Simon Schubert 118 Oct 3, 2022
An unofficial Zerotier Android client patched from official client

An unofficial Zerotier Android client patched from official client

KAAAsS 819 Dec 29, 2022
MEGA Android Client - A fully-featured client to access your Cloud Storage provided by MEGA

A fully-featured client to access your Cloud Storage provided by MEGA. This document will guide you to build the application on a Linux machine with Android Studio.

Mega Limited 1.1k Jan 3, 2023
Quote-App-Kotlin - Quote App Based on MVVM clean architecture getting quote from json file stored in assets

Quotify - Simple Quotes App This app shows the use of ViewModel and ViewModelFac

Ali Ahmad 2 Apr 14, 2022
Phone booking system with kotlin

phone-booking-system Too lazy to introspect openapi? No worries, basic CURLs below; however, one needs to start the docker-compose file located in the

Dan Zaru 0 Nov 7, 2021
Sae Hoon Scheduling System With Kotlin

SaeHoonSchedulingSystem 약속을 편하게 관리할 수 있는 안드로이드 어플리케이션 입니다. Getting Started / 어떻게 시작하나요? SaeHoon's Scheduling System Api Server를 먼저 실행 후 Android Studio

null 1 May 29, 2022
Simple media hosting system written in kotlin.

media-server This project is a simple media server implementation that allows you to upload and share files. This project was made in Kotlin and HTML,

null 4 May 15, 2022
MyTraining - Application project for Android system using Kotlin

MyTraining Projeto de aplicação para sistema Android utilizando linguagem Kotlin

Leandro Rodrigues de Carvalho 1 Feb 22, 2022