server for my chess game
Diffstat (limited to 'src/clients.js')
| -rw-r--r-- | src/clients.js | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/src/clients.js b/src/clients.js new file mode 100644 index 0000000..f018a12 --- /dev/null +++ b/src/clients.js @@ -0,0 +1,88 @@ +function create_data(ws, id, name, country) { + return { + name: name, + id: id, + ws: ws, + country: country, + }; +} + +function create_empty_data() { + return { + empty: true, + }; +} + +export class Clients { + constructor(ws, id, name, country, is_white) { + if (is_white) { + this.w = create_data(ws, id, name, country); + this.b = create_empty_data(); + } else { + this.b = create_data(ws, id, name, country); + this.w = create_empty_data(); + } + } + + get_ws(color) { + return color === "w" ? this.w.ws : this.b.ws; + } + + get_info(color) { + return color === "w" + ? { name: this.w.name, country: this.w.country } + : { name: this.b.name, country: this.b.country }; + } + + get client_list() { + return [this.get_ws("w"), this.get_ws("b")]; + } + + get players() { + let players = 0; + if (!this.w.empty) players++; + if (!this.b.empty) players++; + return players; + } + + get length() { + let client_count = 0; + if (this.w.ws != undefined) client_count++; + if (this.b.ws != undefined) client_count++; + return client_count; + } + + get_all_info() { + return { w: this.get_info("w"), b: this.get_info("b") }; + } + + add(ws, name, id, country, is_white = this.w.empty) { + if (is_white) this.w = create_data(ws, id, name, country); + else this.b = create_data(ws, id, name, country); + } + + exists(color) { + return color === "w" ? !this.w.empty : !this.b.empty; + } + + // fake function overloading + color_of(nameorws, country, id) { + if (typeof nameorws == "string") { + // if you check name, country AND id, even if there are duplicate ids (impossible) it wont have problems + function check(on) { + // if on doesnt have a name property, this will not error, because js + return on.name == nameorws && on.country == country && on.id == id; + } + if (check(this.w)) return "w"; + else if (check(this.b)) return "b"; + } else if (typeof nameorws == "object") { + if (this.w.ws == nameorws) return "w"; + if (this.b.ws == nameorws) return "b"; + } + } + + erase(client) { + if (this.w.ws == client) this.w.ws = undefined; + else if (this.b.ws == client) this.b.ws = undefined; + } +} |