murmur 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.
@@ -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