Class: JSONSocket::Server

Inherits:
Object
  • Object
show all
Includes:
JsonEncodeDecode
Defined in:
lib/json-socket.rb

Instance Method Summary collapse

Methods included from JsonEncodeDecode

#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.



26
27
28
29
30
31
32
33
34
35
36
# File 'lib/json-socket.rb', line 26

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
  @stop = false
  @server = if unix_socket
              FileUtils.rm_f(unix_socket)
              UNIXServer.new unix_socket
            else
              TCPServer.new host, port
            end
end

Instance Method Details

#listenObject



42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/json-socket.rb', line 42

def listen
  loop do
    Thread.start(@server.accept) do |client|
      begin
        # https://stackoverflow.com/questions/25303943/how-to-send-a-utf-8-encoded-strings-via-tcpsocket-in-ruby/25305256
        client.set_encoding 'UTF-8'
        message_length = client.gets(@delimeter).to_i
        on_message(parse_json(client.read(message_length)), client)
      rescue Exception => e
        STDERR.puts e.message
      end
    end
    break if @stop
  end
end

#on_message(message, client) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/json-socket.rb', line 58

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



72
73
74
75
76
77
# File 'lib/json-socket.rb', line 72

def send_end_message(message, client)
  client.set_encoding 'UTF-8'
  strigified = encode_json(message)
  client << "#{strigified.bytesize}#{@delimeter}#{strigified}"
  client.close
end

#stopObject



38
39
40
# File 'lib/json-socket.rb', line 38

def stop
  @stop = true
end