messQ 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,19 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
18
+ *.log
19
+ *pidfile
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in messQ.gemspec
4
+ gemspec
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2013 AbhishekKr
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README ADDED
@@ -0,0 +1,31 @@
1
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3
+ _ _ __ ___ ___ _____
4
+ ||\/|| //_ //_ //_ __ // // messQ v0.0.1
5
+ || || \\_ __// __// //__//\\_ simplistic socket mess Queue
6
+
7
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
8
+ ~=ABK=~ http://github.com/abhishekkr
9
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
10
+
11
+ a very simplistic socket-based message enQueue/deQueue facility
12
+
13
+ |||||||||||||| HOW TO USE |||||||||||||||||
14
+
15
+ messq --start
16
+ messq --stop
17
+ messq -enq element || messq --enqueue element || MessQ::Agent.enqueue(elelemnt)
18
+ messq -deq || messq --dequeue || MessQ::Agent.dequeue
19
+
20
+ [] To enqueue a message
21
+ open a connection to it (default at port 8888)
22
+ and send as 'enq MESSAGE'
23
+ it will return the enqueued message, if wanna check back
24
+
25
+ [] To dequeue a message
26
+ open a connection to it (default at port 8888)
27
+ and send as 'deq'
28
+ it will return the dequeued message
29
+
30
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
31
+ ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,45 @@
1
+ #!/usr/bin/env ruby
2
+ $LOAD_PATH.unshift File.dirname(__FILE__) + '/../lib'
3
+
4
+ require 'arg0'
5
+ require 'messQ'
6
+
7
+ que = Arg0::Console.value_for(['--enqueue', '-enq'])
8
+ que.each do |q|
9
+ MessQ::Agent.enqueue q
10
+ end
11
+
12
+ if Arg0::Console.switch?('--start')
13
+ MessQ.messQ_server
14
+ puts "MessQ server started."
15
+ elsif Arg0::Console.switch?('--stop')
16
+ MessQ::Server.stop
17
+ puts "MessQ server stopped."
18
+ elsif Arg0::Console.switch?(['--dequeue', '-deq'])
19
+ puts "Value dequeued: #{MessQ::Agent.dequeue}"
20
+ elsif Arg0::Console.switch?(['-h', '--help']) || que.empty?
21
+ puts <<-HELP
22
+ MessQ v0.0.1
23
+ a very simplistic queue server and agent
24
+ MessQ can be started in daemon mode as
25
+ $ messQ --start
26
+ Can be stopped in following way
27
+ $ messQ --stop
28
+ Enqueue & Dequeue at Console happens like
29
+ $ messQ -enq <element>
30
+ $ messQ --enqueue <element>
31
+ $ messQ -deq
32
+ $ messQ --dequeue
33
+ Enqueue & Dequeue from Ruby Code requires
34
+ requie 'messQ'
35
+ # if required configure
36
+ MessQ.host = <host IP>
37
+ MessQ.port = <port for MessQ Server>
38
+ # mandatory
39
+ MessQ::Agent.enqueue(<element>) # returns enqueued <element>
40
+ MessQ::Agent.dequeue # returns dequeued element
41
+ This message comes on
42
+ $ messq -h
43
+ $ messq --help
44
+ HELP
45
+ end
@@ -0,0 +1,34 @@
1
+ # messQ
2
+
3
+ messq_libs = File.join(File.dirname(File.expand_path __FILE__), 'messQ', '*.rb')
4
+ Dir.glob(messq_libs).each do |lib|
5
+ require lib
6
+ end
7
+
8
+ require 'socket'
9
+
10
+ module MessQ
11
+
12
+ class << self
13
+ attr_accessor :host, :port, :q
14
+ attr_accessor :pid, :pidfile, :logfile
15
+ end
16
+ @host ||= '0.0.0.0'
17
+ @port ||= 5566
18
+ @q ||= []
19
+ @pidfile = File.join(File.dirname(__FILE__), '..', 'bin', 'pidfile')
20
+ @logfile = File.join(File.dirname(__FILE__), '..', 'bin', 'messQ.log')
21
+
22
+ def self.messQ_server
23
+ begin
24
+ Process.daemon(true)
25
+ @pid = Process.fork do
26
+ MessQ::Server.start
27
+ end
28
+ File.open(@pidfile, 'w'){|fyl| fyl.puts @pid}
29
+ MessQ::Verbose.logme "MessQ server PID:#{@pid}"
30
+ rescue
31
+ MessQ::Verbose.logme "messQ failed."
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ # MessQ::Agent
2
+
3
+ module MessQ
4
+ module Agent
5
+
6
+ def self.enqueue(msg)
7
+ client "enq #{msg}"
8
+ end
9
+
10
+ def self.dequeue
11
+ client 'deq'
12
+ end
13
+
14
+ def self.client(cmd)
15
+ begin
16
+ TCPSocket.open(MessQ.host, MessQ.port) do |socket|
17
+ socket.puts cmd
18
+ server_says = socket.read
19
+ socket.flush
20
+ socket.close
21
+ return server_says
22
+ end
23
+ rescue
24
+ MessQ::Verbose.logme 'Can not connect to MessQ.'
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,25 @@
1
+ # MessQ::Server
2
+
3
+ module MessQ
4
+ module Server
5
+
6
+ def self.start
7
+ begin
8
+ webserver = TCPServer.new(MessQ.host, MessQ.port)
9
+ MessQ::Verbose.logme "messQ has been started at #{MessQ.host}:#{MessQ.port}"
10
+ while (session = webserver.accept)
11
+ MessQ::Session.handler session
12
+ end
13
+ rescue
14
+ MessQ::Verbose.logme "messQ failed starting at #{MessQ.host}:#{MessQ.port}."
15
+ end
16
+ end
17
+
18
+ def self.stop
19
+ return unless File.exists? MessQ.pidfile
20
+ MessQ.pid = File.read(MessQ.pidfile).strip.to_i
21
+ MessQ::Verbose.logme "Killing PID: #{MessQ.pid}"
22
+ Process.kill(15, MessQ.pid)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,22 @@
1
+ # MessQ::Session
2
+
3
+ module MessQ
4
+ module Session
5
+
6
+ def self.handler(session)
7
+ request = session.gets
8
+ Thread.start(session, request) do |session, request|
9
+ if request.match(/[eE][nN][qQ]\ /)
10
+ MessQ.q << request.gsub(/[eE][nN][qQ]\ /, '').chomp
11
+ MessQ::Verbose.logme "added to messQ: #{MessQ.q[-1]}"
12
+ session.print MessQ.q[-1]
13
+ elsif request.match(/[dD][eE][qQ]/)
14
+ deq = MessQ.q.shift
15
+ MessQ::Verbose.logme "removed from messQ: #{deq}"
16
+ session.print deq
17
+ end
18
+ session.close
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,11 @@
1
+ # MessQ::Verbose
2
+
3
+ module MessQ
4
+ module Verbose
5
+
6
+ def self.logme(message)
7
+ puts "sockQ> #{message}"
8
+ File.open(MessQ.logfile, 'a'){|fyl| fyl.puts message}
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module MessQ
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,24 @@
1
+ # -*- encoding: utf-8 -*-
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'messQ/version'
5
+
6
+ Gem::Specification.new do |gem|
7
+ gem.name = "messQ"
8
+ gem.version = MessQ::VERSION
9
+ gem.authors = ["AbhishekKr"]
10
+ gem.email = ["abhikumar163@gmail.com"]
11
+ gem.description = %q{a very simplistic queue server and agent}
12
+ gem.summary = %q{a very simplistic socket-based message enQueue/deQueue facility}
13
+ gem.homepage = "https://github.com/abhishekkr/messQ"
14
+
15
+ gem.files = `git ls-files`.split($/)
16
+ gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
+ gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
+ gem.require_paths = ["lib"]
19
+
20
+
21
+ gem.executables = %w( messQ )
22
+
23
+ gem.add_runtime_dependency 'arg0', '>= 0.0.2'
24
+ end
metadata ADDED
@@ -0,0 +1,75 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: messQ
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - AbhishekKr
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: arg0
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 0.0.2
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 0.0.2
30
+ description: a very simplistic queue server and agent
31
+ email:
32
+ - abhikumar163@gmail.com
33
+ executables:
34
+ - messQ
35
+ extensions: []
36
+ extra_rdoc_files: []
37
+ files:
38
+ - .gitignore
39
+ - Gemfile
40
+ - LICENSE.txt
41
+ - README
42
+ - Rakefile
43
+ - bin/messQ
44
+ - lib/messQ.rb
45
+ - lib/messQ/agent.rb
46
+ - lib/messQ/server.rb
47
+ - lib/messQ/session.rb
48
+ - lib/messQ/verbose.rb
49
+ - lib/messQ/version.rb
50
+ - messQ.gemspec
51
+ homepage: https://github.com/abhishekkr/messQ
52
+ licenses: []
53
+ post_install_message:
54
+ rdoc_options: []
55
+ require_paths:
56
+ - lib
57
+ required_ruby_version: !ruby/object:Gem::Requirement
58
+ none: false
59
+ requirements:
60
+ - - ! '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ required_rubygems_version: !ruby/object:Gem::Requirement
64
+ none: false
65
+ requirements:
66
+ - - ! '>='
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ requirements: []
70
+ rubyforge_project:
71
+ rubygems_version: 1.8.24
72
+ signing_key:
73
+ specification_version: 3
74
+ summary: a very simplistic socket-based message enQueue/deQueue facility
75
+ test_files: []