Class: JSONSocket::Server
Instance Method Summary
collapse
#encode_json, #parse_json
Constructor Details
#initialize(host: "127.0.0.1", port: 1234, delimeter: "#", unix_socket: nil, oj_options: nil) ⇒ Server
Returns a new instance of Server.
27
28
29
30
31
32
33
34
35
36
|
# File 'lib/json-socket.rb', line 27
def initialize(host: "127.0.0.1", port: 1234, delimeter: "#", unix_socket: nil, oj_options: nil)
Oj.default_options = oj_options if oj_options
@delimeter = delimeter
@server = if unix_socket
FileUtils.rm_f(unix_socket)
Async::IO::Endpoint.unix(unix_socket)
else
Async::IO::Endpoint.tcp(host, port)
end
end
|
Instance Method Details
#listen ⇒ Object
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/json-socket.rb', line 38
def listen
Async do |task|
begin
@server.accept do |client|
client = client.set_encoding 'UTF-8'
message_length = client.gets(@delimeter).to_i
unless message_length == 0
on_message(parse_json(client.read(message_length)), client)
else
client.close
end
end
rescue Exception => e
on_error e
end
end
end
|
#on_error(e) ⇒ Object
57
58
59
|
# File 'lib/json-socket.rb', line 57
def on_error e
STDERR.puts e.message
end
|
#on_message(message, client) ⇒ Object
61
62
63
64
65
66
67
68
69
70
71
72
73
|
# File 'lib/json-socket.rb', line 61
def on_message(message, client)
puts "Default on_message method - please override like this: \n" \
" \n" \
"class CustomJSONSocketServer < JSONSocket::Server \n" \
" \n" \
" def on_message(message, client)\n" \
" puts message \n" \
" self.send_end_message([1,2,3], client)\n" \
" end \n" \
" \n" \
"end \n"
client.close
end
|
#send_end_message(message, client) ⇒ Object
75
76
77
78
79
80
|
# File 'lib/json-socket.rb', line 75
def send_end_message(message, client)
client.set_encoding 'UTF-8'
strigified = encode_json(message)
client << "#{strigified.bytesize}#{@delimeter}#{strigified}"
client.close
end
|