messQ 0.0.1
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.
- data/.gitignore +19 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README +31 -0
- data/Rakefile +1 -0
- data/bin/messQ +45 -0
- data/lib/messQ.rb +34 -0
- data/lib/messQ/agent.rb +28 -0
- data/lib/messQ/server.rb +25 -0
- data/lib/messQ/session.rb +22 -0
- data/lib/messQ/verbose.rb +11 -0
- data/lib/messQ/version.rb +3 -0
- data/messQ.gemspec +24 -0
- metadata +75 -0
data/.gitignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -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
|
+
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "bundler/gem_tasks"
|
data/bin/messQ
ADDED
@@ -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
|
data/lib/messQ.rb
ADDED
@@ -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
|
data/lib/messQ/agent.rb
ADDED
@@ -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
|
data/lib/messQ/server.rb
ADDED
@@ -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
|
data/messQ.gemspec
ADDED
@@ -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: []
|