class FIPC

File Format:

next_data_ptr:64it

| [data_len:64bit] | [data_len:64bit]

00000000

Public Class Methods

pop(channel) click to toggle source
# File lib/LibFIPC.rb, line 55
def self.pop(channel)

        fileName = channel+".dat"

        if File::exists?(fileName)

                file = File.new( fileName, "rb+")
                file.flock(File::LOCK_EX)
                ptrStr = file.read(8)

                ptr = ptrStr.unpack("Q!")[0]
                file.seek(ptr)

                dataLenStr = file.read(8)
                dataLen = dataLenStr.unpack("Q!")[0]

                data = file.read(dataLen)


                ptr = file.pos

                file.seek(0)

                file << [ptr].pack("Q!")


                if ptr == file.size
                        file.close
                        self.reset(channel)

                else
                        file.close
                end

                return data



         else

              return false
         end

end
push(channel,msg) click to toggle source
# File lib/LibFIPC.rb, line 25
def self.push(channel,msg)

        fileName = channel+".dat"

        if File::exists?(fileName)

                file = File.new( fileName, "ab+")
                file.flock(File::LOCK_EX)
                file << [msg.length].pack("Q!")
                file << msg
                file.close()

         else

                file = File.new( fileName, "wb+")
                file.flock(File::LOCK_EX)
                ptr=8
                file << [ptr].pack("Q!")
                file << [msg.length].pack("Q!")
                file << msg
                file.close()


        end   

        return true


end
receiveMsg(channel) click to toggle source
# File lib/LibFIPC.rb, line 19
def self.receiveMsg(channel)

        self.pop(channel)

end
reset(channel) click to toggle source
# File lib/LibFIPC.rb, line 100
def self.reset(channel)

        fileName = channel+".dat"


        if File::exists?(fileName) and  File.writable?(fileName)  

                File.delete(fileName)
                return true

        else

                return false

        end
end
sendMsg(channel,msg) click to toggle source
# File lib/LibFIPC.rb, line 13
def self.sendMsg(channel,msg)

        self.push(channel,msg)

end