override fun read()

in rd-kt/rd-framework/src/main/kotlin/com/jetbrains/rd/framework/SocketWire.kt [230:283]


            override fun read(): Int {
                if (pos < pkg.size)
                    return pkg[pos++].toInt() and 0xff

                while (true) {
                    val len = stream.readInt32() ?: return -1

                    if (len == ping_len) {
                        val receivedTimestamp = stream.readInt32() ?: return -1
                        val receivedCounterpartTimestamp = stream.readInt32() ?: return -1

                        counterpartTimestamp = receivedTimestamp
                        counterpartNotionTimestamp = receivedCounterpartTimestamp

                        if (connectionEstablished(currentTimeStamp, counterpartNotionTimestamp)) {
                            if (!heartbeatAlive.value) { // only on change
                                logger.trace {
                                    "Connection is alive after receiving PING $id: " +
                                        "receivedTimestamp: $receivedTimestamp, " +
                                        "receivedCounterpartTimestamp: $receivedCounterpartTimestamp" +
                                        "currentTimeStamp: $currentTimeStamp, " +
                                        "counterpartTimestamp: $counterpartTimestamp, " +
                                        "counterpartNotionTimestamp: $counterpartNotionTimestamp"
                                }
                            }
                            heartbeatAlive.value = true
                        }
                        continue
                    }

                    val seqn = stream.readInt64() ?: return -1
                    if (len == ack_msg_len) {
                        sendBuffer.acknowledge(seqn)
                    }
                    else {
                        require(len > 0) {"len > 0: $len"}
                        assertLength(len)

                        pkg = ByteArray(len)
                        pos = 0
                        if (!stream.readByteArray(pkg)) {
                            pkg = ByteArray(0)
                            return -1
                        }

                        if (seqn > maxReceivedSeqn) {
                            maxReceivedSeqn = seqn
                            return pkg[pos++].toInt() and 0xff
                        } else
                            sendAck(seqn)
                    }

                }
            }