Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/quite/humla.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Comminos <andrew@comminos.com>2016-04-28 03:46:39 +0300
committerAndrew Comminos <andrew@comminos.com>2016-04-28 03:46:39 +0300
commit04c75c4ed139f02c985eaf29ab544c05c2229533 (patch)
tree9e47ada7ca4effc6e0d4b607a2e971a3c43cfc6f
parent607255d01c1f50268cb44308c7c05a196212e759 (diff)
Add channel linking functionality.
-rw-r--r--src/main/java/com/morlunk/jumble/IJumbleService.java16
-rw-r--r--src/main/java/com/morlunk/jumble/JumbleService.java25
-rw-r--r--src/main/java/com/morlunk/jumble/protocol/ModelHandler.java18
3 files changed, 54 insertions, 5 deletions
diff --git a/src/main/java/com/morlunk/jumble/IJumbleService.java b/src/main/java/com/morlunk/jumble/IJumbleService.java
index 6e149d0..b7be8ed 100644
--- a/src/main/java/com/morlunk/jumble/IJumbleService.java
+++ b/src/main/java/com/morlunk/jumble/IJumbleService.java
@@ -222,4 +222,20 @@ public interface IJumbleService {
void registerObserver(IJumbleObserver observer);
void unregisterObserver(IJumbleObserver observer);
+
+ /**
+ * Links the provided two channels together.
+ */
+ void linkChannels(IChannel channelA, IChannel channelB);
+
+ /**
+ * Unlinks the two provided channels.
+ */
+ void unlinkChannels(IChannel channelA, IChannel channelB);
+
+ /**
+ * Unlinks all channels from the provided channel.
+ * @param channel The channel to be unlinked.
+ */
+ void unlinkAllChannels(IChannel channel);
}
diff --git a/src/main/java/com/morlunk/jumble/JumbleService.java b/src/main/java/com/morlunk/jumble/JumbleService.java
index 90fa7d7..cbeb45c 100644
--- a/src/main/java/com/morlunk/jumble/JumbleService.java
+++ b/src/main/java/com/morlunk/jumble/JumbleService.java
@@ -1055,6 +1055,31 @@ public class JumbleService extends Service implements IJumbleService, JumbleConn
mCallbacks.unregisterObserver(observer);
}
+ @Override
+ public void linkChannels(IChannel channelA, IChannel channelB) {
+ Mumble.ChannelState.Builder csb = Mumble.ChannelState.newBuilder();
+ csb.setChannelId(channelA.getId());
+ csb.addLinksAdd(channelB.getId());
+ getConnection().sendTCPMessage(csb.build(), JumbleTCPMessageType.ChannelState);
+ }
+
+ @Override
+ public void unlinkChannels(IChannel channelA, IChannel channelB) {
+ Mumble.ChannelState.Builder csb = Mumble.ChannelState.newBuilder();
+ csb.setChannelId(channelA.getId());
+ csb.addLinksRemove(channelB.getId());
+ getConnection().sendTCPMessage(csb.build(), JumbleTCPMessageType.ChannelState);
+ }
+
+ @Override
+ public void unlinkAllChannels(IChannel channel) {
+ Mumble.ChannelState.Builder csb = Mumble.ChannelState.newBuilder();
+ csb.setChannelId(channel.getId());
+ for (IChannel linked : channel.getLinks()) {
+ csb.addLinksRemove(linked.getId());
+ }
+ getConnection().sendTCPMessage(csb.build(), JumbleTCPMessageType.ChannelState);
+ }
/**
* The current connection state of the service.
diff --git a/src/main/java/com/morlunk/jumble/protocol/ModelHandler.java b/src/main/java/com/morlunk/jumble/protocol/ModelHandler.java
index a14b803..a032532 100644
--- a/src/main/java/com/morlunk/jumble/protocol/ModelHandler.java
+++ b/src/main/java/com/morlunk/jumble/protocol/ModelHandler.java
@@ -151,18 +151,26 @@ public class ModelHandler extends JumbleTCPMessageListener.Stub {
if(msg.getLinksCount() > 0) {
channel.clearLinks();
for(int link : msg.getLinksList()) {
- channel.addLink(mChannels.get(link));
+ Channel linked = mChannels.get(link);
+ channel.addLink(linked);
+ linked.addLink(channel);
}
}
if(msg.getLinksRemoveCount() > 0) {
- for(int link : msg.getLinksRemoveList())
- channel.removeLink(mChannels.get(link));
+ for(int link : msg.getLinksRemoveList()) {
+ Channel linked = mChannels.get(link);
+ channel.removeLink(linked);
+ linked.removeLink(channel);
+ }
}
if(msg.getLinksAddCount() > 0) {
- for(int link : msg.getLinksAddList())
- channel.addLink(mChannels.get(link));
+ for(int link : msg.getLinksAddList()) {
+ Channel linked = mChannels.get(link);
+ channel.addLink(linked);
+ linked.addLink(channel);
+ }
}
if(newChannel)