packet_io 0.4.0.rc3 → 0.4.0.rc4
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.
- data/{README.rdoc → README.markdown} +38 -9
- data/lib/packet_io/test/mock_server.rb +10 -6
- data/lib/packet_io.rb +1 -1
- metadata +4 -4
@@ -1,26 +1,55 @@
|
|
1
|
-
|
1
|
+
# packet_io
|
2
|
+
|
2
3
|
by Levin Alexander
|
3
4
|
http://levinalex.net/
|
4
5
|
|
5
|
-
|
6
|
+
## DESCRIPTION:
|
6
7
|
|
7
|
-
|
8
|
+
packet_io is a small library that makes it easy
|
8
9
|
to define packet based protocols over a serial link (RS232) in a
|
9
10
|
declarative fashion.
|
10
11
|
|
11
|
-
|
12
|
+
## SYNOPSIS:
|
13
|
+
|
14
|
+
require 'packet_io'
|
15
|
+
|
16
|
+
# define your protocol handler, inheriting from PacketIO::Base
|
17
|
+
#
|
18
|
+
# override `read` and `write` to implement your functionality
|
19
|
+
#
|
20
|
+
# this is a simple protocol handler that does nothing.
|
21
|
+
#
|
22
|
+
# see {PacketIO::LineBasedProtocol} for another trivial example
|
23
|
+
#
|
24
|
+
class MyNOPProtocol < PacketIO::Base
|
25
|
+
def receive(packet)
|
26
|
+
forward(packet)
|
27
|
+
end
|
28
|
+
|
29
|
+
def write(data)
|
30
|
+
super(packet)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# use your protocol. It is possible to stack multiple protocol
|
35
|
+
# layers on top of each other
|
36
|
+
#
|
37
|
+
stream = PacketIO.IOListener(File.open("/dev/ttyUSB0"))
|
38
|
+
line_based = PacketIO::LineBasedProtocol.new(stream)
|
39
|
+
my_protocol = MyNOPProtocol.new(line_based)
|
40
|
+
|
12
41
|
|
13
|
-
|
42
|
+
stream.run!
|
14
43
|
|
15
|
-
|
44
|
+
## INSTALL:
|
16
45
|
|
17
|
-
|
46
|
+
gem install packet_io
|
18
47
|
|
19
|
-
|
48
|
+
## LICENSE:
|
20
49
|
|
21
50
|
(The MIT License)
|
22
51
|
|
23
|
-
Copyright (c) 2006-
|
52
|
+
Copyright (c) 2006-2011 Levin Alexander
|
24
53
|
|
25
54
|
Permission is hereby granted, free of charge, to any person obtaining
|
26
55
|
a copy of this software and associated documentation files (the
|
@@ -1,4 +1,7 @@
|
|
1
1
|
module PacketIO::Test
|
2
|
+
|
3
|
+
# a threaded reader that simulates a remote server to help testing io_listener
|
4
|
+
#
|
2
5
|
class MockServer
|
3
6
|
|
4
7
|
# create a new server and wire it up with a bidirectional pipe
|
@@ -13,14 +16,15 @@ module PacketIO::Test
|
|
13
16
|
|
14
17
|
def initialize(read, write)
|
15
18
|
@read, @write = read, write
|
16
|
-
@
|
17
|
-
|
19
|
+
@write_queue = Queue.new
|
20
|
+
|
21
|
+
@writer = Thread.new do
|
18
22
|
parse_commands
|
19
23
|
end
|
20
24
|
end
|
21
25
|
|
22
26
|
def write(string)
|
23
|
-
@
|
27
|
+
@write_queue.push [:write, string]
|
24
28
|
self
|
25
29
|
end
|
26
30
|
|
@@ -29,12 +33,12 @@ module PacketIO::Test
|
|
29
33
|
end
|
30
34
|
|
31
35
|
def wait(seconds = 0.02)
|
32
|
-
@
|
36
|
+
@write_queue.push [:wait, seconds]
|
33
37
|
self
|
34
38
|
end
|
35
39
|
|
36
40
|
def eof
|
37
|
-
@
|
41
|
+
@write_queue.push [:close]
|
38
42
|
end
|
39
43
|
|
40
44
|
|
@@ -42,7 +46,7 @@ module PacketIO::Test
|
|
42
46
|
|
43
47
|
def parse_commands
|
44
48
|
loop do
|
45
|
-
action, data = @
|
49
|
+
action, data = @write_queue.pop
|
46
50
|
|
47
51
|
case action
|
48
52
|
when :close
|
data/lib/packet_io.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: packet_io
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 977940589
|
5
5
|
prerelease: true
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 4
|
9
9
|
- 0
|
10
|
-
-
|
11
|
-
version: 0.4.0.
|
10
|
+
- rc4
|
11
|
+
version: 0.4.0.rc4
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Levin Alexander
|
@@ -96,7 +96,7 @@ files:
|
|
96
96
|
- .gitignore
|
97
97
|
- History.txt
|
98
98
|
- LICENSE
|
99
|
-
- README.
|
99
|
+
- README.markdown
|
100
100
|
- Rakefile
|
101
101
|
- lib/packet_io.rb
|
102
102
|
- lib/packet_io/io_listener.rb
|