From 6cad2f6bbc71763bf432eb415e67bf1ee4f498bb Mon Sep 17 00:00:00 2001 From: ChillerDragon Date: Sat, 26 Nov 2022 11:25:23 +0100 Subject: [PATCH] Call chunks messages (closed #6) --- docs/v0.0.1/classes/TeeworldsClient.md | 14 ++++-- .../classes/messages/MaplistEntryAdd.md | 5 ++ .../classes/messages/MaplistEntryRem.md | 5 ++ examples/10_maplist.rb | 17 +++++++ lib/context.rb | 6 +-- lib/game_client.rb | 46 ++++++++----------- lib/game_server.rb | 4 +- 7 files changed, 60 insertions(+), 37 deletions(-) create mode 100644 docs/v0.0.1/classes/messages/MaplistEntryAdd.md create mode 100644 docs/v0.0.1/classes/messages/MaplistEntryRem.md create mode 100755 examples/10_maplist.rb diff --git a/docs/v0.0.1/classes/TeeworldsClient.md b/docs/v0.0.1/classes/TeeworldsClient.md index d3c407f..f5a59e9 100644 --- a/docs/v0.0.1/classes/TeeworldsClient.md +++ b/docs/v0.0.1/classes/TeeworldsClient.md @@ -21,14 +21,16 @@ client.connect('localhost', 8303, detach: true) **Parameter: block [Block |[context](../classes/Context.md)|]** -TODO: generated documentation +context.message is a [MaplistEntryAdd](../classes/messages/MaplistEntryAdd.md) **Example:** ```ruby client = TeeworldsClient.new client.on_maplist_entry_add do |context| - # TODO: generated documentation + # print all map names the server + # sends to the client + puts context.message.name end client.connect('localhost', 8303, detach: true) @@ -38,14 +40,16 @@ client.connect('localhost', 8303, detach: true) **Parameter: block [Block |[context](../classes/Context.md)|]** -TODO: generated documentation +context.message is a [MaplistEntryRem](../classes/messages/MaplistEntryRem.md) **Example:** ```ruby client = TeeworldsClient.new -client.on_rcon_cmd_rem do |context| - # TODO: generated documentation +client.on_maplist_entry_rem do |context| + # print all map names the server + # sends to the client + puts context.message.name end client.connect('localhost', 8303, detach: true) diff --git a/docs/v0.0.1/classes/messages/MaplistEntryAdd.md b/docs/v0.0.1/classes/messages/MaplistEntryAdd.md new file mode 100644 index 0000000..238733c --- /dev/null +++ b/docs/v0.0.1/classes/messages/MaplistEntryAdd.md @@ -0,0 +1,5 @@ +# MaplistEntryAdd + +Server -> Client + +### @name [String] diff --git a/docs/v0.0.1/classes/messages/MaplistEntryRem.md b/docs/v0.0.1/classes/messages/MaplistEntryRem.md new file mode 100644 index 0000000..7c86141 --- /dev/null +++ b/docs/v0.0.1/classes/messages/MaplistEntryRem.md @@ -0,0 +1,5 @@ +# MaplistEntryRem + +Server -> Client + +### @name [String] diff --git a/examples/10_maplist.rb b/examples/10_maplist.rb new file mode 100755 index 0000000..5dc6787 --- /dev/null +++ b/examples/10_maplist.rb @@ -0,0 +1,17 @@ +#!/usr/bin/env ruby +# frozen_string_literal: true + +require_relative '../lib/teeworlds_client' + +client = TeeworldsClient.new + +client.on_connected do |_| + client.rcon_auth(password: 'rcon') +end + +client.on_maplist_entry_add do |ctx| + puts ctx.message.name +end + +# connect and block main thread +client.connect('localhost', 8303, detach: false) diff --git a/lib/context.rb b/lib/context.rb index 5640cbe..86f4b00 100644 --- a/lib/context.rb +++ b/lib/context.rb @@ -2,10 +2,10 @@ class Context attr_reader :old_data - attr_accessor :data, :todo_rename_this + attr_accessor :data, :message - def initialize(todo_rename_this, keys = {}) - @todo_rename_this = todo_rename_this # the obj holding the parsed chunk + def initialize(message, keys = {}) + @message = message # the obj holding the parsed chunk @cancel = false @old_data = keys @data = keys diff --git a/lib/game_client.rb b/lib/game_client.rb index 7f0671d..92b64ac 100644 --- a/lib/game_client.rb +++ b/lib/game_client.rb @@ -52,35 +52,27 @@ class GameClient end def on_rcon_cmd_add(chunk) - todo_rename_this = RconCmdAdd.new(chunk.data[1..]) - context = Context.new(todo_rename_this) - return if call_hook(:rcon_cmd_add, context).nil? - - p context.todo_rename_this + message = RconCmdAdd.new(chunk.data[1..]) + context = Context.new(message) + call_hook(:rcon_cmd_add, context) end def on_rcon_cmd_rem(chunk) - todo_rename_this = RconCmdRem.new(chunk.data[1..]) - context = Context.new(todo_rename_this) - return if call_hook(:rcon_cmd_rem, context).nil? - - p context.todo_rename_this + message = RconCmdRem.new(chunk.data[1..]) + context = Context.new(message) + call_hook(:rcon_cmd_rem, context) end def on_maplist_entry_add(chunk) - todo_rename_this = MaplistEntryAdd.new(chunk.data[1..]) - context = Context.new(todo_rename_this) - return if call_hook(:maplist_entry_add, context).nil? - - p context.todo_rename_this + message = MaplistEntryAdd.new(chunk.data[1..]) + context = Context.new(message) + call_hook(:maplist_entry_add, context) end def on_maplist_entry_rem(chunk) - todo_rename_this = MaplistEntryRem.new(chunk.data[1..]) - context = Context.new(todo_rename_this) - return if call_hook(:maplist_entry_rem, context).nil? - - p context.todo_rename_this + message = MaplistEntryRem.new(chunk.data[1..]) + context = Context.new(message) + call_hook(:maplist_entry_rem, context) end def on_client_info(chunk) @@ -113,20 +105,20 @@ class GameClient end def on_input_timing(chunk) - todo_rename_this = InputTiming.new(chunk.data[1..]) - context = Context.new(todo_rename_this, chunk:) + message = InputTiming.new(chunk.data[1..]) + context = Context.new(message, chunk:) call_hook(:input_timing, context) end def on_client_drop(chunk) - todo_rename_this = SvClientDrop.new(chunk.data[1..]) + message = SvClientDrop.new(chunk.data[1..]) context = Context.new( nil, - player: @players[todo_rename_this.client_id], + player: @players[message.client_id], chunk:, - client_id: todo_rename_this.client_id, - reason: todo_rename_this.reason, - silent: todo_rename_this.silent? + client_id: message.client_id, + reason: message.reason, + silent: message.silent? ) return if call_hook(:client_drop, context).nil? diff --git a/lib/game_server.rb b/lib/game_server.rb index 0edcb75..e97978e 100644 --- a/lib/game_server.rb +++ b/lib/game_server.rb @@ -25,8 +25,8 @@ class GameServer end def on_emoticon(chunk, _packet) - todo_rename_this = ClEmoticon.new(chunk.data[1..]) - p todo_rename_this + message = ClEmoticon.new(chunk.data[1..]) + p message end def on_info(chunk, packet)