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.



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

#listenObject



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'
      # https://stackoverflow.com/questions/25303943/how-to-send-a-utf-8-encoded-strings-via-tcpsocket-in-ruby/25305256
      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