LibFIPC 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d5d5589adce72d95d4578491414b2974c62d873f
4
+ data.tar.gz: d509ad774d32033699af499cf6f207cdf65b7e0c
5
+ SHA512:
6
+ metadata.gz: 747d0c419cca25c75aff5261189d4ddb034b1f3c6326dce6c8d02812ea674a4b3bca00786cc9b347510e74a3ab1d4fde9c267802e3c5f0e23ba9f397e136260f
7
+ data.tar.gz: 06eef8c6f2e226d4c6ef6c7256e98afab55c94c6dbf455dcd5f35e3eb1defd82d333e53f4e8ea44e4c8d342e096376291b6dc1b0b67b280b2b365260aa21d929
@@ -0,0 +1,8 @@
1
+ require 'rake/testtask'
2
+
3
+ Rake::TestTask.new do |t|
4
+ t.libs << 'test'
5
+ end
6
+
7
+ desc "Run tests"
8
+ task :default => :test
File without changes
@@ -0,0 +1,118 @@
1
+ #push
2
+ #pop
3
+ #reset
4
+
5
+ # File Format:
6
+ # [next_data_ptr:64it] | [data_len:64bit][data] | [data_len:64bit][data]
7
+ # [00000000]
8
+
9
+ class FIPC
10
+
11
+
12
+
13
+ def self.sendMsg(channel,msg)
14
+
15
+ self.push(channel,msg)
16
+
17
+ end
18
+
19
+ def self.receiveMsg(channel)
20
+
21
+ self.pop(channel)
22
+
23
+ end
24
+
25
+ def self.push(channel,msg)
26
+
27
+ fileName = channel+".dat"
28
+
29
+ if File::exists?(fileName)
30
+
31
+ file = File.new( fileName, "ab+")
32
+ file.flock(File::LOCK_EX)
33
+ file << [msg.length].pack("Q!")
34
+ file << msg
35
+ file.close()
36
+
37
+ else
38
+
39
+ file = File.new( fileName, "wb+")
40
+ file.flock(File::LOCK_EX)
41
+ ptr=8
42
+ file << [ptr].pack("Q!")
43
+ file << [msg.length].pack("Q!")
44
+ file << msg
45
+ file.close()
46
+
47
+
48
+ end
49
+
50
+ return true
51
+
52
+
53
+ end
54
+
55
+ def self.pop(channel)
56
+
57
+ fileName = channel+".dat"
58
+
59
+ if File::exists?(fileName)
60
+
61
+ file = File.new( fileName, "rb+")
62
+ file.flock(File::LOCK_EX)
63
+ ptrStr = file.read(8)
64
+
65
+ ptr = ptrStr.unpack("Q!")[0]
66
+ file.seek(ptr)
67
+
68
+ dataLenStr = file.read(8)
69
+ dataLen = dataLenStr.unpack("Q!")[0]
70
+
71
+ data = file.read(dataLen)
72
+
73
+
74
+ ptr = file.pos
75
+
76
+ file.seek(0)
77
+
78
+ file << [ptr].pack("Q!")
79
+
80
+
81
+ if ptr == file.size
82
+ file.close
83
+ self.reset(channel)
84
+
85
+ else
86
+ file.close
87
+ end
88
+
89
+ return data
90
+
91
+
92
+
93
+ else
94
+
95
+ return false
96
+ end
97
+
98
+ end
99
+
100
+ def self.reset(channel)
101
+
102
+ fileName = channel+".dat"
103
+
104
+
105
+ if File::exists?(fileName) and File.writable?(fileName)
106
+
107
+ File.delete(fileName)
108
+ return true
109
+
110
+ else
111
+
112
+ return false
113
+
114
+ end
115
+ end
116
+
117
+
118
+ end
@@ -0,0 +1,53 @@
1
+ require "LibFIPC"
2
+
3
+ require 'test/unit'
4
+
5
+
6
+
7
+ class TestLibConfig < Test::Unit::TestCase
8
+
9
+ self.test_order = :defined
10
+
11
+ def test_sendMsg()
12
+
13
+ p "sending.."
14
+ ret = FIPC.sendMsg("channels/1","hello_1")
15
+ assert_equal(true,ret)
16
+ ret = FIPC.sendMsg("channels/1","hello_2")
17
+ assert_equal(true,ret)
18
+ ret = FIPC.sendMsg("channels/1","hello_3")
19
+ assert_equal(true,ret)
20
+
21
+
22
+ end
23
+
24
+ def test_receiveMsg()
25
+
26
+ p "receiving..."
27
+ ret=FIPC.receiveMsg("channels/1")
28
+ p ret
29
+ assert_equal("hello_1",ret)
30
+ ret=FIPC.receiveMsg("channels/1")
31
+ p ret
32
+ assert_equal("hello_2",ret)
33
+ ret=FIPC.receiveMsg("channels/1")
34
+ p ret
35
+ assert_equal("hello_3",ret)
36
+ #assert arr.length>0
37
+
38
+ end
39
+
40
+
41
+ def test_reset()
42
+
43
+ ret = FIPC.sendMsg("channels/x","hello_1")
44
+ ret = FIPC.reset("channels/x")
45
+ assert_equal(true,ret)
46
+
47
+ end
48
+
49
+
50
+
51
+
52
+
53
+ end
metadata ADDED
@@ -0,0 +1,52 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: LibFIPC
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ platform: ruby
6
+ authors:
7
+ - Avinash DSilva
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-04-14 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Ruby doesn't have good support for message passing between processes.
14
+ One option is to make use of client-server setup by using sockets which is too much
15
+ for simple message passing and other would be to use a message passing server like
16
+ ZeroMQ.We decided to make FIPC to allow simpler form of IPC between 2 or more ruby
17
+ processes
18
+ email: avinash.roshan.dsilva@gmail.com
19
+ executables: []
20
+ extensions: []
21
+ extra_rdoc_files: []
22
+ files:
23
+ - Rakefile
24
+ - channels/README
25
+ - lib/LibFIPC.rb
26
+ - test/testLibFIPC.rb
27
+ homepage: http://rubygems.org/gems/FIPC
28
+ licenses:
29
+ - MIT
30
+ metadata: {}
31
+ post_install_message:
32
+ rdoc_options: []
33
+ require_paths:
34
+ - lib
35
+ required_ruby_version: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - ">="
38
+ - !ruby/object:Gem::Version
39
+ version: '0'
40
+ required_rubygems_version: !ruby/object:Gem::Requirement
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project:
47
+ rubygems_version: 2.5.1
48
+ signing_key:
49
+ specification_version: 4
50
+ summary: FIPC(File based Interprocess communication) is used for asynchronous exchange
51
+ of messages between processes
52
+ test_files: []