local_message 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -12,27 +12,18 @@ class LocalMessageClient
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def register
|
15
|
-
|
15
|
+
send_message("@register #{username} #{listen_port}")
|
16
16
|
end
|
17
17
|
|
18
|
-
def
|
18
|
+
def send_message(message)
|
19
19
|
socket = TCPSocket.open(server, port)
|
20
|
-
sleep 1
|
21
20
|
socket.write(message)
|
22
21
|
socket.close
|
23
|
-
#puts "Waiting for server acknowledgement..."
|
24
|
-
#listen
|
25
|
-
end
|
26
|
-
|
27
|
-
def new_listen_port
|
28
|
-
@listen_port = Random.rand(1000..30_000)
|
29
22
|
end
|
30
23
|
|
31
24
|
def listen
|
32
|
-
#puts "Listening on #{listen_port}..."
|
33
25
|
server = TCPServer.open(listen_port)
|
34
26
|
client = server.accept
|
35
|
-
#puts "Connection open, waiting for message..."
|
36
27
|
message = client.read
|
37
28
|
client.close
|
38
29
|
server.close
|
@@ -7,53 +7,38 @@ class LocalMessageRouter
|
|
7
7
|
def initialize(listening_port)
|
8
8
|
@port = listening_port
|
9
9
|
@registered_users = {}
|
10
|
-
@open_ports = []
|
11
10
|
end
|
12
11
|
|
13
12
|
def start
|
14
13
|
server = TCPServer.open(port)
|
15
14
|
begin
|
16
15
|
|
17
|
-
puts "Listening on port: #{port}..."
|
18
16
|
Thread.start(server.accept) do |client|
|
19
17
|
fam, port, hostname, ip = client.peeraddr
|
20
|
-
puts "Connection initiated from #{hostname}:#{port}"
|
21
18
|
message = client.read
|
22
|
-
|
23
|
-
puts handle(message, port, ip)
|
24
|
-
puts "Closing connection from #{hostname}:#{port}"
|
19
|
+
handle(message, port, ip)
|
25
20
|
client.close
|
26
21
|
end
|
27
22
|
|
28
23
|
end while true
|
29
24
|
end
|
30
25
|
|
26
|
+
private
|
27
|
+
|
31
28
|
def handle(message, port, ip)
|
32
29
|
if register?(message)
|
33
30
|
username, port = strip_username_port(message)
|
34
|
-
register(username, port
|
35
|
-
|
36
|
-
puts "Registered #{username} => #{ip}:#{port}"
|
37
|
-
else
|
38
|
-
puts "Couldn't register #{username}"
|
39
|
-
end
|
40
|
-
#send_register_ack(ip, port, username)
|
31
|
+
register(username, port, ip)
|
32
|
+
|
41
33
|
elsif has_recipient?(message)
|
42
34
|
recipient = strip_recipient(message)
|
43
35
|
sender = username_by_ip(ip)
|
44
36
|
forward_message(sender, recipient, message)
|
45
|
-
if registered?(recipient)
|
46
|
-
#send_ack(ip, port, recipient, message)
|
47
|
-
else
|
48
|
-
#send_ack(ip, port, recipient, "No such recipient")
|
49
|
-
end
|
50
|
-
else
|
51
|
-
"Message not handled"
|
52
37
|
end
|
53
38
|
end
|
54
39
|
|
55
40
|
def register?(message)
|
56
|
-
return true if
|
41
|
+
return true if /^@register/.match(message)
|
57
42
|
false
|
58
43
|
end
|
59
44
|
|
@@ -65,16 +50,6 @@ class LocalMessageRouter
|
|
65
50
|
registered_users[username] = LocalMessageUser.new(port, ip)
|
66
51
|
end
|
67
52
|
|
68
|
-
def send_register_ack(hostname, port, username)
|
69
|
-
if registered?(username)
|
70
|
-
send(hostname, port, "Successfully registered #{username}")
|
71
|
-
"Successfully registered #{username}"
|
72
|
-
else
|
73
|
-
send(hostname, port, "Failed to register #{username}")
|
74
|
-
"Failed to register #{username}"
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
53
|
def username_by_ip(ip)
|
79
54
|
registered_users.values.each do |user|
|
80
55
|
return registered_users.key(user) if user.hostname == ip
|
@@ -83,7 +58,7 @@ class LocalMessageRouter
|
|
83
58
|
|
84
59
|
def strip_username_port(message)
|
85
60
|
/@register\s+(.+)\s+(\d+)/.match(message)
|
86
|
-
[$1, $2]
|
61
|
+
[$1, $2.to_i]
|
87
62
|
end
|
88
63
|
|
89
64
|
def has_recipient?(message)
|
@@ -96,35 +71,23 @@ class LocalMessageRouter
|
|
96
71
|
end
|
97
72
|
|
98
73
|
def strip_message(message)
|
99
|
-
message.split
|
74
|
+
message.split(" ", 2)[1]
|
100
75
|
end
|
101
76
|
|
102
77
|
def forward_message(sender, recipient, message)
|
103
78
|
if registered?(recipient)
|
104
79
|
info = registered_users[recipient]
|
105
80
|
message_with_sender = "@#{sender} #{strip_message(message)}"
|
106
|
-
|
107
|
-
send(info.hostname, info.port, message_with_sender)
|
81
|
+
send_message(info.hostname, info.port, message_with_sender)
|
108
82
|
end
|
109
83
|
end
|
110
84
|
|
111
|
-
def
|
112
|
-
open_ports.include?(port)
|
113
|
-
end
|
114
|
-
|
115
|
-
def send(hostname, port, message)
|
85
|
+
def send_message(hostname, port, message)
|
116
86
|
Thread.new do
|
117
|
-
puts "Sending #{message} to #{hostname}:#{port}"
|
118
87
|
socket = TCPSocket.open(hostname, port)
|
119
|
-
sleep 1
|
120
88
|
socket.write(message)
|
121
89
|
socket.close
|
122
90
|
end
|
123
91
|
end
|
124
92
|
|
125
|
-
def send_ack(hostname, port, recipient, message)
|
126
|
-
send(hostname, port, "Sent #{message} to #{recipient}")
|
127
|
-
"Sent #{message} to #{hostname}:#{port}"
|
128
|
-
end
|
129
|
-
|
130
93
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: local_message
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-11-
|
12
|
+
date: 2012-11-28 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: Routes messages across a local network.
|
15
15
|
email: elliot@sandbochs.com
|
@@ -21,7 +21,7 @@ files:
|
|
21
21
|
- lib/local_message/local_message_router.rb
|
22
22
|
- lib/local_message/local_message_client.rb
|
23
23
|
- lib/local_message/local_message_user.rb
|
24
|
-
homepage: http://www.github.com/sandbochs
|
24
|
+
homepage: http://www.github.com/sandbochs/local_message
|
25
25
|
licenses: []
|
26
26
|
post_install_message:
|
27
27
|
rdoc_options: []
|