1.1.3 • Published 11 months ago
@hazae41/kcp v1.1.3
KCP
Zero-copy KCP protocol for the web
npm i @hazae41/kcp
Features
Current features
- 100% TypeScript and ESM
- Zero-copy reading and writing
- Works in the browser
Usage
import { KcpDuplex } from "@hazae41/kcp"
import { Opaque, Writable } from "@hazae41/binary"
import { SuperTransformStream } from "@hazae41/cascade"
import { None } from "@hazae41/kcp"
const conversation = 12345
function pipeToKcp(raw: { outer: ReadableWritablePair<Opaque, Writable> }): { outer: ReadableWritablePair<Opaque, Writable> } {
const kcp = new KcpDuplex({ conversation })
raw.outer.readable
.pipeTo(kcp.inner.writable)
.catch(() => { })
kcp.inner.readable
.pipeTo(raw.outer.writable)
.catch(() => { })
return kcp
}
function pipeToDummy(kcp: { outer: ReadableWritablePair<Opaque, Writable> }) {
const dummy = new Dummy()
kcp.outer.readable
.pipeTo(dummy.inner.writable)
.catch(() => { })
dummy.inner.readable
.pipeTo(kcp.outer.writable)
.catch(() => { })
return dummy
}
class Dummy extends HalfDuplex<Opaque, Writable> {
constructor() {
super()
}
send(data: Writable) {
this.output.enqueue(data)
}
}
const forward = new TransformStream<Writable, Opaque>({ transform: (chunk, controller) => controller.enqueue(Opaque.writeFromOrThrow(chunk)) })
const backward = new TransformStream<Writable, Opaque>({ transform: (chunk, controller) => controller.enqueue(Opaque.writeFromOrThrow(chunk)) })
const rawA = { outer: { readable: forward.readable, writable: backward.writable } }
const rawB = { outer: { readable: backward.readable, writable: forward.writable } }
const kcpA = pipeToKcp(rawA)
const kcpB = pipeToKcp(rawB)
const dummyA = pipeToDummy(kcpA)
const dummyB = pipeToDummy(kcpB)
dummyB.input.events.on("message", (data) => {
console.log("b", data.bytes)
return new None()
})
dummyA.input.events.on("message", (data) => {
console.log("a", data.bytes)
return new None()
})
dummyA.send(new Opaque(new Uint8Array([1, 2, 3])))
dummyB.send(new Opaque(new Uint8Array([4, 5, 6])))
1.1.3
11 months ago
1.1.1
1 year ago
1.1.2
1 year ago
1.1.0
1 year ago
1.0.11
1 year ago
1.0.10
1 year ago
1.0.9
1 year ago
1.0.8
1 year ago
1.0.7
1 year ago
1.0.6
1 year ago
1.0.2
1 year ago
1.0.1
1 year ago
1.0.0
1 year ago
1.0.5
1 year ago
1.0.4
1 year ago
0.2.43
1 year ago
0.2.42
1 year ago
0.2.41
1 year ago
0.2.40
2 years ago
0.2.27
2 years ago
0.2.39
2 years ago
0.2.30
2 years ago
0.2.38
2 years ago
0.2.37
2 years ago
0.2.36
2 years ago
0.2.35
2 years ago
0.2.34
2 years ago
0.2.33
2 years ago
0.2.32
2 years ago
0.2.31
2 years ago
0.2.29
2 years ago
0.2.28
2 years ago
0.2.26
2 years ago
0.2.25
2 years ago
0.2.24
2 years ago
0.2.23
2 years ago
0.2.22
2 years ago
0.2.21
2 years ago
0.2.20
2 years ago
0.2.19
2 years ago
0.2.18
2 years ago
0.2.17
2 years ago
0.2.16
2 years ago
0.2.15
2 years ago
0.2.14
2 years ago
0.2.13
2 years ago
0.2.12
2 years ago
0.2.11
2 years ago
0.2.10
2 years ago
0.2.1
2 years ago
0.2.0
2 years ago
0.2.7
2 years ago
0.2.6
2 years ago
0.2.9
2 years ago
0.2.8
2 years ago
0.2.3
2 years ago
0.2.2
2 years ago
0.2.5
2 years ago
0.2.4
2 years ago
0.1.1
2 years ago
0.1.0
2 years ago