module DirectchatWire
Constants
- PREFIX
Public Instance Methods
Source
# File lib/directchat/wire.rb, line 37 def decode(line) cleaned = sanitize_line(line) return nil unless cleaned match = cleaned.match(/\A#{PREFIX}\s+(\w+)\s+(.+)\z/) return nil unless match type = match[1].downcase payload = JSON.parse(match[2]) frame = { type: type.to_sym } case type when "session" frame[:session] = symbolize_session(payload["session"] || payload[:session]) when "relay" frame[:session_id] = payload["session_id"] || payload[:session_id] frame[:from] = payload["from"] || payload[:from] frame[:text] = payload["text"] || payload[:text] when "stop" frame[:session_id] = payload["session_id"] || payload[:session_id] when "hello" frame[:bot] = payload["bot"] || payload[:bot] else return nil end frame rescue JSON::ParserError nil end
Source
# File lib/directchat/wire.rb, line 33 def encode(type, payload) "#{PREFIX} #{type.to_s.upcase} #{JSON.generate(payload)}" end
Source
# File lib/directchat/wire.rb, line 29 def encode_hello(bot:) encode(:hello, { bot: bot.to_s }) end
Source
# File lib/directchat/wire.rb, line 21 def encode_relay(session_id:, from:, text:) encode(:relay, { session_id: session_id.to_s, from: from.to_s, text: text.to_s }) end
Source
# File lib/directchat/wire.rb, line 16 def encode_session(session:) payload = { session: stringify_session(session) } encode(:session, payload) end
Source
# File lib/directchat/wire.rb, line 25 def encode_stop(session_id:) encode(:stop, { session_id: session_id.to_s }) end
Source
# File lib/directchat/wire.rb, line 66 def sanitize_line(text) DirectchatSessionCodec.sanitize_line(text) end
Source
# File lib/directchat/wire.rb, line 70 def stringify_session(session) DirectchatSessionCodec.stringify(session) end
Source
# File lib/directchat/wire.rb, line 74 def symbolize_session(session) DirectchatSessionCodec.symbolize(session) end