LibFIPC 0.0.2

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.
@@ -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: []