xmpp_server 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,5 @@
1
+ *.gem
2
+ *.swp
3
+ .bundle
4
+ Gemfile.lock
5
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in xmpp_server.gemspec
4
+ gemspec
@@ -0,0 +1,54 @@
1
+ ## xmpp_server
2
+ 给xmpp 服务器push 消息的中转站
3
+
4
+ ###实例
5
+ * 如何启动服务
6
+ ```shell
7
+ ./bin/xmppserver
8
+ ```
9
+ rake启动
10
+ ```ruby
11
+ rake xmppserver:start
12
+ ```
13
+
14
+ * 客户端code
15
+ ```ruby
16
+ require 'drb/drb'
17
+ SERVER_URI="druby://localhost:8787"
18
+ DRb.start_service
19
+ xmppserver = DRbObject.new_with_uri(SERVER_URI)
20
+ 3.times do |i|
21
+ xmppserver.push("tester002", "testdddeeee....")
22
+ sleep 1
23
+ end
24
+ ```
25
+
26
+ * 修改服务器地址,用户名和密码
27
+ ```ruby
28
+ XmppServer::Config.config do |s|
29
+ s.username = "zhangsan"
30
+ s.password = "xxxxxx"
31
+ s.server = "test.com"
32
+ end
33
+ ```
34
+ Rails中,可以新建`config/initializers/xmppserver.rb`
35
+
36
+ * Rails项目中的使用
37
+ 新建`config/initializers/xmppserver.rb`文件
38
+ ```ruby
39
+ require 'drb/drb'
40
+ SERVER_URI="druby://localhost:8787"
41
+ DRb.start_service
42
+ XMPPSERVER = DRbObject.new_with_uri(SERVER_URI)
43
+ XmppServer::Config.config do |s|
44
+ s.username = "zhangsan"
45
+ s.password = "xxxxxx"
46
+ s.server = "test.com"
47
+ end
48
+ ```
49
+
50
+ ###需要实现
51
+ * 一个将配置文件复制到initializers目录的generator
52
+ * 启动xmpp server 中转站的 task[start, stop , restart]
53
+ * 需要充分的测试
54
+
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require "bundler/gem_tasks"
3
+
4
+ desc "Run all tests by default"
5
+ task :default do
6
+ system("rspec spec --color")
7
+ end
8
+
9
+ namespace :xmppserver do
10
+ desc "启动xmppserver-drb服务器"
11
+ task :start do
12
+ puts "start xmpp drb server"
13
+ path = File.expand_path("../bin",__FILE__)
14
+ file_path = File.join(path, "xmppserver")
15
+ system("#{file_path}")
16
+ end
17
+ end
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ XMPP_PATH = File.expand_path("../../lib", __FILE__)
4
+ $:.unshift(XMPP_PATH)
5
+
6
+ require "drb/drb"
7
+ require "xmpp_server"
8
+
9
+ DRB_URI = "druby://localhost:8787"
10
+ client = XmppServer::Client.get_default_client
11
+
12
+ consumer = Thread.new {
13
+ loop {
14
+ m = XmppServer::QUEUE.pop
15
+ client.push m
16
+ }
17
+ }
18
+
19
+ FRONT_OBJECT = XmppServer::Pusher.new
20
+ DRb.start_service(DRB_URI, FRONT_OBJECT)
21
+ DRb.thread.join
@@ -0,0 +1,13 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ namespace :xmppserver do
4
+
5
+ desc "启动xmppserver-drb服务器"
6
+ task :start do
7
+ puts "start xmpp drb server"
8
+ path = File.expand_path("../../../bin",__FILE__)
9
+ file_path = File.join(path, "xmppserver")
10
+ system("#{file_path}")
11
+ end
12
+
13
+ end
@@ -0,0 +1,51 @@
1
+ require "xmpp_server/version"
2
+ require "xmpp4r/client"
3
+ require "xmpp_server/config"
4
+ require "xmpp_server/queue"
5
+ require "xmpp_server/push"
6
+
7
+ require "xmpp_server/railtie" if defined?(Rails)
8
+
9
+ module XmppServer
10
+
11
+
12
+ def self.config
13
+ yield self
14
+ end
15
+
16
+ #xmpp client to push connect and push message to xmpp server
17
+ class Client
18
+ attr_accessor :jid, :password
19
+
20
+ def initialize(jid, password)
21
+ @jid = jid
22
+ @password = password
23
+ @client = Jabber::Client.new @jid
24
+ end
25
+
26
+ def connect
27
+ @client.connect
28
+ end
29
+
30
+ def auth
31
+ @client.auth @password
32
+ end
33
+
34
+ def push(m)
35
+ to = "#{m.username}@#{XmppServer::Config.server}/nickname"
36
+ msg = Jabber::Message::new(to, m.content).set_type(:normal).set_id(1)
37
+ @client.send msg
38
+ end
39
+
40
+ class << self
41
+ def get_default_client
42
+ jid = "#{XmppServer::Config.username}@#{XmppServer::Config::server}/pusher"
43
+ password = XmppServer::Config.password
44
+ client = XmppServer::Client.new(jid, password)
45
+ client.connect
46
+ client.auth
47
+ client
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module XmppServer
4
+
5
+ class Config
6
+ @@server = "weishanke.com"
7
+ @@username = "tester001"
8
+ @@password = "123456"
9
+
10
+ class << self
11
+ def server; @@server ;end
12
+ def username; @@username; end
13
+ def password; @@password; end
14
+
15
+ def server=(server)
16
+ @@server = server
17
+ end
18
+
19
+ def username=(username)
20
+ @@username = username
21
+ end
22
+
23
+ def password=(password)
24
+ @@password = password
25
+ end
26
+
27
+ def config
28
+ yield self
29
+ end
30
+ end
31
+ end
32
+
33
+
34
+ end
@@ -0,0 +1,12 @@
1
+ # -*- encoding: utf-8 -*-
2
+ module XmppServer
3
+
4
+ #drb interface
5
+ class Pusher
6
+ def push(username, content)
7
+ m = XmppServer::M.new(username, content)
8
+ XmppServer::QUEUE.push m
9
+ end
10
+ end
11
+
12
+ end
@@ -0,0 +1,16 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ module XmppServer
4
+
5
+ QUEUE = Queue.new
6
+
7
+ #message node
8
+ class M
9
+ attr_accessor :username, :content
10
+
11
+ def initialize(username, content)
12
+ @username = username
13
+ @content = content
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,11 @@
1
+ require 'xmpp_server'
2
+ require 'rails'
3
+
4
+ module XmppServer
5
+ class Railtie < Rails::Railtie
6
+
7
+ rake_tasks do
8
+ load File.join(File.expand_path("../../tasks", __FILE__), "xmpp_server.rake")
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module XmppServer
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,21 @@
1
+ require 'spec_helper'
2
+
3
+ describe "XmppServer.push" do
4
+
5
+ it "should push message to queue" do
6
+ XmppServer::Pusher.new().push("tester1", "hello world")
7
+ m = XmppServer::QUEUE.pop
8
+ m.username.should == "tester1"
9
+ m.content.should == "hello world"
10
+ end
11
+
12
+ it "push data to queue" do
13
+ 3.times do |i|
14
+ m = XmppServer::M.new("tester002", "hello #{i}")
15
+ XmppServer::QUEUE.push(m)
16
+ sleep 1
17
+ p XmppServer::QUEUE
18
+ end
19
+ end
20
+
21
+ end
@@ -0,0 +1,13 @@
1
+ require 'rubygems'
2
+ require 'bundler/setup'
3
+
4
+ Bundler.require(:default, :development)
5
+
6
+ RSpec.configure do |config|
7
+ config.mock_with :rspec
8
+
9
+ config.before(:each) do
10
+ #pending
11
+ end
12
+
13
+ end
@@ -0,0 +1,22 @@
1
+ require 'spec_helper'
2
+
3
+ describe "push messgae to client" do
4
+
5
+ it "should push message" do
6
+ jid = "#{XmppServer::Config.username}@#{XmppServer::Config::server}/pusher"
7
+ jid.should == "tester001@weishanke.com/pusher"
8
+ password = XmppServer::Config.password
9
+ client = XmppServer::Client.new(jid, password)
10
+ m = XmppServer::M.new("tester002", "hello,man")
11
+ client.connect
12
+ client.auth
13
+ client.push m
14
+ end
15
+
16
+ it "default should could push message" do
17
+ m = XmppServer::M.new("tester002", "hello, world. default push")
18
+ client = XmppServer::Client.get_default_client
19
+ client.push m
20
+ end
21
+
22
+ end
@@ -0,0 +1,10 @@
1
+ require 'drb/drb'
2
+
3
+ SERVER_URI="druby://localhost:8787"
4
+ DRb.start_service
5
+ xmppserver = DRbObject.new_with_uri(SERVER_URI)
6
+ 3.times do |i|
7
+ xmppserver.push("tester002", "testdddeeee....")
8
+ puts i
9
+ sleep 1
10
+ end
@@ -0,0 +1,17 @@
1
+ require "spec_helper"
2
+ require 'drb/drb'
3
+
4
+ describe "xmppserver bin" do
5
+
6
+ it "should push message to drb server" do
7
+ SERVER_URI="druby://localhost:8787"
8
+ DRb.start_service
9
+ xmppserver = DRbObject.new_with_uri(SERVER_URI)
10
+ 3.times do |i|
11
+ xmppserver.push("tester002", "testdddeeee....")
12
+ puts i
13
+ sleep 1
14
+ end
15
+ end
16
+
17
+ end
@@ -0,0 +1,27 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "xmpp_server/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "xmpp_server"
7
+ s.version = XmppServer::VERSION
8
+ s.authors = ["chucai"]
9
+ s.email = ["hexudong08@gmail.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Xmpp Server For Push Message}
12
+ s.description = %q{A queue for push message to xmpp server}
13
+
14
+ s.rubyforge_project = "xmpp_server"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ # specify any dependencies here; for example:
22
+
23
+ s.add_dependency "xmpp4r"
24
+
25
+ s.add_development_dependency "rspec"
26
+ # s.add_runtime_dependency "rest-client"
27
+ end
metadata ADDED
@@ -0,0 +1,86 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: xmpp_server
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - chucai
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-09-27 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: xmpp4r
16
+ requirement: &88489240 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *88489240
25
+ - !ruby/object:Gem::Dependency
26
+ name: rspec
27
+ requirement: &88489030 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *88489030
36
+ description: A queue for push message to xmpp server
37
+ email:
38
+ - hexudong08@gmail.com
39
+ executables:
40
+ - xmppserver
41
+ extensions: []
42
+ extra_rdoc_files: []
43
+ files:
44
+ - .gitignore
45
+ - Gemfile
46
+ - README.md
47
+ - Rakefile
48
+ - bin/xmppserver
49
+ - lib/tasks/xmpp_server.rake
50
+ - lib/xmpp_server.rb
51
+ - lib/xmpp_server/config.rb
52
+ - lib/xmpp_server/push.rb
53
+ - lib/xmpp_server/queue.rb
54
+ - lib/xmpp_server/railtie.rb
55
+ - lib/xmpp_server/version.rb
56
+ - spec/push_spec.rb
57
+ - spec/spec_helper.rb
58
+ - spec/xmpp_spec.rb
59
+ - spec/xmppserver.rb
60
+ - spec/xmppserver_spec.rb
61
+ - xmpp_server.gemspec
62
+ homepage: ''
63
+ licenses: []
64
+ post_install_message:
65
+ rdoc_options: []
66
+ require_paths:
67
+ - lib
68
+ required_ruby_version: !ruby/object:Gem::Requirement
69
+ none: false
70
+ requirements:
71
+ - - ! '>='
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ required_rubygems_version: !ruby/object:Gem::Requirement
75
+ none: false
76
+ requirements:
77
+ - - ! '>='
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ requirements: []
81
+ rubyforge_project: xmpp_server
82
+ rubygems_version: 1.8.17
83
+ signing_key:
84
+ specification_version: 3
85
+ summary: Xmpp Server For Push Message
86
+ test_files: []