Skip to content

Commit

Permalink
Merge pull request #363 from Mindgamesnl/feature/proxy-update-volume-…
Browse files Browse the repository at this point in the history
…clientstate

WIP: Update the clientstate from the proxy on volume change
  • Loading branch information
Mindgamesnl authored Nov 25, 2023
2 parents bfba011 + 9bbef4b commit 8ac7866
Show file tree
Hide file tree
Showing 5 changed files with 31 additions and 9 deletions.
Original file line number Diff line number Diff line change
@@ -1,17 +1,30 @@
package com.craftmend.openaudiomc.generic.networking.handlers;

import com.craftmend.openaudiomc.OpenAudioMc;
import com.craftmend.openaudiomc.generic.networking.abstracts.PayloadHandler;
import com.craftmend.openaudiomc.generic.client.objects.ClientConnection;
import com.craftmend.openaudiomc.generic.networking.interfaces.Authenticatable;
import com.craftmend.openaudiomc.generic.networking.payloads.in.ClientChangedVolumePayload;
import com.craftmend.openaudiomc.generic.node.packets.ClientUpdateStatePacket;
import com.craftmend.openaudiomc.generic.platform.Platform;
import com.craftmend.openaudiomc.generic.proxy.interfaces.UserHooks;

public class ClientChangedVolumeHandler extends PayloadHandler<ClientChangedVolumePayload> {

@Override
public void onReceive(ClientChangedVolumePayload payload) {
Authenticatable authenticatable = findSession(payload.getClient());
if (authenticatable instanceof ClientConnection) {
((ClientConnection) authenticatable).getSession().setVolume(payload.getVolume());
ClientConnection connection = ((ClientConnection) authenticatable);
connection.getSession().setVolume(payload.getVolume());

// are we running in spigot? if not then we should forward this as a state change
if (OpenAudioMc.getInstance().getPlatform() != Platform.SPIGOT) {
UserHooks hooks = OpenAudioMc.getInstance().getInvoker().getUserHooks();
hooks.sendPacket(connection.getUser(),
ClientUpdateStatePacket.of(connection)
);
}
} else {
// you don't even have volume
authenticatable.kickConnection();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ private void handleState(ClientConnection cc, ClientOpenedRtcPayload payload) {

private void broadcastRtcUpdate(User player, boolean isConnected, boolean isMicOn, String streamKey, ClientConnection cc) {
// am I a proxy thingy? then send it to my other thingy
ClientUpdateStatePacket clientUpdateRtcStatePacket = new ClientUpdateStatePacket(player.getUniqueId(), streamKey, isConnected, isMicOn, cc.getAuth().getStaticToken());
ClientUpdateStatePacket clientUpdateRtcStatePacket = new ClientUpdateStatePacket(player.getUniqueId(), streamKey, isConnected, isMicOn, cc.getAuth().getStaticToken(), cc.getVolume());
// sends an update to the server, or nothing if its just spigot
OpenAudioMc.resolveDependency(UserHooks.class).sendPacket(player, clientUpdateRtcStatePacket);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.craftmend.openaudiomc.generic.node.packets;

import com.craftmend.openaudiomc.OpenAudioMc;
import com.craftmend.openaudiomc.generic.client.objects.ClientConnection;
import com.craftmend.openaudiomc.generic.proxy.messages.PacketWriter;
import com.craftmend.openaudiomc.generic.proxy.messages.StandardPacket;
import lombok.AllArgsConstructor;
Expand All @@ -21,6 +22,7 @@ public class ClientUpdateStatePacket extends StandardPacket {
private boolean enabled;
private boolean microphoneEnabled;
private String explodedToken;
private int volume;

public void handle(DataInputStream dataInputStream) throws IOException {
ClientUpdateStatePacket self = OpenAudioMc.getGson().fromJson(dataInputStream.readUTF(), ClientUpdateStatePacket.class);
Expand All @@ -29,6 +31,18 @@ public void handle(DataInputStream dataInputStream) throws IOException {
this.enabled = self.isEnabled();
this.microphoneEnabled = self.isMicrophoneEnabled();
this.explodedToken = self.getExplodedToken();
this.volume = self.getVolume();
}

public static ClientUpdateStatePacket of(ClientConnection cc) {
return new ClientUpdateStatePacket(
cc.getOwner().getUniqueId(),
cc.getRtcSessionManager().getStreamKey(),
cc.getSession().isConnectedToRtc(),
cc.getRtcSessionManager().isMicrophoneEnabled(),
cc.getAuth().getStaticToken(),
cc.getSession().getVolume()
);
}

public PacketWriter write() throws IOException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,13 +60,7 @@ public void onServerSwitch(User user, ProxyNode from, ProxyNode to) {

if (OpenAudioMc.getService(OpenaudioAccountService.class).is(CraftmendTag.VOICECHAT)) {
this.userHooks.sendPacket(user,
new ClientUpdateStatePacket(
user.getUniqueId(),
connection.getRtcSessionManager().getStreamKey(),
connection.getSession().isConnectedToRtc(),
connection.getRtcSessionManager().isMicrophoneEnabled(),
connection.getAuth().getStaticToken()
)
ClientUpdateStatePacket.of(connection)
);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ public void onStateSync(User user, ClientUpdateStatePacket packet) {
connection.getRtcSessionManager().setMicrophoneEnabled(packet.isMicrophoneEnabled());
connection.getRtcSessionManager().setStreamKey(packet.getStreamId());
connection.getSession().setConnectedToRtc(packet.isEnabled());
connection.getSession().setVolume(packet.getVolume());

connection.setAuth(new ClientAuth(connection, packet.getExplodedToken(), packet.getExplodedToken()));

Expand Down

0 comments on commit 8ac7866

Please sign in to comment.