murmur 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cf54fdf3d0238dca3cc88e4ffd0663fc464c7e5c
4
+ data.tar.gz: 153bd7feb7f55fa3f32b4ab1da9539156b97dc53
5
+ SHA512:
6
+ metadata.gz: d9b2c535c51452eac44fa62e3d4ed26158b39ca68d1b558163fac66c282ae362755c62f8c6c7fdbd21174494611adebe69c5b789691ffecaf3c81164d6b0bc58
7
+ data.tar.gz: f47502072b62d787fc8664f8132e2636c5c0e171423f06197353d3994d49f2ed1418e4897c15060de451e144026ee2b2267af4c73a35bb805356db107fb4484b
@@ -0,0 +1,4 @@
1
+ Gemfile.lock
2
+ pkg
3
+ .bundle
4
+ vendor/ruby
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source "https://rubygems.org"
2
+
3
+ gemspec
@@ -0,0 +1,62 @@
1
+ # Murmur
2
+
3
+ A ruby client for controlling and querying the Mumble server (Murmur)
4
+
5
+ ## Installation
6
+
7
+ Install it from RubyGems:
8
+
9
+ ```
10
+ gem install murmur
11
+ ```
12
+
13
+ Or add it to a Gemfile:
14
+
15
+ ```
16
+ gem 'murmur'
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ Configuration:
22
+
23
+ ```
24
+ require 'murmur'
25
+
26
+ Murmur.client(
27
+ :host => '127.0.0.1', # The host of the Murmur server.
28
+ :port => '6502', # The port of the Murmur server.
29
+ :glacier_user => '', # The user (if using Glacier2)
30
+ :glacier_pass => '', # The password (if using Glacier2)
31
+ :ice_secret => '') # The Ice secret.
32
+ ```
33
+
34
+ Examples:
35
+
36
+ ```
37
+ # Get a server
38
+ Murmur.server 1
39
+
40
+ # Create a new server
41
+ Murmur.new_server(:registername => "Server name")
42
+
43
+ # Get the channels of a server
44
+ server = Murmur.server 1
45
+ server.channels
46
+
47
+ # Get a specific channel of a server
48
+ server = Murmur.server 1
49
+ server.channel 1
50
+
51
+ # Change the name of a channel
52
+ server = Murmur.server 1
53
+ channel = server.channel 1
54
+ channel.name = "New name!"
55
+
56
+ # Get the clients of a server
57
+ server = Murmur.server 1
58
+ users = server.users
59
+ ```
60
+
61
+ The #raw function on Murmur::API objects will return the raw Murmur object, allowing calling of unimplemented functions.
62
+
@@ -0,0 +1 @@
1
+ require "bundler/gem_tasks"
@@ -0,0 +1,22 @@
1
+ require 'murmur/version'
2
+ require 'murmur/ice_interface'
3
+ require 'murmur/server'
4
+ require 'murmur/channel'
5
+ require 'murmur/user'
6
+
7
+ module Murmur
8
+
9
+ def self.client(options={})
10
+ @client = Murmur::API::Meta.new(options)
11
+ end
12
+
13
+ def self.method_missing(method, *args, &block)
14
+ return super unless @client.respond_to?(method)
15
+ @client.send(method, *args, &block)
16
+ end
17
+
18
+ def self.respond_to?(method)
19
+ return @client.respond_to?(method) || super
20
+ end
21
+
22
+ end
@@ -0,0 +1,87 @@
1
+ module Murmur
2
+ module API
3
+ class Channel
4
+
5
+ def initialize(host, meta, server, channel)
6
+ @host = host
7
+ @meta = meta
8
+ @server = server
9
+ @channel = channel
10
+ end
11
+
12
+ def id
13
+ @channel.id
14
+ end
15
+
16
+ def name
17
+ @channel.name
18
+ end
19
+
20
+ def name=(name)
21
+ @channel.name = name
22
+ update
23
+ end
24
+
25
+ def server
26
+ @server
27
+ end
28
+
29
+ def parent
30
+ @server.channel(@channel.parent)
31
+ end
32
+
33
+ def parent=(id)
34
+ @channel.parent = id
35
+ update
36
+ end
37
+
38
+ def links
39
+ @channel.links
40
+ end
41
+
42
+ def temporary?
43
+ @channel.temporary
44
+ end
45
+ alias :temporary :temporary?
46
+
47
+ def temporary=(temp)
48
+ @channel.temporary = temp
49
+ update
50
+ end
51
+
52
+ def description
53
+ @channel.description
54
+ end
55
+
56
+ def description=(description)
57
+ @channel.description = description
58
+ update
59
+ end
60
+
61
+ def position
62
+ @channel.position
63
+ end
64
+
65
+ def position=(id)
66
+ @channel.position = id
67
+ update
68
+ end
69
+
70
+ private
71
+
72
+ def update
73
+ channel_state = @server.getChannelState(id)
74
+
75
+ ["name", "description", "temporary", "position"].each do |func|
76
+ channel_state.send("#{func}=", send(func))
77
+ end
78
+
79
+ # Set 'parent' normally.
80
+ channel_state.parent = parent.id
81
+
82
+ @server.setChannelState(channel_state)
83
+ end
84
+
85
+ end
86
+ end
87
+ end
@@ -0,0 +1,94 @@
1
+ require 'Glacier2'
2
+ require File.join(File.expand_path(File.dirname(__FILE__)), "../../vendor/ice/Murmur.rb")
3
+ require 'murmur/server'
4
+
5
+ module Murmur
6
+ module API
7
+ class Meta
8
+
9
+ def initialize(options = {})
10
+ # Default options
11
+ options = {:host => '127.0.0.1', :port => 6502}.merge(options)
12
+
13
+ if options[:ice_secret]
14
+ props = ::Ice::createProperties
15
+ props.setProperty "Ice.ImplicitContext", "Shared"
16
+ props.setProperty "Ice.Default.EncodingVersion", "1.0"
17
+
18
+ ice_init_data = ::Ice::InitializationData.new
19
+ ice_init_data.properties = props
20
+
21
+ ice_context = ::Ice::initialize ice_init_data
22
+ ice_context.getImplicitContext.put("secret", options[:ice_secret])
23
+ else
24
+ props = ::Ice::createProperties
25
+ props.setProperty "Ice.Default.EncodingVersion", "1.0"
26
+
27
+ ice_init_data = ::Ice::InitializationData.new
28
+ ice_init_data.properties = props
29
+
30
+ ice_context = ::Ice::initialize ice_init_data
31
+ end
32
+
33
+ if options[:glacier_host]
34
+ prx = ice_context.stringToProxy("Glacier2/router:tcp -h #{options[:glacier_host]} -p #{options[:glacier_port]}")
35
+ @router = ::Glacier2::RouterPrx::uncheckedCast(prx).ice_router(nil)
36
+ @session = @router.createSession(options[:glacier_user], options[:glacier_pass])
37
+ end
38
+
39
+ conn = "tcp -h #{options[:host]} -p #{options[:port]}"
40
+ proxy = ice_context.stringToProxy("Meta:#{conn}")
41
+ @meta = add_proxy_router(Murmur::MetaPrx::checkedCast(proxy))
42
+ raise "Invalid proxy" unless @meta
43
+
44
+ @servers = {}
45
+ end
46
+
47
+ def destroy
48
+ begin
49
+ @router.destroySession @session unless @router.nil?
50
+ rescue ::Ice::ConnectionLostException
51
+ end
52
+
53
+ nil
54
+ end
55
+
56
+ def add_proxy_router(prx)
57
+ @router ? prx.ice_router(@router) : prx
58
+ end
59
+
60
+ def server(id)
61
+ @servers[id] ||= Server.new(self, @meta, {:id => id})
62
+ end
63
+
64
+ def uncache_server(id)
65
+ @servers[id] = nil
66
+ end
67
+
68
+ def servers
69
+ @meta.send(:getAllServers).collect do |server|
70
+ server = add_proxy_router server
71
+ @servers[server.id] ||= Server.new(self, @meta, {:interface => server})
72
+ end
73
+ end
74
+
75
+ def new_server_interface
76
+ server = @meta.newServer
77
+ end
78
+
79
+ def new_server(options = {})
80
+ Server.new(self, @meta, options)
81
+ end
82
+
83
+ def validate
84
+ @meta.getVersion
85
+ true
86
+ end
87
+
88
+ def meta
89
+ @meta
90
+ end
91
+
92
+ end
93
+ end
94
+ end
@@ -0,0 +1,111 @@
1
+ require 'murmur/channel'
2
+ require 'murmur/user'
3
+
4
+ module Murmur
5
+ module API
6
+ class Server
7
+
8
+ def initialize(host, meta, options)
9
+ @host = host
10
+ @meta = meta
11
+
12
+ if !options[:id] and !options[:interface]
13
+ options.delete :id
14
+ options.delete :interface
15
+
16
+ server = @host.new_server_interface
17
+
18
+ @interface = host.add_proxy_router(server)
19
+
20
+ options.each do |key, value|
21
+ setConf(key, value)
22
+ end
23
+ end
24
+
25
+ @interface = @interface || options[:interface] || begin
26
+ server = @meta.getServer(options[:id])
27
+ raise ::Murmur::Ice::InvalidServerException if server.nil?
28
+ host.add_proxy_router(server)
29
+ end
30
+
31
+ @channels = {}
32
+ @users = {}
33
+ end
34
+
35
+ def id
36
+ @interface.id
37
+ end
38
+
39
+ def running?
40
+ @interface.isRunning
41
+ end
42
+
43
+ def channel(id)
44
+ channels
45
+
46
+ @channels[id]
47
+ end
48
+
49
+ def channels
50
+ @channels = {}
51
+ @interface.getChannels.each do |_, channel|
52
+ @channels[channel.id] = Channel.new(@host, @meta, self, channel)
53
+ end
54
+ @channels
55
+ end
56
+
57
+ def users
58
+ @users = {}
59
+ @interface.getUsers.each do |_, user|
60
+ @users[user.session] = User.new(@host, @meta, self, user)
61
+ end
62
+ @users
63
+ end
64
+
65
+ def user(session)
66
+ users
67
+
68
+ @users[:session]
69
+ end
70
+
71
+ def config
72
+ @config = @meta.getDefaultConf.merge(@interface.getAllConf)
73
+ end
74
+
75
+ def destroy!
76
+ @interface.stop if running?
77
+ @host.uncache_server id
78
+ @interface.delete
79
+ end
80
+ alias :delete :destroy!
81
+
82
+ def restart!
83
+ @interface.stop if running?
84
+ @interface.start
85
+ end
86
+
87
+ def [](key)
88
+ key = key.to_s
89
+ config[key]
90
+ end
91
+
92
+ def []=(key, val)
93
+ key - key.to_s
94
+ @interface.setConf(key, val.to_s)
95
+ @config = nil
96
+ end
97
+
98
+ def setConf(key, val)
99
+ key = key.to_s
100
+ self[key] = val
101
+ end
102
+
103
+ def method_missing(method, *args)
104
+ method = method.to_s
105
+ method.gsub!(/_([a-z])/) { $1.upcase }
106
+ ret = @interface.send method, *args
107
+ end
108
+
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,119 @@
1
+ module Murmur
2
+ module API
3
+ class User
4
+
5
+ def initialize(host, meta, server, user)
6
+ @host = host
7
+ @meta = meta
8
+ @server = server
9
+ @user = user
10
+ end
11
+
12
+ def session
13
+ @user.session
14
+ end
15
+ alias :id :session
16
+
17
+ def userid
18
+ @user.userid
19
+ end
20
+
21
+ def muted?
22
+ @user.mute
23
+ end
24
+
25
+ def deafened?
26
+ @user.deaf
27
+ end
28
+
29
+ def suppressed?
30
+ @user.suppress
31
+ end
32
+
33
+ def priorityspeaker?
34
+ @user.prioritySpeaker
35
+ end
36
+
37
+ def clientmuted?
38
+ @user.selfMute
39
+ end
40
+
41
+ def clientdeafened?
42
+ @user.selfDeaf
43
+ end
44
+
45
+ def recording?
46
+ @user.recording
47
+ end
48
+
49
+ def channel
50
+ @server.channel @user.channel
51
+ end
52
+
53
+ def server
54
+ @server
55
+ end
56
+
57
+ def name
58
+ @user.name
59
+ end
60
+
61
+ def seconds_connected
62
+ @user.onlinesecs
63
+ end
64
+
65
+ def seconds_idle
66
+ @user.idlesecs
67
+ end
68
+
69
+ def bytes_per_sec
70
+ @user.bytespersec
71
+ end
72
+
73
+ def version
74
+ @user.version
75
+ end
76
+
77
+ def release
78
+ @user.release
79
+ end
80
+
81
+ def os
82
+ @user.os
83
+ end
84
+
85
+ def os_version
86
+ @user.osversion
87
+ end
88
+
89
+ def identity
90
+ @user.identity
91
+ end
92
+
93
+ def context
94
+ @user.context
95
+ end
96
+
97
+ def comment
98
+ @user.comment
99
+ end
100
+
101
+ def tcponly?
102
+ @user.tcponly
103
+ end
104
+
105
+ def ping
106
+ {:udp => @user.udpPing, :tcp => @user.tcpPing}
107
+ end
108
+
109
+ def udpPing
110
+ ping[:udp]
111
+ end
112
+
113
+ def tcpPing
114
+ ping[:tcp]
115
+ end
116
+
117
+ end
118
+ end
119
+ end