Age | Commit message (Collapse) | Author |
|
As the ChannelListener feature was implemented via a Singleton class,
there was only ever a single, global instance keeping track of listeners.
If however there were multiple VServers running from within a single
Mumble server instance, all of them would use the same ChannelListener
instance. That allowed for user-IDs to collide across different VServers
when it came to listener-management.
Thus listeners could appear/disappear seemingly at random whenever a
user on a different VServer (with the same session ID on that server)
changed their listeners.
Fixes #4366
|
|
|
|
Defining a macro (global namespace) named "g" as a shortcut for
accessing the Global struct never was a good idea. In order to avoid the
problems this created (you must never name a variable "g" or include
Global.h before a header that may have such a variable), the macro was
removed and was instead replaced with a static function Global::get()
that returns a reference to the Global struct.
Just as with the old g macro, the existence of the respective pointer is
not explicitly checked before dereferencing. It is assumed that
everywhere where it is used, the Global struct has already been created.
|
|
This was done by running scripts/updateLicenseHeaders.py and then
manually editing the LICENSE file.
|
|
|
|
With this feature the ChannelListeners of the local user can optionally
been shown in the TalkingUI (and thereby the channels they are in as
well). This is kinda similar to the option that allows you to always see
the local user in the UI.
|
|
As ChannelListeners are only synchronised with the server once
msgServerSync has been received, there is still a racecondition for them
even though we only save them if the ServerSync has happened yet.
The connection could be terminated before the answer of the server for
the request to add the respective listeners reaches the client. In that
case the listeners would be erased by the call to
ChannelListener::saveToDB().
Thus this commit introduces yet another flag indicating whether the
listeners have synchronised with the server yet.
|
|
This implements #3319 by allowing users to "listen" to a channel they
have not joined. Doing so will place a "listener proxy" (in other
software this is sometimes known as a "phantom") in that channel which
will look like a normal user except that it'll have the same name as the
user listening to that channel and an ear-icon instead of the normal
avatar-icon. It will also always show a muted-icon next to it.
If a listener proxy is in a channel, the server will route all audio
packets from that channel to the user the proxy belongs to (as if that
user was in the channel). Note though that the opposite of this is not
true: The users in the channel will not hear audio from the listening
user unless that user decides to join the channel.
Furthermore it is possible to set a local volume adjustment for each
individual proxy that will be applied to all audio that is received
through it.
|