This repository was archived by the owner on Nov 8, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 7
Expand file tree
/
Copy pathserver.rb
More file actions
78 lines (61 loc) · 1.81 KB
/
server.rb
File metadata and controls
78 lines (61 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# frozen_string_literals: true
require 'socket'
require 'dredd_hooks/server/buffer'
require 'dredd_hooks/server/events_handler'
module DreddHooks
# The hooks worker server
class Server
attr_reader :buffer, :error, :events_handler, :out, :server
private :buffer, :error, :events_handler, :out, :server
HOST = '127.0.0.1'
PORT = 61321
MESSAGE_DELIMITER = "\n"
def initialize(host=HOST, port=PORT, error=STDERR, out=STDOUT)
@error = error
@out = out
@server = TCPServer.new(host, port)
@buffer = Buffer.new(MESSAGE_DELIMITER)
@events_handler = EventsHandler.new
end
def run
disable_buffering(out)
loop do
client = server.accept
out.puts 'Dredd connected to Ruby Dredd hooks worker'
buffer.flush!
while (data = client.recv(10))
buffer << data
if buffer.any_message?
messages = buffer.unshift_messages
messages.each do |message|
response = process_message(message)
client.puts response + MESSAGE_DELIMITER
end
end
end
client.close
end
end
private
# Write to a file (e.g. STDOUT) without delay
#
# See https://stackoverflow.com/q/23001033
# and http://ruby-doc.org/core-2.3.1/IO.html#method-i-sync-3D
def disable_buffering(file)
file.sync = true
end
def process_message(message)
event = message['event']
transaction = message['data']
transaction = events_handler.handle(event, transaction)
response(message['uuid'], event, transaction)
end
def response(message_uuid, event, transaction)
{
uuid: message_uuid,
event: event,
data: transaction,
}.to_json
end
end
end