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.
- checksums.yaml +7 -0
- data/Rakefile +8 -0
- data/channels/README +0 -0
- data/lib/LibFIPC.rb +118 -0
- data/test/testLibFIPC.rb +53 -0
- metadata +52 -0
    
        checksums.yaml
    ADDED
    
    | @@ -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
         | 
    
        data/Rakefile
    ADDED
    
    
    
        data/channels/README
    ADDED
    
    | 
            File without changes
         | 
    
        data/lib/LibFIPC.rb
    ADDED
    
    | @@ -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
         | 
    
        data/test/testLibFIPC.rb
    ADDED
    
    | @@ -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: []
         |