Display chat messages in server log
This commit is contained in:
parent
fc48a53bbd
commit
acba9e7a5d
|
@ -5,6 +5,8 @@ require_relative 'models/server_info'
|
||||||
require_relative 'models/server_settings'
|
require_relative 'models/server_settings'
|
||||||
require_relative 'models/game_info'
|
require_relative 'models/game_info'
|
||||||
require_relative 'models/start_info'
|
require_relative 'models/start_info'
|
||||||
|
require_relative 'models/cl_say'
|
||||||
|
require_relative 'models/chat_message'
|
||||||
|
|
||||||
class GameServer
|
class GameServer
|
||||||
attr_accessor :pred_game_tick, :ack_game_tick, :map
|
attr_accessor :pred_game_tick, :ack_game_tick, :map
|
||||||
|
@ -57,6 +59,13 @@ class GameServer
|
||||||
@server.send_ready_to_enter(packet.client)
|
@server.send_ready_to_enter(packet.client)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def on_say(chunk, packet)
|
||||||
|
say = ClSay.new(chunk.data[1..])
|
||||||
|
author = packet.client.player
|
||||||
|
msg = ChatMesage.new(say.to_h.merge(client_id: author.id, author:))
|
||||||
|
puts msg.to_s
|
||||||
|
end
|
||||||
|
|
||||||
def on_enter_game(_chunk, packet)
|
def on_enter_game(_chunk, packet)
|
||||||
# vanilla server responds to enter game with two packets
|
# vanilla server responds to enter game with two packets
|
||||||
# first:
|
# first:
|
||||||
|
|
52
lib/models/cl_say.rb
Normal file
52
lib/models/cl_say.rb
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative '../packer'
|
||||||
|
|
||||||
|
##
|
||||||
|
# ClSay
|
||||||
|
#
|
||||||
|
# Client -> Server
|
||||||
|
class ClSay
|
||||||
|
attr_accessor :mode, :target_id, :message
|
||||||
|
|
||||||
|
def initialize(hash_or_raw)
|
||||||
|
if hash_or_raw.instance_of?(Hash)
|
||||||
|
init_hash(hash_or_raw)
|
||||||
|
else
|
||||||
|
init_raw(hash_or_raw)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def init_raw(data)
|
||||||
|
u = Unpacker.new(data)
|
||||||
|
@mode = u.get_int
|
||||||
|
@target_id = u.get_int
|
||||||
|
@message = u.get_string
|
||||||
|
end
|
||||||
|
|
||||||
|
def init_hash(attr)
|
||||||
|
@mode = attr[:mode] || 0
|
||||||
|
@target_id = attr[:target_id] || 0
|
||||||
|
@message = attr[:message] || 0
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_h
|
||||||
|
{
|
||||||
|
mode: @mode,
|
||||||
|
target_id: @target_id,
|
||||||
|
message: @message
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
# basically to_network
|
||||||
|
# int array the client sends to the server
|
||||||
|
def to_a
|
||||||
|
Packer.pack_int(@mode) +
|
||||||
|
Packer.pack_int(@target_id) +
|
||||||
|
Packer.pack_str(@message)
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_s
|
||||||
|
to_h
|
||||||
|
end
|
||||||
|
end
|
48
lib/models/template.rb
Normal file
48
lib/models/template.rb
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
require_relative '../packer'
|
||||||
|
|
||||||
|
##
|
||||||
|
# SamplePacket
|
||||||
|
#
|
||||||
|
# Client -> Server
|
||||||
|
class SamplePacket
|
||||||
|
attr_accessor :foo, :bar
|
||||||
|
|
||||||
|
def initialize(hash_or_raw)
|
||||||
|
if hash_or_raw.instance_of?(Hash)
|
||||||
|
init_hash(hash_or_raw)
|
||||||
|
else
|
||||||
|
init_raw(hash_or_raw)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def init_raw(data)
|
||||||
|
u = Unpacker.new(data)
|
||||||
|
@foo = u.get_int
|
||||||
|
@bar = u.get_string
|
||||||
|
end
|
||||||
|
|
||||||
|
def init_hash(attr)
|
||||||
|
@foo = attr[:foo] || 0
|
||||||
|
@bar = attr[:bar] || 'sample'
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_h
|
||||||
|
{
|
||||||
|
foo: @foo,
|
||||||
|
bar: @bar
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
# basically to_network
|
||||||
|
# int array the client sends to the server
|
||||||
|
def to_a
|
||||||
|
Packer.pack_int(@foo) +
|
||||||
|
Packer.pack_str(@bar)
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_s
|
||||||
|
to_h
|
||||||
|
end
|
||||||
|
end
|
|
@ -104,6 +104,7 @@ class TeeworldsServer
|
||||||
puts "got game chunk: #{chunk}"
|
puts "got game chunk: #{chunk}"
|
||||||
case chunk.msg
|
case chunk.msg
|
||||||
when NETMSGTYPE_CL_STARTINFO then @game_server.on_start_info(chunk, packet)
|
when NETMSGTYPE_CL_STARTINFO then @game_server.on_start_info(chunk, packet)
|
||||||
|
when NETMSGTYPE_CL_SAY then @game_server.on_say(chunk, packet)
|
||||||
else
|
else
|
||||||
puts "Unsupported game msg: #{chunk.msg}"
|
puts "Unsupported game msg: #{chunk.msg}"
|
||||||
exit(1)
|
exit(1)
|
||||||
|
@ -315,6 +316,10 @@ class TeeworldsServer
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def get_player_by_id(id)
|
||||||
|
@clients[id]&.player
|
||||||
|
end
|
||||||
|
|
||||||
def tick
|
def tick
|
||||||
unless @clients.empty?
|
unless @clients.empty?
|
||||||
now = Time.now
|
now = Time.now
|
||||||
|
|
Loading…
Reference in a new issue