local_message 0.0.1 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,27 +12,18 @@ class LocalMessageClient
12
12
  end
13
13
 
14
14
  def register
15
- send("@register #{username} #{listen_port}")
15
+ send_message("@register #{username} #{listen_port}")
16
16
  end
17
17
 
18
- def send(message)
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
- puts "Message from #{hostname}:#{port}: #{message}"
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.to_i, ip)
35
- if registered?(username)
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 /@register/.match(message)
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[1..-1].join(" ")
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
- puts "Sending message to #{recipient}, host: #{info.hostname} port: #{info.port}"
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 port_open?(port)
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.1
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-06 00:00:00.000000000 Z
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: []