Skip to content

doorbash/colyseus-kotlin

Repository files navigation

Colyseus-Kotlin

Implementation of Colyseus client using Kotlin

Download

repositories {
    maven { url 'https://jitpack.io' }
}

dependencies {
    implementation 'com.github.doorbash:colyseus-kotlin:0.14.5'
}

How to

Define schema class

class MyState : Schema() {
    @SchemaField("0/ref", PrimitivesTest::class)
    var primitives = PrimitivesTest()

    @SchemaField("1/array/ref", Player::class)
    var players = ArraySchema(Player::class.java)

    @SchemaField("2/map/ref", Cell::class)
    var cells = MapSchema(Cell::class.java)
}

class Cell : Schema() {
    @SchemaField("0/float32")
    var x = Float.default

    @SchemaField("1/float32")
    var y = Float.default
}

class PrimitivesTest : Schema() {
    @SchemaField("0/uint8")
    var _uint8 = Short.default

    @SchemaField("1/uint16")
    var _uint16 = Int.default

    @SchemaField("2/uint32")
    var _uint32 = Long.default

    @SchemaField("3/uint64")
    var _uint64 = Long.default

    @SchemaField("4/int8")
    var _int8 = Byte.default

    @SchemaField("5/int16")
    var _int16 = Short.default

    @SchemaField("6/int32")
    var _int32 = Int.default

    @SchemaField("7/int64")
    var _int64 = Long.default

    @SchemaField("8/float32")
    var _float32_n = Float.default

    @SchemaField("9/float32")
    var _float32_p = Float.default

    @SchemaField("10/float64")
    var _float64_n = Double.default

    @SchemaField("11/float64")
    var _float64_p = Double.default

    @SchemaField("12/boolean")
    var _boolean = Boolean.default

    @SchemaField("13/string")
    var _string = String.default
}

class Player : Schema() {
    @SchemaField("0/int32")
    var x = Int.default
}

Join or create a room:

val client = Client("ws://localhost:2567")
with(client.joinOrCreate(MyState::class.java, "game")) {
    println("connected to $name")

    // setup listeners
}

Setup listeners

/* Room listeners */
onLeave = { code -> println("onLeave $code") }

onError = { code, message ->
    println("onError $code $message")
}

onStateChange = { state, isFirstState ->
    println("OnStateChange")
    println(isFirstState)
}

/* Schema listeners */
state.primitives.onChange = { changes ->
    for (change in changes) {
        with(change!!) {
            println("$field: $previousValue -> $value")
        }
    }
}

state.players.onAdd = { player, key ->
    println("player added: " + key + "  " + player.x)
}

state.players.onRemove = { player, key ->
    println("player removed: " + key + "  " + player.x)
}

/* Message Listeners */
//Set listener by message type
onMessage("hi") { cells: MapSchema<Cell> ->
    println("cells size is ${cells.size}")
    println(cells)
}

// Set listener by type
onMessage { primitives: PrimitivesTest ->
    println("some primitives...")
    println(primitives._string)
}

// Set listener by type id
onMessage(2) { cell: Cell ->
    println("handler for type 2")
    println(cell.x)
}

Send message to server:

// Send message with message type
send("fire", Math.random() * 100)

// Send a schema with type id
send(2, Cell().apply { x = 100f; y = 200f })

// Send only the message type or type id
send("hello")
send(3)

Usage examples

License

MIT

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy