diff --git a/.classpath b/.classpath index b9a4605a6b..2d5a50750e 100644 --- a/.classpath +++ b/.classpath @@ -26,7 +26,7 @@ - + diff --git a/src/main/java/dev/slimevr/autobone/AutoBone.java b/src/main/java/dev/slimevr/autobone/AutoBone.java index 179ccbbdc9..5f4afe23f6 100644 --- a/src/main/java/dev/slimevr/autobone/AutoBone.java +++ b/src/main/java/dev/slimevr/autobone/AutoBone.java @@ -17,7 +17,7 @@ import io.eiren.vr.processor.HumanSkeleton; import io.eiren.vr.processor.HumanSkeletonWithLegs; import io.eiren.vr.processor.HumanSkeletonWithWaist; -import io.eiren.vr.processor.TrackerBodyPosition; +import io.eiren.vr.trackers.TrackerPosition; import io.eiren.vr.trackers.TrackerUtils; public class AutoBone { @@ -93,7 +93,7 @@ public void reloadConfigValues(TrackerFrame[] frame) { staticConfigs.put("Neck", server.config.getFloat("body.neckLength", HumanSkeletonWithWaist.NECK_LENGTH_DEFAULT)); configs.put("Waist", server.config.getFloat("body.waistDistance", 0.85f)); - if(server.config.getBoolean("autobone.forceChestTracker", false) || (frame != null && TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.CHEST) != null) || TrackerUtils.findTrackerForBodyPosition(server.getAllTrackers(), TrackerBodyPosition.CHEST) != null) { + if(server.config.getBoolean("autobone.forceChestTracker", false) || (frame != null && TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.CHEST) != null) || TrackerUtils.findTrackerForBodyPosition(server.getAllTrackers(), TrackerPosition.CHEST) != null) { // If force enabled or has a chest tracker configs.put("Chest", server.config.getFloat("body.chestDistance", 0.42f)); } else { @@ -201,7 +201,7 @@ public float getLengthSum(Map configs) { public float getMaxHmdHeight(PoseFrame frames) { float maxHeight = 0f; for(TrackerFrame[] frame : frames) { - TrackerFrame hmd = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.HMD); + TrackerFrame hmd = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.HMD); if(hmd != null && hmd.hasData(TrackerFrameData.POSITION) && hmd.position.y > maxHeight) { maxHeight = hmd.position.y; } @@ -361,8 +361,8 @@ public float processFrames(PoseFrame frames, boolean calcInitError, float target // The change in position of the ankle over time protected float getSlideErrorDeriv(SimpleSkeleton skeleton1, SimpleSkeleton skeleton2) { - float slideLeft = skeleton1.getNodePosition(TrackerBodyPosition.LEFT_ANKLE).distance(skeleton2.getNodePosition(TrackerBodyPosition.LEFT_ANKLE)); - float slideRight = skeleton1.getNodePosition(TrackerBodyPosition.RIGHT_ANKLE).distance(skeleton2.getNodePosition(TrackerBodyPosition.RIGHT_ANKLE)); + float slideLeft = skeleton1.getNodePosition(TrackerPosition.LEFT_ANKLE).distance(skeleton2.getNodePosition(TrackerPosition.LEFT_ANKLE)); + float slideRight = skeleton1.getNodePosition(TrackerPosition.RIGHT_ANKLE).distance(skeleton2.getNodePosition(TrackerPosition.RIGHT_ANKLE)); // Divide by 4 to halve and average, it's halved because you want to approach a midpoint, not the other point return (slideLeft + slideRight) / 4f; @@ -370,11 +370,11 @@ protected float getSlideErrorDeriv(SimpleSkeleton skeleton1, SimpleSkeleton skel // The offset between both feet at one instant and over time protected float getOffsetErrorDeriv(SimpleSkeleton skeleton1, SimpleSkeleton skeleton2) { - float skeleton1Left = skeleton1.getNodePosition(TrackerBodyPosition.LEFT_ANKLE).getY(); - float skeleton1Right = skeleton1.getNodePosition(TrackerBodyPosition.RIGHT_ANKLE).getY(); + float skeleton1Left = skeleton1.getNodePosition(TrackerPosition.LEFT_ANKLE).getY(); + float skeleton1Right = skeleton1.getNodePosition(TrackerPosition.RIGHT_ANKLE).getY(); - float skeleton2Left = skeleton2.getNodePosition(TrackerBodyPosition.LEFT_ANKLE).getY(); - float skeleton2Right = skeleton2.getNodePosition(TrackerBodyPosition.RIGHT_ANKLE).getY(); + float skeleton2Left = skeleton2.getNodePosition(TrackerPosition.LEFT_ANKLE).getY(); + float skeleton2Right = skeleton2.getNodePosition(TrackerPosition.RIGHT_ANKLE).getY(); float dist1 = Math.abs(skeleton1Left - skeleton1Right); float dist2 = Math.abs(skeleton2Left - skeleton2Right); diff --git a/src/main/java/dev/slimevr/autobone/SimpleSkeleton.java b/src/main/java/dev/slimevr/autobone/SimpleSkeleton.java index 52be559261..cf34c7db6b 100644 --- a/src/main/java/dev/slimevr/autobone/SimpleSkeleton.java +++ b/src/main/java/dev/slimevr/autobone/SimpleSkeleton.java @@ -10,8 +10,8 @@ import dev.slimevr.poserecorder.TrackerFrameData; import io.eiren.vr.processor.HumanSkeletonWithLegs; import io.eiren.vr.processor.HumanSkeletonWithWaist; -import io.eiren.vr.processor.TrackerBodyPosition; import io.eiren.vr.processor.TransformNode; +import io.eiren.vr.trackers.TrackerPosition; import io.eiren.vr.trackers.TrackerUtils; import io.eiren.yaml.YamlFile; @@ -121,7 +121,7 @@ public SimpleSkeleton(Map configs) { public void setPoseFromFrame(TrackerFrame[] frame) { - TrackerFrame hmd = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.HMD); + TrackerFrame hmd = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.HMD); if(hmd != null) { if(hmd.hasData(TrackerFrameData.ROTATION)) { @@ -134,24 +134,24 @@ public void setPoseFromFrame(TrackerFrame[] frame) { } } - TrackerFrame chest = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.CHEST, TrackerBodyPosition.WAIST); + TrackerFrame chest = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.CHEST, TrackerPosition.WAIST); setRotation(chest, neckNode); - TrackerFrame waist = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.WAIST, TrackerBodyPosition.CHEST); + TrackerFrame waist = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.WAIST, TrackerPosition.CHEST); setRotation(waist, chestNode); - TrackerFrame leftLeg = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.LEFT_LEG); - TrackerFrame rightLeg = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.RIGHT_LEG); + TrackerFrame leftLeg = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.LEFT_LEG); + TrackerFrame rightLeg = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.RIGHT_LEG); averagePelvis(waist, leftLeg, rightLeg); setRotation(leftLeg, leftHipNode); setRotation(rightLeg, rightHipNode); - TrackerFrame leftAnkle = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.LEFT_ANKLE); + TrackerFrame leftAnkle = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.LEFT_ANKLE); setRotation(leftAnkle, rightKneeNode); - TrackerFrame rightAnkle = TrackerUtils.findTrackerForBodyPosition(frame, TrackerBodyPosition.RIGHT_ANKLE); + TrackerFrame rightAnkle = TrackerUtils.findTrackerForBodyPosition(frame, TrackerPosition.RIGHT_ANKLE); setRotation(rightAnkle, leftKneeNode); updatePose(); @@ -292,11 +292,11 @@ public TransformNode getNode(String node) { return nodes.get(node); } - public TransformNode getNode(TrackerBodyPosition bodyPosition) { + public TransformNode getNode(TrackerPosition bodyPosition) { return getNode(bodyPosition, false); } - public TransformNode getNode(TrackerBodyPosition bodyPosition, boolean rotationNode) { + public TransformNode getNode(TrackerPosition bodyPosition, boolean rotationNode) { if(bodyPosition == null) { return null; } @@ -328,7 +328,7 @@ public Vector3f getNodePosition(String node) { return transformNode != null ? transformNode.worldTransform.getTranslation() : null; } - public Vector3f getNodePosition(TrackerBodyPosition bodyPosition) { + public Vector3f getNodePosition(TrackerPosition bodyPosition) { TransformNode node = getNode(bodyPosition); if(node == null) { return null; diff --git a/src/main/java/dev/slimevr/bridge/Bridge.java b/src/main/java/dev/slimevr/bridge/Bridge.java new file mode 100644 index 0000000000..31c4e1352d --- /dev/null +++ b/src/main/java/dev/slimevr/bridge/Bridge.java @@ -0,0 +1,43 @@ +package dev.slimevr.bridge; + +import io.eiren.util.ann.VRServerThread; +import io.eiren.vr.trackers.ShareableTracker; + +/** + * Bridge handles sending and recieving tracker data + * between SlimeVR and other systems like VR APIs (SteamVR, OpenXR, etc), + * apps and protocols (VMC, WebSocket, TIP). It can create and manage + * tracker recieved from the remote side or send shared local + * trackers to the other side. + */ +public interface Bridge { + + @VRServerThread + public void dataRead(); + + @VRServerThread + public void dataWrite(); + + /** + * Adds shared tracker to the bridge. Bridge should notify the + * other side of this tracker, if it's the type of tracker + * this bridge serves, and start sending data each update + * @param tracker + */ + @VRServerThread + public void addSharedTracker(ShareableTracker tracker); + + /** + * Removes tracker from a bridge. If the other side supports + * tracker removal, bridge should notify it and stop sending + * new data. If it doesn't support tracker removal, the bridge + * can either stop sending new data, or keep sending it if it's + * available. + * @param tracker + */ + @VRServerThread + public void removeSharedTracker(ShareableTracker tracker); + + @VRServerThread + public void startBridge(); +} diff --git a/src/main/java/dev/slimevr/bridge/BridgeThread.java b/src/main/java/dev/slimevr/bridge/BridgeThread.java new file mode 100644 index 0000000000..295a71036d --- /dev/null +++ b/src/main/java/dev/slimevr/bridge/BridgeThread.java @@ -0,0 +1,9 @@ +package dev.slimevr.bridge; + +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; + +@Retention(value = RetentionPolicy.SOURCE) +public @interface BridgeThread { + +} diff --git a/src/main/java/dev/slimevr/bridge/NamedPipeBridge.java b/src/main/java/dev/slimevr/bridge/NamedPipeBridge.java new file mode 100644 index 0000000000..b5a3b19b2d --- /dev/null +++ b/src/main/java/dev/slimevr/bridge/NamedPipeBridge.java @@ -0,0 +1,224 @@ +package dev.slimevr.bridge; + +import java.io.IOException; +import java.util.List; + +import com.google.protobuf.CodedOutputStream; +import com.sun.jna.platform.win32.Kernel32; +import com.sun.jna.platform.win32.WinBase; +import com.sun.jna.platform.win32.WinError; +import com.sun.jna.ptr.IntByReference; + +import dev.slimevr.bridge.Pipe.PipeState; +import dev.slimevr.bridge.ProtobufMessages.ProtobufMessage; +import dev.slimevr.bridge.ProtobufMessages.TrackerAdded; +import io.eiren.util.ann.VRServerThread; +import io.eiren.util.logging.LogManager; +import io.eiren.vr.Main; +import io.eiren.vr.trackers.HMDTracker; +import io.eiren.vr.trackers.ShareableTracker; +import io.eiren.vr.trackers.TrackerPosition; +import io.eiren.vr.trackers.TrackerRole; +import io.eiren.vr.trackers.VRTracker; + +public class NamedPipeBridge extends ProtobufBridge implements Runnable { + + private final TrackerRole[] defaultRoles = new TrackerRole[] {TrackerRole.WAIST, TrackerRole.LEFT_FOOT, TrackerRole.RIGHT_FOOT}; + + private final byte[] buffArray = new byte[2048]; + + protected Pipe pipe; + protected final String pipeName; + protected final String bridgeSettingsKey; + protected final Thread runnerThread; + private final List shareableTrackers; + + public NamedPipeBridge(HMDTracker hmd, String bridgeSettingsKey, String bridgeName, String pipeName, List shareableTrackers) { + super(bridgeName, hmd); + this.pipeName = pipeName; + this.bridgeSettingsKey = bridgeSettingsKey; + this.runnerThread = new Thread(this, "Named pipe thread"); + this.shareableTrackers = shareableTrackers; + } + + @Override + @VRServerThread + public void startBridge() { + for(TrackerRole role : defaultRoles) { + changeShareSettings(role, Main.vrServer.config.getBoolean("bridge." + bridgeSettingsKey + ".trackers." + role.name().toLowerCase(), true)); + } + for(int i = 0; i < shareableTrackers.size(); ++i) { + ShareableTracker tr = shareableTrackers.get(i); + TrackerRole role = tr.getTrackerRole(); + changeShareSettings(role, Main.vrServer.config.getBoolean("bridge." + bridgeSettingsKey + ".trackers." + role.name().toLowerCase(), false)); + } + runnerThread.start(); + } + + @VRServerThread + public boolean getShareSetting(TrackerRole role) { + for(int i = 0; i < shareableTrackers.size(); ++i) { + ShareableTracker tr = shareableTrackers.get(i); + if(tr.getTrackerRole() == role) { + return sharedTrackers.contains(tr); + } + } + return false; + } + + @VRServerThread + public void changeShareSettings(TrackerRole role, boolean share) { + if(role == null) + return; + for(int i = 0; i < shareableTrackers.size(); ++i) { + ShareableTracker tr = shareableTrackers.get(i); + if(tr.getTrackerRole() == role) { + if(share) { + addSharedTracker(tr); + } else { + removeSharedTracker(tr); + } + Main.vrServer.config.setProperty("bridge." + bridgeSettingsKey + ".trackers." + role.name().toLowerCase(), share); + Main.vrServer.saveConfig(); + } + } + } + + @Override + @VRServerThread + protected VRTracker createNewTracker(TrackerAdded trackerAdded) { + VRTracker tracker = new VRTracker(trackerAdded.getTrackerId(), trackerAdded.getTrackerSerial(), trackerAdded.getTrackerName(), true, true); + TrackerRole role = TrackerRole.getById(trackerAdded.getTrackerRole()); + if(role != null) { + tracker.setBodyPosition(TrackerPosition.getByRole(role)); + } + return tracker; + } + + @Override + @BridgeThread + public void run() { + try { + createPipe(); + while(true) { + boolean pipesUpdated = false; + if(pipe.state == PipeState.CREATED) { + tryOpeningPipe(pipe); + } + if(pipe.state == PipeState.OPEN) { + pipesUpdated = updatePipe(); + updateMessageQueue(); + } + if(pipe.state == PipeState.ERROR) { + resetPipe(); + } + if(!pipesUpdated) { + try { + Thread.sleep(5); // Up to 200Hz + } catch(InterruptedException e) { + e.printStackTrace(); + } + } + } + } catch(IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + @Override + @BridgeThread + protected boolean sendMessageReal(ProtobufMessage message) { + if(pipe.state == PipeState.OPEN) { + try { + int size = message.getSerializedSize(); + CodedOutputStream os = CodedOutputStream.newInstance(buffArray, 4, size); + message.writeTo(os); + size += 4; + buffArray[0] = (byte) (size & 0xFF); + buffArray[1] = (byte) ((size >> 8) & 0xFF); + buffArray[2] = (byte) ((size >> 16) & 0xFF); + buffArray[3] = (byte) ((size >> 24) & 0xFF); + if(Kernel32.INSTANCE.WriteFile(pipe.pipeHandle, buffArray, size, null, null)) { + return true; + } + pipe.state = PipeState.ERROR; + LogManager.log.severe("[" + bridgeName + "] Pipe error: " + Kernel32.INSTANCE.GetLastError()); + } catch(IOException e) { + e.printStackTrace(); + } + } + return false; + } + + private boolean updatePipe() throws IOException { + if(pipe.state == PipeState.OPEN) { + boolean readAnything = false; + IntByReference bytesAvailable = new IntByReference(0); + while(Kernel32.INSTANCE.PeekNamedPipe(pipe.pipeHandle, buffArray, 4, null, bytesAvailable, null)) { + if(bytesAvailable.getValue() >= 4) { // Got size + int messageLength = (buffArray[3] << 24) | (buffArray[2] << 16) | (buffArray[1] << 8) | buffArray[0]; + if(messageLength > 1024) { // Overflow + LogManager.log.severe("[" + bridgeName + "] Pipe overflow. Message length: " + messageLength); + pipe.state = PipeState.ERROR; + return readAnything; + } + if(bytesAvailable.getValue() >= messageLength) { + if(Kernel32.INSTANCE.ReadFile(pipe.pipeHandle, buffArray, messageLength, bytesAvailable, null)) { + ProtobufMessage message = ProtobufMessage.parser().parseFrom(buffArray, 4, messageLength - 4); + messageRecieved(message); + readAnything = true; + } else { + pipe.state = PipeState.ERROR; + LogManager.log.severe("[" + bridgeName + "] Pipe error: " + Kernel32.INSTANCE.GetLastError()); + return readAnything; + } + } else { + return readAnything; // Wait for more data + } + } else { + return readAnything; // Wait for more data + } + } + pipe.state = PipeState.ERROR; + LogManager.log.severe("[" + bridgeName + "] Pipe error: " + Kernel32.INSTANCE.GetLastError()); + } + return false; + } + + private void resetPipe() { + Pipe.safeDisconnect(pipe); + pipe.state = PipeState.CREATED; + Main.vrServer.queueTask(this::disconnected); + } + + private void createPipe() throws IOException { + try { + pipe = new Pipe(Kernel32.INSTANCE.CreateNamedPipe(pipeName, WinBase.PIPE_ACCESS_DUPLEX, // dwOpenMode + WinBase.PIPE_TYPE_BYTE | WinBase.PIPE_READMODE_BYTE | WinBase.PIPE_WAIT, // dwPipeMode + 1, // nMaxInstances, + 1024 * 16, // nOutBufferSize, + 1024 * 16, // nInBufferSize, + 0, // nDefaultTimeOut, + null), pipeName); // lpSecurityAttributes + LogManager.log.info("[" + bridgeName + "] Pipe " + pipe.name + " created"); + if(WinBase.INVALID_HANDLE_VALUE.equals(pipe.pipeHandle)) + throw new IOException("Can't open " + pipeName + " pipe: " + Kernel32.INSTANCE.GetLastError()); + LogManager.log.info("[" + bridgeName + "] Pipes are created"); + } catch(IOException e) { + Pipe.safeDisconnect(pipe); + throw e; + } + } + + private boolean tryOpeningPipe(Pipe pipe) { + if(Kernel32.INSTANCE.ConnectNamedPipe(pipe.pipeHandle, null) || Kernel32.INSTANCE.GetLastError() == WinError.ERROR_PIPE_CONNECTED) { + pipe.state = PipeState.OPEN; + LogManager.log.info("[" + bridgeName + "] Pipe " + pipe.name + " is open"); + Main.vrServer.queueTask(this::reconnected); + return true; + } + LogManager.log.info("[" + bridgeName + "] Error connecting to pipe " + pipe.name + ": " + Kernel32.INSTANCE.GetLastError()); + return false; + } +} diff --git a/src/main/java/io/eiren/vr/bridge/NamedPipeVRBridge.java b/src/main/java/dev/slimevr/bridge/NamedPipeVRBridge.java similarity index 94% rename from src/main/java/io/eiren/vr/bridge/NamedPipeVRBridge.java rename to src/main/java/dev/slimevr/bridge/NamedPipeVRBridge.java index dc6e14ca61..9bc663ab7d 100644 --- a/src/main/java/io/eiren/vr/bridge/NamedPipeVRBridge.java +++ b/src/main/java/dev/slimevr/bridge/NamedPipeVRBridge.java @@ -1,4 +1,4 @@ -package io.eiren.vr.bridge; +package dev.slimevr.bridge; import java.io.IOException; import java.nio.charset.Charset; @@ -12,15 +12,17 @@ import com.sun.jna.platform.win32.WinNT.HANDLE; import com.sun.jna.ptr.IntByReference; +import dev.slimevr.bridge.Pipe.PipeState; import io.eiren.util.collections.FastList; import io.eiren.util.logging.LogManager; import io.eiren.vr.VRServer; import io.eiren.vr.trackers.ComputedTracker; import io.eiren.vr.trackers.HMDTracker; +import io.eiren.vr.trackers.ShareableTracker; import io.eiren.vr.trackers.Tracker; import io.eiren.vr.trackers.TrackerStatus; -public class NamedPipeVRBridge extends Thread implements VRBridge { +public class NamedPipeVRBridge extends Thread implements Bridge { private static final int MAX_COMMAND_LENGTH = 2048; public static final String HMDPipeName = "\\\\.\\pipe\\HMDPipe"; @@ -52,7 +54,7 @@ public NamedPipeVRBridge(HMDTracker hmd, List shareTrackers, this.internalTrackers = new FastList<>(shareTrackers.size()); for(int i = 0; i < shareTrackers.size(); ++i) { Tracker t = shareTrackers.get(i); - ComputedTracker ct = new ComputedTracker("internal://" + t.getName(), true, true); + ComputedTracker ct = new ComputedTracker(t.getTrackerId(), "internal://" + t.getName(), true, true); ct.setStatus(TrackerStatus.OK); this.internalTrackers.add(ct); } @@ -268,4 +270,21 @@ public static void safeDisconnect(Pipe pipe) { } catch(Exception e) { } } + + @Override + public void addSharedTracker(ShareableTracker tracker) { + // TODO Auto-generated method stub + + } + + @Override + public void removeSharedTracker(ShareableTracker tracker) { + // TODO Auto-generated method stub + + } + + @Override + public void startBridge() { + start(); + } } diff --git a/src/main/java/dev/slimevr/bridge/Pipe.java b/src/main/java/dev/slimevr/bridge/Pipe.java new file mode 100644 index 0000000000..8c4d354ae2 --- /dev/null +++ b/src/main/java/dev/slimevr/bridge/Pipe.java @@ -0,0 +1,30 @@ +package dev.slimevr.bridge; + +import com.sun.jna.platform.win32.Kernel32; +import com.sun.jna.platform.win32.WinNT.HANDLE; + +public class Pipe { + + public final String name; + public final HANDLE pipeHandle; + public PipeState state = PipeState.CREATED; + + public Pipe(HANDLE pipeHandle, String name) { + this.pipeHandle = pipeHandle; + this.name = name; + } + + public static void safeDisconnect(Pipe pipe) { + try { + if(pipe != null && pipe.pipeHandle != null) + Kernel32.INSTANCE.DisconnectNamedPipe(pipe.pipeHandle); + } catch(Exception e) { + } + } + + enum PipeState { + CREATED, + OPEN, + ERROR; + } +} \ No newline at end of file diff --git a/src/main/java/dev/slimevr/bridge/ProtobufBridge.java b/src/main/java/dev/slimevr/bridge/ProtobufBridge.java new file mode 100644 index 0000000000..cee38b6e06 --- /dev/null +++ b/src/main/java/dev/slimevr/bridge/ProtobufBridge.java @@ -0,0 +1,241 @@ +package dev.slimevr.bridge; + +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; +import java.util.Queue; +import java.util.concurrent.LinkedBlockingQueue; + +import com.jme3.math.Quaternion; +import com.jme3.math.Vector3f; + +import dev.slimevr.bridge.ProtobufMessages.Position; +import dev.slimevr.bridge.ProtobufMessages.ProtobufMessage; +import dev.slimevr.bridge.ProtobufMessages.TrackerAdded; +import dev.slimevr.bridge.ProtobufMessages.TrackerStatus; +import dev.slimevr.bridge.ProtobufMessages.UserAction; +import io.eiren.util.ann.Synchronize; +import io.eiren.util.ann.ThreadSafe; +import io.eiren.util.ann.VRServerThread; +import io.eiren.util.collections.FastList; +import io.eiren.vr.Main; +import io.eiren.vr.trackers.ComputedTracker; +import io.eiren.vr.trackers.HMDTracker; +import io.eiren.vr.trackers.ShareableTracker; +import io.eiren.vr.trackers.TrackerRole; +import io.eiren.vr.trackers.VRTracker; + +public abstract class ProtobufBridge implements Bridge { + + private final Vector3f vec1 = new Vector3f(); + private final Quaternion quat1 = new Quaternion(); + + @ThreadSafe + private final Queue inputQueue = new LinkedBlockingQueue<>(); + @ThreadSafe + private final Queue outputQueue = new LinkedBlockingQueue<>(); + @VRServerThread + protected final List sharedTrackers = new FastList<>(); + @Synchronize("self") + private final Map remoteTrackersBySerial = new HashMap<>(); + @Synchronize("self") + private final Map remoteTrackersByTrackerId = new HashMap<>(); + + private boolean hadNewData = false; + + private T hmdTracker; + private final HMDTracker hmd; + protected final String bridgeName; + + public ProtobufBridge(String bridgeName, HMDTracker hmd) { + this.bridgeName = bridgeName; + this.hmd = hmd; + } + + @BridgeThread + protected abstract boolean sendMessageReal(ProtobufMessage message); + + @BridgeThread + protected void messageRecieved(ProtobufMessage message) { + inputQueue.add(message); + } + + @ThreadSafe + protected void sendMessage(ProtobufMessage message) { + outputQueue.add(message); + } + + @BridgeThread + protected void updateMessageQueue() { + ProtobufMessage message = null; + while((message = outputQueue.poll()) != null) { + if(!sendMessageReal(message)) + return; + } + } + + @VRServerThread + @Override + public void dataRead() { + hadNewData = false; + ProtobufMessage message = null; + while((message = inputQueue.poll()) != null) { + processMessageRecieved(message); + hadNewData = true; + } + if(hadNewData && hmdTracker != null) { + trackerOverrideUpdate(hmdTracker, hmd); + } + } + + @VRServerThread + protected void trackerOverrideUpdate(T source, ComputedTracker target) { + target.position.set(source.position); + target.rotation.set(source.rotation); + target.setStatus(source.getStatus()); + target.dataTick(); + } + + @VRServerThread + @Override + public void dataWrite() { + if(!hadNewData) // Don't write anything if no message were recieved, we always process at the speed of the other side + return; + for(int i = 0; i < sharedTrackers.size(); ++i) { + writeTrackerUpdate(sharedTrackers.get(i)); + } + } + + @VRServerThread + protected void writeTrackerUpdate(ShareableTracker localTracker) { + Position.Builder builder = Position.newBuilder().setTrackerId(localTracker.getTrackerId()); + if(localTracker.getPosition(vec1)) { + builder.setX(vec1.x); + builder.setY(vec1.y); + builder.setZ(vec1.z); + } + if(localTracker.getRotation(quat1)) { + builder.setQx(quat1.getX()); + builder.setQy(quat1.getY()); + builder.setQz(quat1.getZ()); + builder.setQw(quat1.getW()); + } + sendMessage(ProtobufMessage.newBuilder().setPosition(builder).build()); + } + + @VRServerThread + protected void processMessageRecieved(ProtobufMessage message) { + //if(!message.hasPosition()) + // LogManager.log.info("[" + bridgeName + "] MSG: " + message); + if(message.hasPosition()) { + positionRecieved(message.getPosition()); + } else if(message.hasUserAction()) { + userActionRecieved(message.getUserAction()); + } else if(message.hasTrackerStatus()) { + trackerStatusRecieved(message.getTrackerStatus()); + } else if(message.hasTrackerAdded()) { + trackerAddedRecieved(message.getTrackerAdded()); + } + } + + @VRServerThread + protected void positionRecieved(Position positionMessage) { + T tracker = getInternalRemoteTrackerById(positionMessage.getTrackerId()); + if(tracker != null) { + if(positionMessage.hasX()) + tracker.position.set(positionMessage.getX(), positionMessage.getY(), positionMessage.getZ()); + tracker.rotation.set(positionMessage.getQx(), positionMessage.getQy(), positionMessage.getQz(), positionMessage.getQw()); + tracker.dataTick(); + } + } + + @VRServerThread + protected abstract T createNewTracker(TrackerAdded trackerAdded); + + @VRServerThread + protected void trackerAddedRecieved(TrackerAdded trackerAdded) { + T tracker = getInternalRemoteTrackerById(trackerAdded.getTrackerId()); + if(tracker != null) { + // TODO reinit? + return; + } + tracker = createNewTracker(trackerAdded); + synchronized(remoteTrackersBySerial) { + remoteTrackersBySerial.put(tracker.getName(), tracker); + } + synchronized(remoteTrackersByTrackerId) { + remoteTrackersByTrackerId.put(tracker.getTrackerId(), tracker); + } + if(trackerAdded.getTrackerRole() == TrackerRole.HMD.id) { + hmdTracker = tracker; + } else { + Main.vrServer.registerTracker(tracker); + } + } + + @VRServerThread + protected void userActionRecieved(UserAction userAction) { + switch(userAction.getName()) { + case "calibrate": + // TODO : Check pose field + Main.vrServer.resetTrackers(); + break; + } + } + + @VRServerThread + protected void trackerStatusRecieved(TrackerStatus trackerStatus) { + T tracker = getInternalRemoteTrackerById(trackerStatus.getTrackerId()); + if(tracker != null) { + tracker.setStatus(io.eiren.vr.trackers.TrackerStatus.getById(trackerStatus.getStatusValue())); + } + } + + @ThreadSafe + protected T getInternalRemoteTrackerById(int trackerId) { + synchronized(remoteTrackersByTrackerId) { + return remoteTrackersByTrackerId.get(trackerId); + } + } + + @VRServerThread + protected void reconnected() { + for(int i = 0; i < sharedTrackers.size(); ++i) { + ShareableTracker tracker = sharedTrackers.get(i); + TrackerAdded.Builder builder = TrackerAdded.newBuilder().setTrackerId(tracker.getTrackerId()).setTrackerName(tracker.getDescriptiveName()).setTrackerSerial(tracker.getName()).setTrackerRole(tracker.getTrackerRole().id); + sendMessage(ProtobufMessage.newBuilder().setTrackerAdded(builder).build()); + } + } + + @VRServerThread + protected void disconnected() { + synchronized(remoteTrackersByTrackerId) { + Iterator> iterator = remoteTrackersByTrackerId.entrySet().iterator(); + while(iterator.hasNext()) { + iterator.next().getValue().setStatus(io.eiren.vr.trackers.TrackerStatus.DISCONNECTED); + } + } + if(hmdTracker != null) { + hmd.setStatus(io.eiren.vr.trackers.TrackerStatus.DISCONNECTED); + } + } + + @VRServerThread + @Override + public void addSharedTracker(ShareableTracker tracker) { + if(sharedTrackers.contains(tracker)) + return; + sharedTrackers.add(tracker); + TrackerAdded.Builder builder = TrackerAdded.newBuilder().setTrackerId(tracker.getTrackerId()).setTrackerName(tracker.getDescriptiveName()).setTrackerSerial(tracker.getName()).setTrackerRole(tracker.getTrackerRole().id); + sendMessage(ProtobufMessage.newBuilder().setTrackerAdded(builder).build()); + } + + @VRServerThread + @Override + public void removeSharedTracker(ShareableTracker tracker) { + sharedTrackers.remove(tracker); + // No message can be sent to the remote side, protocol doesn't support tracker removal (yet) + } +} diff --git a/src/main/java/dev/slimevr/bridge/ProtobufMessages.java b/src/main/java/dev/slimevr/bridge/ProtobufMessages.java index 9855b402d4..d7f536a450 100644 --- a/src/main/java/dev/slimevr/bridge/ProtobufMessages.java +++ b/src/main/java/dev/slimevr/bridge/ProtobufMessages.java @@ -14,95 +14,30 @@ public static void registerAllExtensions( registerAllExtensions( (com.google.protobuf.ExtensionRegistryLite) registry); } - public interface PositionOrBuilder extends - // @@protoc_insertion_point(interface_extends:dev.slimevr.bridge.Position) + public interface PingPongOrBuilder extends + // @@protoc_insertion_point(interface_extends:messages.PingPong) com.google.protobuf.MessageOrBuilder { - - /** - * int32 tracker_id = 1; - * @return The trackerId. - */ - int getTrackerId(); - - /** - * float x = 2; - * @return The x. - */ - float getX(); - - /** - * float y = 3; - * @return The y. - */ - float getY(); - - /** - * float z = 4; - * @return The z. - */ - float getZ(); - - /** - * float qx = 5; - * @return The qx. - */ - float getQx(); - - /** - * float qy = 6; - * @return The qy. - */ - float getQy(); - - /** - * float qz = 7; - * @return The qz. - */ - float getQz(); - - /** - * float qw = 8; - * @return The qw. - */ - float getQw(); - - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @return Whether the dataSource field is set. - */ - boolean hasDataSource(); - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @return The enum numeric value on the wire for dataSource. - */ - int getDataSourceValue(); - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @return The dataSource. - */ - dev.slimevr.bridge.ProtobufMessages.Position.DataSource getDataSource(); } /** - * Protobuf type {@code dev.slimevr.bridge.Position} + * Protobuf type {@code messages.PingPong} */ - public static final class Position extends + public static final class PingPong extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:dev.slimevr.bridge.Position) - PositionOrBuilder { + // @@protoc_insertion_point(message_implements:messages.PingPong) + PingPongOrBuilder { private static final long serialVersionUID = 0L; - // Use Position.newBuilder() to construct. - private Position(com.google.protobuf.GeneratedMessageV3.Builder builder) { + // Use PingPong.newBuilder() to construct. + private PingPong(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); } - private Position() { - dataSource_ = 0; + private PingPong() { } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new Position(); + return new PingPong(); } @java.lang.Override @@ -110,7 +45,7 @@ protected java.lang.Object newInstance( getUnknownFields() { return this.unknownFields; } - private Position( + private PingPong( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -118,7 +53,6 @@ private Position( if (extensionRegistry == null) { throw new java.lang.NullPointerException(); } - int mutable_bitField0_ = 0; com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet.newBuilder(); try { @@ -129,52 +63,6 @@ private Position( case 0: done = true; break; - case 8: { - - trackerId_ = input.readInt32(); - break; - } - case 21: { - - x_ = input.readFloat(); - break; - } - case 29: { - - y_ = input.readFloat(); - break; - } - case 37: { - - z_ = input.readFloat(); - break; - } - case 45: { - - qx_ = input.readFloat(); - break; - } - case 53: { - - qy_ = input.readFloat(); - break; - } - case 61: { - - qz_ = input.readFloat(); - break; - } - case 69: { - - qw_ = input.readFloat(); - break; - } - case 72: { - int rawValue = input.readEnum(); - bitField0_ |= 0x00000001; - dataSource_ = rawValue; - break; - } default: { if (!parseUnknownField( input, unknownFields, extensionRegistry, tag)) { @@ -196,1364 +84,829 @@ private Position( } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_Position_descriptor; + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_PingPong_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_Position_fieldAccessorTable + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_PingPong_fieldAccessorTable .ensureFieldAccessorsInitialized( - dev.slimevr.bridge.ProtobufMessages.Position.class, dev.slimevr.bridge.ProtobufMessages.Position.Builder.class); + dev.slimevr.bridge.ProtobufMessages.PingPong.class, dev.slimevr.bridge.ProtobufMessages.PingPong.Builder.class); } - /** - * Protobuf enum {@code dev.slimevr.bridge.Position.DataSource} - */ - public enum DataSource - implements com.google.protobuf.ProtocolMessageEnum { - /** - * NONE = 0; - */ - NONE(0), - /** - * IMU = 1; - */ - IMU(1), - /** - * PRECISION = 2; - */ - PRECISION(2), - /** - * FULL = 3; - */ - FULL(3), - UNRECOGNIZED(-1), - ; + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; - /** - * NONE = 0; - */ - public static final int NONE_VALUE = 0; - /** - * IMU = 1; - */ - public static final int IMU_VALUE = 1; - /** - * PRECISION = 2; - */ - public static final int PRECISION_VALUE = 2; - /** - * FULL = 3; - */ - public static final int FULL_VALUE = 3; + memoizedIsInitialized = 1; + return true; + } + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + unknownFields.writeTo(output); + } - @Override - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static DataSource valueOf(int value) { - return forNumber(value); - } + size = 0; + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static DataSource forNumber(int value) { - switch (value) { - case 0: return NONE; - case 1: return IMU; - case 2: return PRECISION; - case 3: return FULL; - default: return null; - } + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; + if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.PingPong)) { + return super.equals(obj); } - private static final com.google.protobuf.Internal.EnumLiteMap< - DataSource> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - @Override - public DataSource findValueByNumber(int number) { - return DataSource.forNumber(number); - } - }; + dev.slimevr.bridge.ProtobufMessages.PingPong other = (dev.slimevr.bridge.ProtobufMessages.PingPong) obj; - @Override - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - @Override - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return dev.slimevr.bridge.ProtobufMessages.Position.getDescriptor().getEnumTypes().get(0); + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } - private static final DataSource[] VALUES = values(); - - public static DataSource valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - - private final int value; - - private DataSource(int value) { - this.value = value; - } - - // @@protoc_insertion_point(enum_scope:dev.slimevr.bridge.Position.DataSource) + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); } - - private int bitField0_; - public static final int TRACKER_ID_FIELD_NUMBER = 1; - private int trackerId_; - /** - * int32 tracker_id = 1; - * @return The trackerId. - */ - @java.lang.Override - public int getTrackerId() { - return trackerId_; + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); } - - public static final int X_FIELD_NUMBER = 2; - private float x_; - /** - * float x = 2; - * @return The x. - */ - @java.lang.Override - public float getX() { - return x_; + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); } - - public static final int Y_FIELD_NUMBER = 3; - private float y_; - /** - * float y = 3; - * @return The y. - */ - @java.lang.Override - public float getY() { - return y_; + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); } - - public static final int Z_FIELD_NUMBER = 4; - private float z_; - /** - * float z = 4; - * @return The z. - */ - @java.lang.Override - public float getZ() { - return z_; + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); } - - public static final int QX_FIELD_NUMBER = 5; - private float qx_; - /** - * float qx = 5; - * @return The qx. - */ - @java.lang.Override - public float getQx() { - return qx_; + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); } - - public static final int QY_FIELD_NUMBER = 6; - private float qy_; - /** - * float qy = 6; - * @return The qy. - */ - @java.lang.Override - public float getQy() { - return qy_; + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); } - - public static final int QZ_FIELD_NUMBER = 7; - private float qz_; - /** - * float qz = 7; - * @return The qz. - */ - @java.lang.Override - public float getQz() { - return qz_; + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); } - - public static final int QW_FIELD_NUMBER = 8; - private float qw_; - /** - * float qw = 8; - * @return The qw. - */ - @java.lang.Override - public float getQw() { - return qw_; + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); } - - public static final int DATA_SOURCE_FIELD_NUMBER = 9; - private int dataSource_; - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @return Whether the dataSource field is set. - */ - @java.lang.Override public boolean hasDataSource() { - return ((bitField0_ & 0x00000001) != 0); + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @return The enum numeric value on the wire for dataSource. - */ - @java.lang.Override public int getDataSourceValue() { - return dataSource_; + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); } - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @return The dataSource. - */ - @java.lang.Override public dev.slimevr.bridge.ProtobufMessages.Position.DataSource getDataSource() { - @SuppressWarnings("deprecation") - dev.slimevr.bridge.ProtobufMessages.Position.DataSource result = dev.slimevr.bridge.ProtobufMessages.Position.DataSource.valueOf(dataSource_); - return result == null ? dev.slimevr.bridge.ProtobufMessages.Position.DataSource.UNRECOGNIZED : result; + public static dev.slimevr.bridge.ProtobufMessages.PingPong parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); } - private byte memoizedIsInitialized = -1; @java.lang.Override - public final boolean isInitialized() { - byte isInitialized = memoizedIsInitialized; - if (isInitialized == 1) return true; - if (isInitialized == 0) return false; - - memoizedIsInitialized = 1; - return true; + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.PingPong prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); } @java.lang.Override - public void writeTo(com.google.protobuf.CodedOutputStream output) - throws java.io.IOException { - if (trackerId_ != 0) { - output.writeInt32(1, trackerId_); + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code messages.PingPong} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:messages.PingPong) + dev.slimevr.bridge.ProtobufMessages.PingPongOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_PingPong_descriptor; } - if (x_ != 0F) { - output.writeFloat(2, x_); + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_PingPong_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.slimevr.bridge.ProtobufMessages.PingPong.class, dev.slimevr.bridge.ProtobufMessages.PingPong.Builder.class); } - if (y_ != 0F) { - output.writeFloat(3, y_); + + // Construct using dev.slimevr.bridge.ProtobufMessages.PingPong.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); } - if (z_ != 0F) { - output.writeFloat(4, z_); + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); } - if (qx_ != 0F) { - output.writeFloat(5, qx_); + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } } - if (qy_ != 0F) { - output.writeFloat(6, qy_); + @java.lang.Override + public Builder clear() { + super.clear(); + return this; } - if (qz_ != 0F) { - output.writeFloat(7, qz_); + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_PingPong_descriptor; } - if (qw_ != 0F) { - output.writeFloat(8, qw_); + + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.PingPong getDefaultInstanceForType() { + return dev.slimevr.bridge.ProtobufMessages.PingPong.getDefaultInstance(); } - if (((bitField0_ & 0x00000001) != 0)) { - output.writeEnum(9, dataSource_); + + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.PingPong build() { + dev.slimevr.bridge.ProtobufMessages.PingPong result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; } - unknownFields.writeTo(output); - } - @java.lang.Override - public int getSerializedSize() { - int size = memoizedSize; - if (size != -1) return size; + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.PingPong buildPartial() { + dev.slimevr.bridge.ProtobufMessages.PingPong result = new dev.slimevr.bridge.ProtobufMessages.PingPong(this); + onBuilt(); + return result; + } - size = 0; - if (trackerId_ != 0) { - size += com.google.protobuf.CodedOutputStream - .computeInt32Size(1, trackerId_); + @java.lang.Override + public Builder clone() { + return super.clone(); } - if (x_ != 0F) { - size += com.google.protobuf.CodedOutputStream - .computeFloatSize(2, x_); + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); } - if (y_ != 0F) { - size += com.google.protobuf.CodedOutputStream - .computeFloatSize(3, y_); + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); } - if (z_ != 0F) { - size += com.google.protobuf.CodedOutputStream - .computeFloatSize(4, z_); + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); } - if (qx_ != 0F) { - size += com.google.protobuf.CodedOutputStream - .computeFloatSize(5, qx_); + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); } - if (qy_ != 0F) { - size += com.google.protobuf.CodedOutputStream - .computeFloatSize(6, qy_); + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); } - if (qz_ != 0F) { - size += com.google.protobuf.CodedOutputStream - .computeFloatSize(7, qz_); + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.slimevr.bridge.ProtobufMessages.PingPong) { + return mergeFrom((dev.slimevr.bridge.ProtobufMessages.PingPong)other); + } else { + super.mergeFrom(other); + return this; + } } - if (qw_ != 0F) { - size += com.google.protobuf.CodedOutputStream - .computeFloatSize(8, qw_); + + public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.PingPong other) { + if (other == dev.slimevr.bridge.ProtobufMessages.PingPong.getDefaultInstance()) return this; + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; } - if (((bitField0_ & 0x00000001) != 0)) { - size += com.google.protobuf.CodedOutputStream - .computeEnumSize(9, dataSource_); + + @java.lang.Override + public final boolean isInitialized() { + return true; } - size += unknownFields.getSerializedSize(); - memoizedSize = size; - return size; - } - @java.lang.Override - public boolean equals(final java.lang.Object obj) { - if (obj == this) { - return true; + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.slimevr.bridge.ProtobufMessages.PingPong parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.slimevr.bridge.ProtobufMessages.PingPong) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; } - if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.Position)) { - return super.equals(obj); + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); } - dev.slimevr.bridge.ProtobufMessages.Position other = (dev.slimevr.bridge.ProtobufMessages.Position) obj; - if (getTrackerId() - != other.getTrackerId()) return false; - if (java.lang.Float.floatToIntBits(getX()) - != java.lang.Float.floatToIntBits( - other.getX())) return false; - if (java.lang.Float.floatToIntBits(getY()) - != java.lang.Float.floatToIntBits( - other.getY())) return false; - if (java.lang.Float.floatToIntBits(getZ()) - != java.lang.Float.floatToIntBits( - other.getZ())) return false; - if (java.lang.Float.floatToIntBits(getQx()) - != java.lang.Float.floatToIntBits( - other.getQx())) return false; - if (java.lang.Float.floatToIntBits(getQy()) - != java.lang.Float.floatToIntBits( - other.getQy())) return false; - if (java.lang.Float.floatToIntBits(getQz()) - != java.lang.Float.floatToIntBits( - other.getQz())) return false; - if (java.lang.Float.floatToIntBits(getQw()) - != java.lang.Float.floatToIntBits( - other.getQw())) return false; - if (hasDataSource() != other.hasDataSource()) return false; - if (hasDataSource()) { - if (dataSource_ != other.dataSource_) return false; + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); } - if (!unknownFields.equals(other.unknownFields)) return false; - return true; - } - @java.lang.Override - public int hashCode() { - if (memoizedHashCode != 0) { - return memoizedHashCode; - } - int hash = 41; - hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + TRACKER_ID_FIELD_NUMBER; - hash = (53 * hash) + getTrackerId(); - hash = (37 * hash) + X_FIELD_NUMBER; - hash = (53 * hash) + java.lang.Float.floatToIntBits( - getX()); - hash = (37 * hash) + Y_FIELD_NUMBER; - hash = (53 * hash) + java.lang.Float.floatToIntBits( - getY()); - hash = (37 * hash) + Z_FIELD_NUMBER; - hash = (53 * hash) + java.lang.Float.floatToIntBits( - getZ()); - hash = (37 * hash) + QX_FIELD_NUMBER; - hash = (53 * hash) + java.lang.Float.floatToIntBits( - getQx()); - hash = (37 * hash) + QY_FIELD_NUMBER; - hash = (53 * hash) + java.lang.Float.floatToIntBits( - getQy()); - hash = (37 * hash) + QZ_FIELD_NUMBER; - hash = (53 * hash) + java.lang.Float.floatToIntBits( - getQz()); - hash = (37 * hash) + QW_FIELD_NUMBER; - hash = (53 * hash) + java.lang.Float.floatToIntBits( - getQw()); - if (hasDataSource()) { - hash = (37 * hash) + DATA_SOURCE_FIELD_NUMBER; - hash = (53 * hash) + dataSource_; - } - hash = (29 * hash) + unknownFields.hashCode(); - memoizedHashCode = hash; - return hash; - } - public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( - java.nio.ByteBuffer data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( - java.nio.ByteBuffer data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( - com.google.protobuf.ByteString data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( - com.google.protobuf.ByteString data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom(byte[] data) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data); - } - public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( - byte[] data, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return PARSER.parseFrom(data, extensionRegistry); - } - public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); - } - public static dev.slimevr.bridge.ProtobufMessages.Position parseDelimitedFrom(java.io.InputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input); - } - public static dev.slimevr.bridge.ProtobufMessages.Position parseDelimitedFrom( - java.io.InputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + // @@protoc_insertion_point(builder_scope:messages.PingPong) } - public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( - com.google.protobuf.CodedInputStream input) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input); - } - public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - return com.google.protobuf.GeneratedMessageV3 - .parseWithIOException(PARSER, input, extensionRegistry); + + // @@protoc_insertion_point(class_scope:messages.PingPong) + private static final dev.slimevr.bridge.ProtobufMessages.PingPong DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.PingPong(); } - @java.lang.Override - public Builder newBuilderForType() { return newBuilder(); } - public static Builder newBuilder() { - return DEFAULT_INSTANCE.toBuilder(); + public static dev.slimevr.bridge.ProtobufMessages.PingPong getDefaultInstance() { + return DEFAULT_INSTANCE; } - public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.Position prototype) { - return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public PingPong parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new PingPong(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; } + @java.lang.Override - public Builder toBuilder() { - return this == DEFAULT_INSTANCE - ? new Builder() : new Builder().mergeFrom(this); + public com.google.protobuf.Parser getParserForType() { + return PARSER; } @java.lang.Override - protected Builder newBuilderForType( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - Builder builder = new Builder(parent); - return builder; + public dev.slimevr.bridge.ProtobufMessages.PingPong getDefaultInstanceForType() { + return DEFAULT_INSTANCE; } + + } + + public interface PositionOrBuilder extends + // @@protoc_insertion_point(interface_extends:messages.Position) + com.google.protobuf.MessageOrBuilder { + /** - * Protobuf type {@code dev.slimevr.bridge.Position} + * int32 tracker_id = 1; + * @return The trackerId. */ - public static final class Builder extends - com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:dev.slimevr.bridge.Position) - dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder { - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_Position_descriptor; - } - - @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_Position_fieldAccessorTable - .ensureFieldAccessorsInitialized( - dev.slimevr.bridge.ProtobufMessages.Position.class, dev.slimevr.bridge.ProtobufMessages.Position.Builder.class); - } + int getTrackerId(); - // Construct using dev.slimevr.bridge.ProtobufMessages.Position.newBuilder() - private Builder() { - maybeForceBuilderInitialization(); - } + /** + * float x = 2; + * @return Whether the x field is set. + */ + boolean hasX(); + /** + * float x = 2; + * @return The x. + */ + float getX(); - private Builder( - com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { - super(parent); - maybeForceBuilderInitialization(); - } - private void maybeForceBuilderInitialization() { - if (com.google.protobuf.GeneratedMessageV3 - .alwaysUseFieldBuilders) { - } - } - @java.lang.Override - public Builder clear() { - super.clear(); - trackerId_ = 0; + /** + * float y = 3; + * @return Whether the y field is set. + */ + boolean hasY(); + /** + * float y = 3; + * @return The y. + */ + float getY(); - x_ = 0F; + /** + * float z = 4; + * @return Whether the z field is set. + */ + boolean hasZ(); + /** + * float z = 4; + * @return The z. + */ + float getZ(); - y_ = 0F; + /** + * float qx = 5; + * @return The qx. + */ + float getQx(); - z_ = 0F; + /** + * float qy = 6; + * @return The qy. + */ + float getQy(); - qx_ = 0F; + /** + * float qz = 7; + * @return The qz. + */ + float getQz(); - qy_ = 0F; + /** + * float qw = 8; + * @return The qw. + */ + float getQw(); - qz_ = 0F; + /** + * .messages.Position.DataSource data_source = 9; + * @return Whether the dataSource field is set. + */ + boolean hasDataSource(); + /** + * .messages.Position.DataSource data_source = 9; + * @return The enum numeric value on the wire for dataSource. + */ + int getDataSourceValue(); + /** + * .messages.Position.DataSource data_source = 9; + * @return The dataSource. + */ + dev.slimevr.bridge.ProtobufMessages.Position.DataSource getDataSource(); + } + /** + * Protobuf type {@code messages.Position} + */ + public static final class Position extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:messages.Position) + PositionOrBuilder { + private static final long serialVersionUID = 0L; + // Use Position.newBuilder() to construct. + private Position(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private Position() { + dataSource_ = 0; + } - qw_ = 0F; + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new Position(); + } - dataSource_ = 0; - bitField0_ = (bitField0_ & ~0x00000001); - return this; + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private Position( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { - @java.lang.Override - public com.google.protobuf.Descriptors.Descriptor - getDescriptorForType() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_Position_descriptor; - } + trackerId_ = input.readInt32(); + break; + } + case 21: { + bitField0_ |= 0x00000001; + x_ = input.readFloat(); + break; + } + case 29: { + bitField0_ |= 0x00000002; + y_ = input.readFloat(); + break; + } + case 37: { + bitField0_ |= 0x00000004; + z_ = input.readFloat(); + break; + } + case 45: { - @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.Position getDefaultInstanceForType() { - return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance(); - } + qx_ = input.readFloat(); + break; + } + case 53: { - @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.Position build() { - dev.slimevr.bridge.ProtobufMessages.Position result = buildPartial(); - if (!result.isInitialized()) { - throw newUninitializedMessageException(result); - } - return result; - } + qy_ = input.readFloat(); + break; + } + case 61: { - @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.Position buildPartial() { - dev.slimevr.bridge.ProtobufMessages.Position result = new dev.slimevr.bridge.ProtobufMessages.Position(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - result.trackerId_ = trackerId_; - result.x_ = x_; - result.y_ = y_; - result.z_ = z_; - result.qx_ = qx_; - result.qy_ = qy_; - result.qz_ = qz_; - result.qw_ = qw_; - if (((from_bitField0_ & 0x00000001) != 0)) { - to_bitField0_ |= 0x00000001; + qz_ = input.readFloat(); + break; + } + case 69: { + + qw_ = input.readFloat(); + break; + } + case 72: { + int rawValue = input.readEnum(); + bitField0_ |= 0x00000008; + dataSource_ = rawValue; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } } - result.dataSource_ = dataSource_; - result.bitField0_ = to_bitField0_; - onBuilt(); - return result; + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_Position_descriptor; + } - @java.lang.Override - public Builder clone() { - return super.clone(); - } - @java.lang.Override - public Builder setField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.setField(field, value); - } - @java.lang.Override - public Builder clearField( - com.google.protobuf.Descriptors.FieldDescriptor field) { - return super.clearField(field); - } - @java.lang.Override - public Builder clearOneof( - com.google.protobuf.Descriptors.OneofDescriptor oneof) { - return super.clearOneof(oneof); - } - @java.lang.Override - public Builder setRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - int index, java.lang.Object value) { - return super.setRepeatedField(field, index, value); - } - @java.lang.Override - public Builder addRepeatedField( - com.google.protobuf.Descriptors.FieldDescriptor field, - java.lang.Object value) { - return super.addRepeatedField(field, value); - } - @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof dev.slimevr.bridge.ProtobufMessages.Position) { - return mergeFrom((dev.slimevr.bridge.ProtobufMessages.Position)other); - } else { - super.mergeFrom(other); - return this; - } - } - - public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.Position other) { - if (other == dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance()) return this; - if (other.getTrackerId() != 0) { - setTrackerId(other.getTrackerId()); - } - if (other.getX() != 0F) { - setX(other.getX()); - } - if (other.getY() != 0F) { - setY(other.getY()); - } - if (other.getZ() != 0F) { - setZ(other.getZ()); - } - if (other.getQx() != 0F) { - setQx(other.getQx()); - } - if (other.getQy() != 0F) { - setQy(other.getQy()); - } - if (other.getQz() != 0F) { - setQz(other.getQz()); - } - if (other.getQw() != 0F) { - setQw(other.getQw()); - } - if (other.hasDataSource()) { - setDataSource(other.getDataSource()); - } - this.mergeUnknownFields(other.unknownFields); - onChanged(); - return this; - } - - @java.lang.Override - public final boolean isInitialized() { - return true; - } - - @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - dev.slimevr.bridge.ProtobufMessages.Position parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (dev.slimevr.bridge.ProtobufMessages.Position) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); - } - } - return this; - } - private int bitField0_; + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_Position_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.slimevr.bridge.ProtobufMessages.Position.class, dev.slimevr.bridge.ProtobufMessages.Position.Builder.class); + } - private int trackerId_ ; - /** - * int32 tracker_id = 1; - * @return The trackerId. - */ - @java.lang.Override - public int getTrackerId() { - return trackerId_; - } + /** + * Protobuf enum {@code messages.Position.DataSource} + */ + public enum DataSource + implements com.google.protobuf.ProtocolMessageEnum { /** - * int32 tracker_id = 1; - * @param value The trackerId to set. - * @return This builder for chaining. + * NONE = 0; */ - public Builder setTrackerId(int value) { - - trackerId_ = value; - onChanged(); - return this; - } + NONE(0), /** - * int32 tracker_id = 1; - * @return This builder for chaining. + * IMU = 1; */ - public Builder clearTrackerId() { - - trackerId_ = 0; - onChanged(); - return this; - } - - private float x_ ; + IMU(1), /** - * float x = 2; - * @return The x. + * PRECISION = 2; */ - @java.lang.Override - public float getX() { - return x_; - } + PRECISION(2), /** - * float x = 2; - * @param value The x to set. - * @return This builder for chaining. + * FULL = 3; */ - public Builder setX(float value) { - - x_ = value; - onChanged(); - return this; - } + FULL(3), + UNRECOGNIZED(-1), + ; + /** - * float x = 2; - * @return This builder for chaining. + * NONE = 0; */ - public Builder clearX() { - - x_ = 0F; - onChanged(); - return this; - } - - private float y_ ; + public static final int NONE_VALUE = 0; /** - * float y = 3; - * @return The y. + * IMU = 1; */ - @java.lang.Override - public float getY() { - return y_; - } + public static final int IMU_VALUE = 1; /** - * float y = 3; - * @param value The y to set. - * @return This builder for chaining. + * PRECISION = 2; */ - public Builder setY(float value) { - - y_ = value; - onChanged(); - return this; - } + public static final int PRECISION_VALUE = 2; /** - * float y = 3; - * @return This builder for chaining. + * FULL = 3; */ - public Builder clearY() { - - y_ = 0F; - onChanged(); - return this; + public static final int FULL_VALUE = 3; + + + @Override + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; } - private float z_ ; /** - * float z = 4; - * @return The z. + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. */ - @java.lang.Override - public float getZ() { - return z_; + @java.lang.Deprecated + public static DataSource valueOf(int value) { + return forNumber(value); } + /** - * float z = 4; - * @param value The z to set. - * @return This builder for chaining. + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. */ - public Builder setZ(float value) { - - z_ = value; - onChanged(); - return this; + public static DataSource forNumber(int value) { + switch (value) { + case 0: return NONE; + case 1: return IMU; + case 2: return PRECISION; + case 3: return FULL; + default: return null; + } } - /** - * float z = 4; - * @return This builder for chaining. - */ - public Builder clearZ() { - - z_ = 0F; - onChanged(); - return this; + + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; } + private static final com.google.protobuf.Internal.EnumLiteMap< + DataSource> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + @Override + public DataSource findValueByNumber(int number) { + return DataSource.forNumber(number); + } + }; - private float qx_ ; - /** - * float qx = 5; - * @return The qx. - */ - @java.lang.Override - public float getQx() { - return qx_; + @Override + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); } - /** - * float qx = 5; - * @param value The qx to set. - * @return This builder for chaining. - */ - public Builder setQx(float value) { - - qx_ = value; - onChanged(); - return this; - } - /** - * float qx = 5; - * @return This builder for chaining. - */ - public Builder clearQx() { - - qx_ = 0F; - onChanged(); - return this; - } - - private float qy_ ; - /** - * float qy = 6; - * @return The qy. - */ - @java.lang.Override - public float getQy() { - return qy_; - } - /** - * float qy = 6; - * @param value The qy to set. - * @return This builder for chaining. - */ - public Builder setQy(float value) { - - qy_ = value; - onChanged(); - return this; - } - /** - * float qy = 6; - * @return This builder for chaining. - */ - public Builder clearQy() { - - qy_ = 0F; - onChanged(); - return this; - } - - private float qz_ ; - /** - * float qz = 7; - * @return The qz. - */ - @java.lang.Override - public float getQz() { - return qz_; - } - /** - * float qz = 7; - * @param value The qz to set. - * @return This builder for chaining. - */ - public Builder setQz(float value) { - - qz_ = value; - onChanged(); - return this; + @Override + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); } - /** - * float qz = 7; - * @return This builder for chaining. - */ - public Builder clearQz() { - - qz_ = 0F; - onChanged(); - return this; + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return dev.slimevr.bridge.ProtobufMessages.Position.getDescriptor().getEnumTypes().get(0); } - private float qw_ ; - /** - * float qw = 8; - * @return The qw. - */ - @java.lang.Override - public float getQw() { - return qw_; - } - /** - * float qw = 8; - * @param value The qw to set. - * @return This builder for chaining. - */ - public Builder setQw(float value) { - - qw_ = value; - onChanged(); - return this; - } - /** - * float qw = 8; - * @return This builder for chaining. - */ - public Builder clearQw() { - - qw_ = 0F; - onChanged(); - return this; - } + private static final DataSource[] VALUES = values(); - private int dataSource_ = 0; - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @return Whether the dataSource field is set. - */ - @java.lang.Override public boolean hasDataSource() { - return ((bitField0_ & 0x00000001) != 0); - } - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @return The enum numeric value on the wire for dataSource. - */ - @java.lang.Override public int getDataSourceValue() { - return dataSource_; - } - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @param value The enum numeric value on the wire for dataSource to set. - * @return This builder for chaining. - */ - public Builder setDataSourceValue(int value) { - bitField0_ |= 0x00000001; - dataSource_ = value; - onChanged(); - return this; - } - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @return The dataSource. - */ - @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.Position.DataSource getDataSource() { - @SuppressWarnings("deprecation") - dev.slimevr.bridge.ProtobufMessages.Position.DataSource result = dev.slimevr.bridge.ProtobufMessages.Position.DataSource.valueOf(dataSource_); - return result == null ? dev.slimevr.bridge.ProtobufMessages.Position.DataSource.UNRECOGNIZED : result; - } - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @param value The dataSource to set. - * @return This builder for chaining. - */ - public Builder setDataSource(dev.slimevr.bridge.ProtobufMessages.Position.DataSource value) { - if (value == null) { - throw new NullPointerException(); + public static DataSource valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); } - bitField0_ |= 0x00000001; - dataSource_ = value.getNumber(); - onChanged(); - return this; - } - /** - * .dev.slimevr.bridge.Position.DataSource data_source = 9; - * @return This builder for chaining. - */ - public Builder clearDataSource() { - bitField0_ = (bitField0_ & ~0x00000001); - dataSource_ = 0; - onChanged(); - return this; - } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); - } - - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; } + private final int value; - // @@protoc_insertion_point(builder_scope:dev.slimevr.bridge.Position) - } - - // @@protoc_insertion_point(class_scope:dev.slimevr.bridge.Position) - private static final dev.slimevr.bridge.ProtobufMessages.Position DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.Position(); - } - - public static dev.slimevr.bridge.ProtobufMessages.Position getDefaultInstance() { - return DEFAULT_INSTANCE; - } - - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public Position parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new Position(input, extensionRegistry); + private DataSource(int value) { + this.value = value; } - }; - - public static com.google.protobuf.Parser parser() { - return PARSER; - } - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; + // @@protoc_insertion_point(enum_scope:messages.Position.DataSource) } + private int bitField0_; + public static final int TRACKER_ID_FIELD_NUMBER = 1; + private int trackerId_; + /** + * int32 tracker_id = 1; + * @return The trackerId. + */ @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.Position getDefaultInstanceForType() { - return DEFAULT_INSTANCE; + public int getTrackerId() { + return trackerId_; } - } - - public interface UserActionOrBuilder extends - // @@protoc_insertion_point(interface_extends:dev.slimevr.bridge.UserAction) - com.google.protobuf.MessageOrBuilder { - + public static final int X_FIELD_NUMBER = 2; + private float x_; /** - * string name = 1; - * @return The name. + * float x = 2; + * @return Whether the x field is set. */ - java.lang.String getName(); + @java.lang.Override + public boolean hasX() { + return ((bitField0_ & 0x00000001) != 0); + } /** - * string name = 1; - * @return The bytes for name. + * float x = 2; + * @return The x. */ - com.google.protobuf.ByteString - getNameBytes(); + @java.lang.Override + public float getX() { + return x_; + } + public static final int Y_FIELD_NUMBER = 3; + private float y_; /** - * map<string, string> action_arguments = 2; - */ - int getActionArgumentsCount(); - /** - * map<string, string> action_arguments = 2; - */ - boolean containsActionArguments( - java.lang.String key); - /** - * Use {@link #getActionArgumentsMap()} instead. - */ - @java.lang.Deprecated - java.util.Map - getActionArguments(); - /** - * map<string, string> action_arguments = 2; + * float y = 3; + * @return Whether the y field is set. */ - java.util.Map - getActionArgumentsMap(); + @java.lang.Override + public boolean hasY() { + return ((bitField0_ & 0x00000002) != 0); + } /** - * map<string, string> action_arguments = 2; + * float y = 3; + * @return The y. */ + @java.lang.Override + public float getY() { + return y_; + } - java.lang.String getActionArgumentsOrDefault( - java.lang.String key, - java.lang.String defaultValue); + public static final int Z_FIELD_NUMBER = 4; + private float z_; /** - * map<string, string> action_arguments = 2; + * float z = 4; + * @return Whether the z field is set. */ - - java.lang.String getActionArgumentsOrThrow( - java.lang.String key); - } - /** - * Protobuf type {@code dev.slimevr.bridge.UserAction} - */ - public static final class UserAction extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:dev.slimevr.bridge.UserAction) - UserActionOrBuilder { - private static final long serialVersionUID = 0L; - // Use UserAction.newBuilder() to construct. - private UserAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private UserAction() { - name_ = ""; - } - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new UserAction(); + public boolean hasZ() { + return ((bitField0_ & 0x00000004) != 0); } - + /** + * float z = 4; + * @return The z. + */ @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; - } - private UserAction( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - int mutable_bitField0_ = 0; - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 10: { - java.lang.String s = input.readStringRequireUtf8(); - - name_ = s; - break; - } - case 18: { - if (!((mutable_bitField0_ & 0x00000001) != 0)) { - actionArguments_ = com.google.protobuf.MapField.newMapField( - ActionArgumentsDefaultEntryHolder.defaultEntry); - mutable_bitField0_ |= 0x00000001; - } - com.google.protobuf.MapEntry - actionArguments__ = input.readMessage( - ActionArgumentsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry); - actionArguments_.getMutableMap().put( - actionArguments__.getKey(), actionArguments__.getValue()); - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); - } - } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_UserAction_descriptor; + public float getZ() { + return z_; } - @SuppressWarnings({"rawtypes"}) - @java.lang.Override - protected com.google.protobuf.MapField internalGetMapField( - int number) { - switch (number) { - case 2: - return internalGetActionArguments(); - default: - throw new RuntimeException( - "Invalid map field number: " + number); - } - } + public static final int QX_FIELD_NUMBER = 5; + private float qx_; + /** + * float qx = 5; + * @return The qx. + */ @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_UserAction_fieldAccessorTable - .ensureFieldAccessorsInitialized( - dev.slimevr.bridge.ProtobufMessages.UserAction.class, dev.slimevr.bridge.ProtobufMessages.UserAction.Builder.class); + public float getQx() { + return qx_; } - public static final int NAME_FIELD_NUMBER = 1; - private volatile java.lang.Object name_; + public static final int QY_FIELD_NUMBER = 6; + private float qy_; /** - * string name = 1; - * @return The name. + * float qy = 6; + * @return The qy. */ @java.lang.Override - public java.lang.String getName() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - name_ = s; - return s; - } + public float getQy() { + return qy_; } + + public static final int QZ_FIELD_NUMBER = 7; + private float qz_; /** - * string name = 1; - * @return The bytes for name. + * float qz = 7; + * @return The qz. */ @java.lang.Override - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } - } - - public static final int ACTION_ARGUMENTS_FIELD_NUMBER = 2; - private static final class ActionArgumentsDefaultEntryHolder { - static final com.google.protobuf.MapEntry< - java.lang.String, java.lang.String> defaultEntry = - com.google.protobuf.MapEntry - .newDefaultInstance( - dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_UserAction_ActionArgumentsEntry_descriptor, - com.google.protobuf.WireFormat.FieldType.STRING, - "", - com.google.protobuf.WireFormat.FieldType.STRING, - ""); - } - private com.google.protobuf.MapField< - java.lang.String, java.lang.String> actionArguments_; - private com.google.protobuf.MapField - internalGetActionArguments() { - if (actionArguments_ == null) { - return com.google.protobuf.MapField.emptyMapField( - ActionArgumentsDefaultEntryHolder.defaultEntry); - } - return actionArguments_; + public float getQz() { + return qz_; } - @Override - public int getActionArgumentsCount() { - return internalGetActionArguments().getMap().size(); - } + public static final int QW_FIELD_NUMBER = 8; + private float qw_; /** - * map<string, string> action_arguments = 2; + * float qw = 8; + * @return The qw. */ - @java.lang.Override - public boolean containsActionArguments( - java.lang.String key) { - if (key == null) { throw new java.lang.NullPointerException(); } - return internalGetActionArguments().getMap().containsKey(key); + public float getQw() { + return qw_; } + + public static final int DATA_SOURCE_FIELD_NUMBER = 9; + private int dataSource_; /** - * Use {@link #getActionArgumentsMap()} instead. + * .messages.Position.DataSource data_source = 9; + * @return Whether the dataSource field is set. */ - @java.lang.Override - @java.lang.Deprecated - public java.util.Map getActionArguments() { - return getActionArgumentsMap(); + @java.lang.Override public boolean hasDataSource() { + return ((bitField0_ & 0x00000008) != 0); } /** - * map<string, string> action_arguments = 2; + * .messages.Position.DataSource data_source = 9; + * @return The enum numeric value on the wire for dataSource. */ - @java.lang.Override - - public java.util.Map getActionArgumentsMap() { - return internalGetActionArguments().getMap(); + @java.lang.Override public int getDataSourceValue() { + return dataSource_; } /** - * map<string, string> action_arguments = 2; + * .messages.Position.DataSource data_source = 9; + * @return The dataSource. */ - @java.lang.Override - - public java.lang.String getActionArgumentsOrDefault( - java.lang.String key, - java.lang.String defaultValue) { - if (key == null) { throw new java.lang.NullPointerException(); } - java.util.Map map = - internalGetActionArguments().getMap(); - return map.containsKey(key) ? map.get(key) : defaultValue; - } - /** - * map<string, string> action_arguments = 2; - */ - @java.lang.Override - - public java.lang.String getActionArgumentsOrThrow( - java.lang.String key) { - if (key == null) { throw new java.lang.NullPointerException(); } - java.util.Map map = - internalGetActionArguments().getMap(); - if (!map.containsKey(key)) { - throw new java.lang.IllegalArgumentException(); - } - return map.get(key); + @java.lang.Override public dev.slimevr.bridge.ProtobufMessages.Position.DataSource getDataSource() { + @SuppressWarnings("deprecation") + dev.slimevr.bridge.ProtobufMessages.Position.DataSource result = dev.slimevr.bridge.ProtobufMessages.Position.DataSource.valueOf(dataSource_); + return result == null ? dev.slimevr.bridge.ProtobufMessages.Position.DataSource.UNRECOGNIZED : result; } private byte memoizedIsInitialized = -1; @@ -1570,15 +923,33 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (!getNameBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + if (trackerId_ != 0) { + output.writeInt32(1, trackerId_); + } + if (((bitField0_ & 0x00000001) != 0)) { + output.writeFloat(2, x_); + } + if (((bitField0_ & 0x00000002) != 0)) { + output.writeFloat(3, y_); + } + if (((bitField0_ & 0x00000004) != 0)) { + output.writeFloat(4, z_); + } + if (qx_ != 0F) { + output.writeFloat(5, qx_); + } + if (qy_ != 0F) { + output.writeFloat(6, qy_); + } + if (qz_ != 0F) { + output.writeFloat(7, qz_); + } + if (qw_ != 0F) { + output.writeFloat(8, qw_); + } + if (((bitField0_ & 0x00000008) != 0)) { + output.writeEnum(9, dataSource_); } - com.google.protobuf.GeneratedMessageV3 - .serializeStringMapTo( - output, - internalGetActionArguments(), - ActionArgumentsDefaultEntryHolder.defaultEntry, - 2); unknownFields.writeTo(output); } @@ -1588,18 +959,41 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (!getNameBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + if (trackerId_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, trackerId_); } - for (java.util.Map.Entry entry - : internalGetActionArguments().getMap().entrySet()) { - com.google.protobuf.MapEntry - actionArguments__ = ActionArgumentsDefaultEntryHolder.defaultEntry.newBuilderForType() - .setKey(entry.getKey()) - .setValue(entry.getValue()) - .build(); + if (((bitField0_ & 0x00000001) != 0)) { size += com.google.protobuf.CodedOutputStream - .computeMessageSize(2, actionArguments__); + .computeFloatSize(2, x_); + } + if (((bitField0_ & 0x00000002) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(3, y_); + } + if (((bitField0_ & 0x00000004) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(4, z_); + } + if (qx_ != 0F) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(5, qx_); + } + if (qy_ != 0F) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(6, qy_); + } + if (qz_ != 0F) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(7, qz_); + } + if (qw_ != 0F) { + size += com.google.protobuf.CodedOutputStream + .computeFloatSize(8, qw_); + } + if (((bitField0_ & 0x00000008) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(9, dataSource_); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -1611,15 +1005,47 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.UserAction)) { + if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.Position)) { return super.equals(obj); } - dev.slimevr.bridge.ProtobufMessages.UserAction other = (dev.slimevr.bridge.ProtobufMessages.UserAction) obj; + dev.slimevr.bridge.ProtobufMessages.Position other = (dev.slimevr.bridge.ProtobufMessages.Position) obj; - if (!getName() - .equals(other.getName())) return false; - if (!internalGetActionArguments().equals( - other.internalGetActionArguments())) return false; + if (getTrackerId() + != other.getTrackerId()) return false; + if (hasX() != other.hasX()) return false; + if (hasX()) { + if (java.lang.Float.floatToIntBits(getX()) + != java.lang.Float.floatToIntBits( + other.getX())) return false; + } + if (hasY() != other.hasY()) return false; + if (hasY()) { + if (java.lang.Float.floatToIntBits(getY()) + != java.lang.Float.floatToIntBits( + other.getY())) return false; + } + if (hasZ() != other.hasZ()) return false; + if (hasZ()) { + if (java.lang.Float.floatToIntBits(getZ()) + != java.lang.Float.floatToIntBits( + other.getZ())) return false; + } + if (java.lang.Float.floatToIntBits(getQx()) + != java.lang.Float.floatToIntBits( + other.getQx())) return false; + if (java.lang.Float.floatToIntBits(getQy()) + != java.lang.Float.floatToIntBits( + other.getQy())) return false; + if (java.lang.Float.floatToIntBits(getQz()) + != java.lang.Float.floatToIntBits( + other.getQz())) return false; + if (java.lang.Float.floatToIntBits(getQw()) + != java.lang.Float.floatToIntBits( + other.getQw())) return false; + if (hasDataSource() != other.hasDataSource()) return false; + if (hasDataSource()) { + if (dataSource_ != other.dataSource_) return false; + } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -1631,80 +1057,107 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + NAME_FIELD_NUMBER; - hash = (53 * hash) + getName().hashCode(); - if (!internalGetActionArguments().getMap().isEmpty()) { - hash = (37 * hash) + ACTION_ARGUMENTS_FIELD_NUMBER; - hash = (53 * hash) + internalGetActionArguments().hashCode(); + hash = (37 * hash) + TRACKER_ID_FIELD_NUMBER; + hash = (53 * hash) + getTrackerId(); + if (hasX()) { + hash = (37 * hash) + X_FIELD_NUMBER; + hash = (53 * hash) + java.lang.Float.floatToIntBits( + getX()); + } + if (hasY()) { + hash = (37 * hash) + Y_FIELD_NUMBER; + hash = (53 * hash) + java.lang.Float.floatToIntBits( + getY()); + } + if (hasZ()) { + hash = (37 * hash) + Z_FIELD_NUMBER; + hash = (53 * hash) + java.lang.Float.floatToIntBits( + getZ()); + } + hash = (37 * hash) + QX_FIELD_NUMBER; + hash = (53 * hash) + java.lang.Float.floatToIntBits( + getQx()); + hash = (37 * hash) + QY_FIELD_NUMBER; + hash = (53 * hash) + java.lang.Float.floatToIntBits( + getQy()); + hash = (37 * hash) + QZ_FIELD_NUMBER; + hash = (53 * hash) + java.lang.Float.floatToIntBits( + getQz()); + hash = (37 * hash) + QW_FIELD_NUMBER; + hash = (53 * hash) + java.lang.Float.floatToIntBits( + getQw()); + if (hasDataSource()) { + hash = (37 * hash) + DATA_SOURCE_FIELD_NUMBER; + hash = (53 * hash) + dataSource_; } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(byte[] data) + public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(java.io.InputStream input) + public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseDelimitedFrom(java.io.InputStream input) + public static dev.slimevr.bridge.ProtobufMessages.Position parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseDelimitedFrom( + public static dev.slimevr.bridge.ProtobufMessages.Position parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.Position parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -1717,7 +1170,7 @@ public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.UserAction prototype) { + public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.Position prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -1733,50 +1186,26 @@ protected Builder newBuilderForType( return builder; } /** - * Protobuf type {@code dev.slimevr.bridge.UserAction} + * Protobuf type {@code messages.Position} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:dev.slimevr.bridge.UserAction) - dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder { + // @@protoc_insertion_point(builder_implements:messages.Position) + dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_UserAction_descriptor; + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_Position_descriptor; } - @Override - @SuppressWarnings({"rawtypes"}) - protected com.google.protobuf.MapField internalGetMapField( - int number) { - switch (number) { - case 2: - return internalGetActionArguments(); - default: - throw new RuntimeException( - "Invalid map field number: " + number); - } - } - @Override - @SuppressWarnings({"rawtypes"}) - protected com.google.protobuf.MapField internalGetMutableMapField( - int number) { - switch (number) { - case 2: - return internalGetMutableActionArguments(); - default: - throw new RuntimeException( - "Invalid map field number: " + number); - } - } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_UserAction_fieldAccessorTable + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_Position_fieldAccessorTable .ensureFieldAccessorsInitialized( - dev.slimevr.bridge.ProtobufMessages.UserAction.class, dev.slimevr.bridge.ProtobufMessages.UserAction.Builder.class); + dev.slimevr.bridge.ProtobufMessages.Position.class, dev.slimevr.bridge.ProtobufMessages.Position.Builder.class); } - // Construct using dev.slimevr.bridge.ProtobufMessages.UserAction.newBuilder() + // Construct using dev.slimevr.bridge.ProtobufMessages.Position.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -1794,26 +1223,41 @@ private void maybeForceBuilderInitialization() { @java.lang.Override public Builder clear() { super.clear(); - name_ = ""; + trackerId_ = 0; - internalGetMutableActionArguments().clear(); + x_ = 0F; + bitField0_ = (bitField0_ & ~0x00000001); + y_ = 0F; + bitField0_ = (bitField0_ & ~0x00000002); + z_ = 0F; + bitField0_ = (bitField0_ & ~0x00000004); + qx_ = 0F; + + qy_ = 0F; + + qz_ = 0F; + + qw_ = 0F; + + dataSource_ = 0; + bitField0_ = (bitField0_ & ~0x00000008); return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_UserAction_descriptor; + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_Position_descriptor; } @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.UserAction getDefaultInstanceForType() { - return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance(); + public dev.slimevr.bridge.ProtobufMessages.Position getDefaultInstanceForType() { + return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance(); } @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.UserAction build() { - dev.slimevr.bridge.ProtobufMessages.UserAction result = buildPartial(); + public dev.slimevr.bridge.ProtobufMessages.Position build() { + dev.slimevr.bridge.ProtobufMessages.Position result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -1821,12 +1265,32 @@ public dev.slimevr.bridge.ProtobufMessages.UserAction build() { } @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.UserAction buildPartial() { - dev.slimevr.bridge.ProtobufMessages.UserAction result = new dev.slimevr.bridge.ProtobufMessages.UserAction(this); + public dev.slimevr.bridge.ProtobufMessages.Position buildPartial() { + dev.slimevr.bridge.ProtobufMessages.Position result = new dev.slimevr.bridge.ProtobufMessages.Position(this); int from_bitField0_ = bitField0_; - result.name_ = name_; - result.actionArguments_ = internalGetActionArguments(); - result.actionArguments_.makeImmutable(); + int to_bitField0_ = 0; + result.trackerId_ = trackerId_; + if (((from_bitField0_ & 0x00000001) != 0)) { + result.x_ = x_; + to_bitField0_ |= 0x00000001; + } + if (((from_bitField0_ & 0x00000002) != 0)) { + result.y_ = y_; + to_bitField0_ |= 0x00000002; + } + if (((from_bitField0_ & 0x00000004) != 0)) { + result.z_ = z_; + to_bitField0_ |= 0x00000004; + } + result.qx_ = qx_; + result.qy_ = qy_; + result.qz_ = qz_; + result.qw_ = qw_; + if (((from_bitField0_ & 0x00000008) != 0)) { + to_bitField0_ |= 0x00000008; + } + result.dataSource_ = dataSource_; + result.bitField0_ = to_bitField0_; onBuilt(); return result; } @@ -1865,22 +1329,43 @@ public Builder addRepeatedField( } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof dev.slimevr.bridge.ProtobufMessages.UserAction) { - return mergeFrom((dev.slimevr.bridge.ProtobufMessages.UserAction)other); + if (other instanceof dev.slimevr.bridge.ProtobufMessages.Position) { + return mergeFrom((dev.slimevr.bridge.ProtobufMessages.Position)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.UserAction other) { - if (other == dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance()) return this; - if (!other.getName().isEmpty()) { - name_ = other.name_; - onChanged(); + public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.Position other) { + if (other == dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance()) return this; + if (other.getTrackerId() != 0) { + setTrackerId(other.getTrackerId()); + } + if (other.hasX()) { + setX(other.getX()); + } + if (other.hasY()) { + setY(other.getY()); + } + if (other.hasZ()) { + setZ(other.getZ()); + } + if (other.getQx() != 0F) { + setQx(other.getQx()); + } + if (other.getQy() != 0F) { + setQy(other.getQy()); + } + if (other.getQz() != 0F) { + setQz(other.getQz()); + } + if (other.getQw() != 0F) { + setQw(other.getQw()); + } + if (other.hasDataSource()) { + setDataSource(other.getDataSource()); } - internalGetMutableActionArguments().mergeFrom( - other.internalGetActionArguments()); this.mergeUnknownFields(other.unknownFields); onChanged(); return this; @@ -1896,11 +1381,11 @@ public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - dev.slimevr.bridge.ProtobufMessages.UserAction parsedMessage = null; + dev.slimevr.bridge.ProtobufMessages.Position parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (dev.slimevr.bridge.ProtobufMessages.UserAction) e.getUnfinishedMessage(); + parsedMessage = (dev.slimevr.bridge.ProtobufMessages.Position) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { @@ -1911,480 +1396,2746 @@ public Builder mergeFrom( } private int bitField0_; - private java.lang.Object name_ = ""; + private int trackerId_ ; /** - * string name = 1; - * @return The name. + * int32 tracker_id = 1; + * @return The trackerId. */ - @Override - public java.lang.String getName() { - java.lang.Object ref = name_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - name_ = s; - return s; - } else { - return (java.lang.String) ref; - } + @java.lang.Override + public int getTrackerId() { + return trackerId_; } /** - * string name = 1; - * @return The bytes for name. + * int32 tracker_id = 1; + * @param value The trackerId to set. + * @return This builder for chaining. */ - @Override - public com.google.protobuf.ByteString - getNameBytes() { - java.lang.Object ref = name_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - name_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + public Builder setTrackerId(int value) { + + trackerId_ = value; + onChanged(); + return this; } /** - * string name = 1; - * @param value The name to set. + * int32 tracker_id = 1; * @return This builder for chaining. */ - public Builder setName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - name_ = value; + public Builder clearTrackerId() { + + trackerId_ = 0; + onChanged(); + return this; + } + + private float x_ ; + /** + * float x = 2; + * @return Whether the x field is set. + */ + @java.lang.Override + public boolean hasX() { + return ((bitField0_ & 0x00000001) != 0); + } + /** + * float x = 2; + * @return The x. + */ + @java.lang.Override + public float getX() { + return x_; + } + /** + * float x = 2; + * @param value The x to set. + * @return This builder for chaining. + */ + public Builder setX(float value) { + bitField0_ |= 0x00000001; + x_ = value; + onChanged(); + return this; + } + /** + * float x = 2; + * @return This builder for chaining. + */ + public Builder clearX() { + bitField0_ = (bitField0_ & ~0x00000001); + x_ = 0F; + onChanged(); + return this; + } + + private float y_ ; + /** + * float y = 3; + * @return Whether the y field is set. + */ + @java.lang.Override + public boolean hasY() { + return ((bitField0_ & 0x00000002) != 0); + } + /** + * float y = 3; + * @return The y. + */ + @java.lang.Override + public float getY() { + return y_; + } + /** + * float y = 3; + * @param value The y to set. + * @return This builder for chaining. + */ + public Builder setY(float value) { + bitField0_ |= 0x00000002; + y_ = value; + onChanged(); + return this; + } + /** + * float y = 3; + * @return This builder for chaining. + */ + public Builder clearY() { + bitField0_ = (bitField0_ & ~0x00000002); + y_ = 0F; + onChanged(); + return this; + } + + private float z_ ; + /** + * float z = 4; + * @return Whether the z field is set. + */ + @java.lang.Override + public boolean hasZ() { + return ((bitField0_ & 0x00000004) != 0); + } + /** + * float z = 4; + * @return The z. + */ + @java.lang.Override + public float getZ() { + return z_; + } + /** + * float z = 4; + * @param value The z to set. + * @return This builder for chaining. + */ + public Builder setZ(float value) { + bitField0_ |= 0x00000004; + z_ = value; + onChanged(); + return this; + } + /** + * float z = 4; + * @return This builder for chaining. + */ + public Builder clearZ() { + bitField0_ = (bitField0_ & ~0x00000004); + z_ = 0F; + onChanged(); + return this; + } + + private float qx_ ; + /** + * float qx = 5; + * @return The qx. + */ + @java.lang.Override + public float getQx() { + return qx_; + } + /** + * float qx = 5; + * @param value The qx to set. + * @return This builder for chaining. + */ + public Builder setQx(float value) { + + qx_ = value; + onChanged(); + return this; + } + /** + * float qx = 5; + * @return This builder for chaining. + */ + public Builder clearQx() { + + qx_ = 0F; onChanged(); return this; } + + private float qy_ ; + /** + * float qy = 6; + * @return The qy. + */ + @java.lang.Override + public float getQy() { + return qy_; + } + /** + * float qy = 6; + * @param value The qy to set. + * @return This builder for chaining. + */ + public Builder setQy(float value) { + + qy_ = value; + onChanged(); + return this; + } + /** + * float qy = 6; + * @return This builder for chaining. + */ + public Builder clearQy() { + + qy_ = 0F; + onChanged(); + return this; + } + + private float qz_ ; + /** + * float qz = 7; + * @return The qz. + */ + @java.lang.Override + public float getQz() { + return qz_; + } + /** + * float qz = 7; + * @param value The qz to set. + * @return This builder for chaining. + */ + public Builder setQz(float value) { + + qz_ = value; + onChanged(); + return this; + } + /** + * float qz = 7; + * @return This builder for chaining. + */ + public Builder clearQz() { + + qz_ = 0F; + onChanged(); + return this; + } + + private float qw_ ; + /** + * float qw = 8; + * @return The qw. + */ + @java.lang.Override + public float getQw() { + return qw_; + } + /** + * float qw = 8; + * @param value The qw to set. + * @return This builder for chaining. + */ + public Builder setQw(float value) { + + qw_ = value; + onChanged(); + return this; + } + /** + * float qw = 8; + * @return This builder for chaining. + */ + public Builder clearQw() { + + qw_ = 0F; + onChanged(); + return this; + } + + private int dataSource_ = 0; + /** + * .messages.Position.DataSource data_source = 9; + * @return Whether the dataSource field is set. + */ + @java.lang.Override public boolean hasDataSource() { + return ((bitField0_ & 0x00000008) != 0); + } + /** + * .messages.Position.DataSource data_source = 9; + * @return The enum numeric value on the wire for dataSource. + */ + @java.lang.Override public int getDataSourceValue() { + return dataSource_; + } + /** + * .messages.Position.DataSource data_source = 9; + * @param value The enum numeric value on the wire for dataSource to set. + * @return This builder for chaining. + */ + public Builder setDataSourceValue(int value) { + bitField0_ |= 0x00000008; + dataSource_ = value; + onChanged(); + return this; + } + /** + * .messages.Position.DataSource data_source = 9; + * @return The dataSource. + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.Position.DataSource getDataSource() { + @SuppressWarnings("deprecation") + dev.slimevr.bridge.ProtobufMessages.Position.DataSource result = dev.slimevr.bridge.ProtobufMessages.Position.DataSource.valueOf(dataSource_); + return result == null ? dev.slimevr.bridge.ProtobufMessages.Position.DataSource.UNRECOGNIZED : result; + } + /** + * .messages.Position.DataSource data_source = 9; + * @param value The dataSource to set. + * @return This builder for chaining. + */ + public Builder setDataSource(dev.slimevr.bridge.ProtobufMessages.Position.DataSource value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000008; + dataSource_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .messages.Position.DataSource data_source = 9; + * @return This builder for chaining. + */ + public Builder clearDataSource() { + bitField0_ = (bitField0_ & ~0x00000008); + dataSource_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:messages.Position) + } + + // @@protoc_insertion_point(class_scope:messages.Position) + private static final dev.slimevr.bridge.ProtobufMessages.Position DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.Position(); + } + + public static dev.slimevr.bridge.ProtobufMessages.Position getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public Position parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new Position(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.Position getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface UserActionOrBuilder extends + // @@protoc_insertion_point(interface_extends:messages.UserAction) + com.google.protobuf.MessageOrBuilder { + + /** + * string name = 1; + * @return The name. + */ + java.lang.String getName(); + /** + * string name = 1; + * @return The bytes for name. + */ + com.google.protobuf.ByteString + getNameBytes(); + + /** + * map<string, string> action_arguments = 2; + */ + int getActionArgumentsCount(); + /** + * map<string, string> action_arguments = 2; + */ + boolean containsActionArguments( + java.lang.String key); + /** + * Use {@link #getActionArgumentsMap()} instead. + */ + @java.lang.Deprecated + java.util.Map + getActionArguments(); + /** + * map<string, string> action_arguments = 2; + */ + java.util.Map + getActionArgumentsMap(); + /** + * map<string, string> action_arguments = 2; + */ + + java.lang.String getActionArgumentsOrDefault( + java.lang.String key, + java.lang.String defaultValue); + /** + * map<string, string> action_arguments = 2; + */ + + java.lang.String getActionArgumentsOrThrow( + java.lang.String key); + } + /** + * Protobuf type {@code messages.UserAction} + */ + public static final class UserAction extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:messages.UserAction) + UserActionOrBuilder { + private static final long serialVersionUID = 0L; + // Use UserAction.newBuilder() to construct. + private UserAction(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private UserAction() { + name_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new UserAction(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private UserAction( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 10: { + java.lang.String s = input.readStringRequireUtf8(); + + name_ = s; + break; + } + case 18: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + actionArguments_ = com.google.protobuf.MapField.newMapField( + ActionArgumentsDefaultEntryHolder.defaultEntry); + mutable_bitField0_ |= 0x00000001; + } + com.google.protobuf.MapEntry + actionArguments__ = input.readMessage( + ActionArgumentsDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry); + actionArguments_.getMutableMap().put( + actionArguments__.getKey(), actionArguments__.getValue()); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapField internalGetMapField( + int number) { + switch (number) { + case 2: + return internalGetActionArguments(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.slimevr.bridge.ProtobufMessages.UserAction.class, dev.slimevr.bridge.ProtobufMessages.UserAction.Builder.class); + } + + public static final int NAME_FIELD_NUMBER = 1; + private volatile java.lang.Object name_; + /** + * string name = 1; + * @return The name. + */ + @java.lang.Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } + } + /** + * string name = 1; + * @return The bytes for name. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int ACTION_ARGUMENTS_FIELD_NUMBER = 2; + private static final class ActionArgumentsDefaultEntryHolder { + static final com.google.protobuf.MapEntry< + java.lang.String, java.lang.String> defaultEntry = + com.google.protobuf.MapEntry + .newDefaultInstance( + dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_ActionArgumentsEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); + } + private com.google.protobuf.MapField< + java.lang.String, java.lang.String> actionArguments_; + private com.google.protobuf.MapField + internalGetActionArguments() { + if (actionArguments_ == null) { + return com.google.protobuf.MapField.emptyMapField( + ActionArgumentsDefaultEntryHolder.defaultEntry); + } + return actionArguments_; + } + + @Override + public int getActionArgumentsCount() { + return internalGetActionArguments().getMap().size(); + } + /** + * map<string, string> action_arguments = 2; + */ + + @java.lang.Override + public boolean containsActionArguments( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + return internalGetActionArguments().getMap().containsKey(key); + } + /** + * Use {@link #getActionArgumentsMap()} instead. + */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getActionArguments() { + return getActionArgumentsMap(); + } + /** + * map<string, string> action_arguments = 2; + */ + @java.lang.Override + + public java.util.Map getActionArgumentsMap() { + return internalGetActionArguments().getMap(); + } + /** + * map<string, string> action_arguments = 2; + */ + @java.lang.Override + + public java.lang.String getActionArgumentsOrDefault( + java.lang.String key, + java.lang.String defaultValue) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetActionArguments().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + * map<string, string> action_arguments = 2; + */ + @java.lang.Override + + public java.lang.String getActionArgumentsOrThrow( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetActionArguments().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (!getNameBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 1, name_); + } + com.google.protobuf.GeneratedMessageV3 + .serializeStringMapTo( + output, + internalGetActionArguments(), + ActionArgumentsDefaultEntryHolder.defaultEntry, + 2); + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (!getNameBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(1, name_); + } + for (java.util.Map.Entry entry + : internalGetActionArguments().getMap().entrySet()) { + com.google.protobuf.MapEntry + actionArguments__ = ActionArgumentsDefaultEntryHolder.defaultEntry.newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(2, actionArguments__); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.UserAction)) { + return super.equals(obj); + } + dev.slimevr.bridge.ProtobufMessages.UserAction other = (dev.slimevr.bridge.ProtobufMessages.UserAction) obj; + + if (!getName() + .equals(other.getName())) return false; + if (!internalGetActionArguments().equals( + other.internalGetActionArguments())) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + NAME_FIELD_NUMBER; + hash = (53 * hash) + getName().hashCode(); + if (!internalGetActionArguments().getMap().isEmpty()) { + hash = (37 * hash) + ACTION_ARGUMENTS_FIELD_NUMBER; + hash = (53 * hash) + internalGetActionArguments().hashCode(); + } + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.slimevr.bridge.ProtobufMessages.UserAction parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.UserAction prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code messages.UserAction} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:messages.UserAction) + dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_descriptor; + } + + @Override + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapField internalGetMapField( + int number) { + switch (number) { + case 2: + return internalGetActionArguments(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @Override + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapField internalGetMutableMapField( + int number) { + switch (number) { + case 2: + return internalGetMutableActionArguments(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.slimevr.bridge.ProtobufMessages.UserAction.class, dev.slimevr.bridge.ProtobufMessages.UserAction.Builder.class); + } + + // Construct using dev.slimevr.bridge.ProtobufMessages.UserAction.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + name_ = ""; + + internalGetMutableActionArguments().clear(); + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_UserAction_descriptor; + } + + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.UserAction getDefaultInstanceForType() { + return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance(); + } + + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.UserAction build() { + dev.slimevr.bridge.ProtobufMessages.UserAction result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.UserAction buildPartial() { + dev.slimevr.bridge.ProtobufMessages.UserAction result = new dev.slimevr.bridge.ProtobufMessages.UserAction(this); + int from_bitField0_ = bitField0_; + result.name_ = name_; + result.actionArguments_ = internalGetActionArguments(); + result.actionArguments_.makeImmutable(); + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.slimevr.bridge.ProtobufMessages.UserAction) { + return mergeFrom((dev.slimevr.bridge.ProtobufMessages.UserAction)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.UserAction other) { + if (other == dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance()) return this; + if (!other.getName().isEmpty()) { + name_ = other.name_; + onChanged(); + } + internalGetMutableActionArguments().mergeFrom( + other.internalGetActionArguments()); + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.slimevr.bridge.ProtobufMessages.UserAction parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.slimevr.bridge.ProtobufMessages.UserAction) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int bitField0_; + + private java.lang.Object name_ = ""; + /** + * string name = 1; + * @return The name. + */ + @Override + public java.lang.String getName() { + java.lang.Object ref = name_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + name_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string name = 1; + * @return The bytes for name. + */ + @Override + public com.google.protobuf.ByteString + getNameBytes() { + java.lang.Object ref = name_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + name_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string name = 1; + * @param value The name to set. + * @return This builder for chaining. + */ + public Builder setName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + name_ = value; + onChanged(); + return this; + } + /** + * string name = 1; + * @return This builder for chaining. + */ + public Builder clearName() { + + name_ = getDefaultInstance().getName(); + onChanged(); + return this; + } + /** + * string name = 1; + * @param value The bytes for name to set. + * @return This builder for chaining. + */ + public Builder setNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + name_ = value; + onChanged(); + return this; + } + + private com.google.protobuf.MapField< + java.lang.String, java.lang.String> actionArguments_; + private com.google.protobuf.MapField + internalGetActionArguments() { + if (actionArguments_ == null) { + return com.google.protobuf.MapField.emptyMapField( + ActionArgumentsDefaultEntryHolder.defaultEntry); + } + return actionArguments_; + } + private com.google.protobuf.MapField + internalGetMutableActionArguments() { + onChanged();; + if (actionArguments_ == null) { + actionArguments_ = com.google.protobuf.MapField.newMapField( + ActionArgumentsDefaultEntryHolder.defaultEntry); + } + if (!actionArguments_.isMutable()) { + actionArguments_ = actionArguments_.copy(); + } + return actionArguments_; + } + + @Override + public int getActionArgumentsCount() { + return internalGetActionArguments().getMap().size(); + } + /** + * map<string, string> action_arguments = 2; + */ + + @java.lang.Override + public boolean containsActionArguments( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + return internalGetActionArguments().getMap().containsKey(key); + } + /** + * Use {@link #getActionArgumentsMap()} instead. + */ + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getActionArguments() { + return getActionArgumentsMap(); + } + /** + * map<string, string> action_arguments = 2; + */ + @java.lang.Override + + public java.util.Map getActionArgumentsMap() { + return internalGetActionArguments().getMap(); + } + /** + * map<string, string> action_arguments = 2; + */ + @java.lang.Override + + public java.lang.String getActionArgumentsOrDefault( + java.lang.String key, + java.lang.String defaultValue) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetActionArguments().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; + } + /** + * map<string, string> action_arguments = 2; + */ + @java.lang.Override + + public java.lang.String getActionArgumentsOrThrow( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetActionArguments().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); + } + return map.get(key); + } + + public Builder clearActionArguments() { + internalGetMutableActionArguments().getMutableMap() + .clear(); + return this; + } + /** + * map<string, string> action_arguments = 2; + */ + + public Builder removeActionArguments( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + internalGetMutableActionArguments().getMutableMap() + .remove(key); + return this; + } + /** + * Use alternate mutation accessors instead. + */ + @java.lang.Deprecated + public java.util.Map + getMutableActionArguments() { + return internalGetMutableActionArguments().getMutableMap(); + } + /** + * map<string, string> action_arguments = 2; + */ + public Builder putActionArguments( + java.lang.String key, + java.lang.String value) { + if (key == null) { throw new java.lang.NullPointerException(); } + if (value == null) { throw new java.lang.NullPointerException(); } + internalGetMutableActionArguments().getMutableMap() + .put(key, value); + return this; + } + /** + * map<string, string> action_arguments = 2; + */ + + public Builder putAllActionArguments( + java.util.Map values) { + internalGetMutableActionArguments().getMutableMap() + .putAll(values); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:messages.UserAction) + } + + // @@protoc_insertion_point(class_scope:messages.UserAction) + private static final dev.slimevr.bridge.ProtobufMessages.UserAction DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.UserAction(); + } + + public static dev.slimevr.bridge.ProtobufMessages.UserAction getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public UserAction parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new UserAction(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.UserAction getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface TrackerAddedOrBuilder extends + // @@protoc_insertion_point(interface_extends:messages.TrackerAdded) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 tracker_id = 1; + * @return The trackerId. + */ + int getTrackerId(); + + /** + * string tracker_serial = 2; + * @return The trackerSerial. + */ + java.lang.String getTrackerSerial(); + /** + * string tracker_serial = 2; + * @return The bytes for trackerSerial. + */ + com.google.protobuf.ByteString + getTrackerSerialBytes(); + + /** + * string tracker_name = 3; + * @return The trackerName. + */ + java.lang.String getTrackerName(); + /** + * string tracker_name = 3; + * @return The bytes for trackerName. + */ + com.google.protobuf.ByteString + getTrackerNameBytes(); + + /** + * int32 tracker_role = 4; + * @return The trackerRole. + */ + int getTrackerRole(); + } + /** + * Protobuf type {@code messages.TrackerAdded} + */ + public static final class TrackerAdded extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:messages.TrackerAdded) + TrackerAddedOrBuilder { + private static final long serialVersionUID = 0L; + // Use TrackerAdded.newBuilder() to construct. + private TrackerAdded(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private TrackerAdded() { + trackerSerial_ = ""; + trackerName_ = ""; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new TrackerAdded(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private TrackerAdded( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + trackerId_ = input.readInt32(); + break; + } + case 18: { + java.lang.String s = input.readStringRequireUtf8(); + + trackerSerial_ = s; + break; + } + case 26: { + java.lang.String s = input.readStringRequireUtf8(); + + trackerName_ = s; + break; + } + case 32: { + + trackerRole_ = input.readInt32(); + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerAdded_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerAdded_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.slimevr.bridge.ProtobufMessages.TrackerAdded.class, dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder.class); + } + + public static final int TRACKER_ID_FIELD_NUMBER = 1; + private int trackerId_; + /** + * int32 tracker_id = 1; + * @return The trackerId. + */ + @java.lang.Override + public int getTrackerId() { + return trackerId_; + } + + public static final int TRACKER_SERIAL_FIELD_NUMBER = 2; + private volatile java.lang.Object trackerSerial_; + /** + * string tracker_serial = 2; + * @return The trackerSerial. + */ + @java.lang.Override + public java.lang.String getTrackerSerial() { + java.lang.Object ref = trackerSerial_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + trackerSerial_ = s; + return s; + } + } + /** + * string tracker_serial = 2; + * @return The bytes for trackerSerial. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getTrackerSerialBytes() { + java.lang.Object ref = trackerSerial_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + trackerSerial_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TRACKER_NAME_FIELD_NUMBER = 3; + private volatile java.lang.Object trackerName_; + /** + * string tracker_name = 3; + * @return The trackerName. + */ + @java.lang.Override + public java.lang.String getTrackerName() { + java.lang.Object ref = trackerName_; + if (ref instanceof java.lang.String) { + return (java.lang.String) ref; + } else { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + trackerName_ = s; + return s; + } + } + /** + * string tracker_name = 3; + * @return The bytes for trackerName. + */ + @java.lang.Override + public com.google.protobuf.ByteString + getTrackerNameBytes() { + java.lang.Object ref = trackerName_; + if (ref instanceof java.lang.String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + trackerName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + + public static final int TRACKER_ROLE_FIELD_NUMBER = 4; + private int trackerRole_; + /** + * int32 tracker_role = 4; + * @return The trackerRole. + */ + @java.lang.Override + public int getTrackerRole() { + return trackerRole_; + } + + private byte memoizedIsInitialized = -1; + @java.lang.Override + public final boolean isInitialized() { + byte isInitialized = memoizedIsInitialized; + if (isInitialized == 1) return true; + if (isInitialized == 0) return false; + + memoizedIsInitialized = 1; + return true; + } + + @java.lang.Override + public void writeTo(com.google.protobuf.CodedOutputStream output) + throws java.io.IOException { + if (trackerId_ != 0) { + output.writeInt32(1, trackerId_); + } + if (!getTrackerSerialBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 2, trackerSerial_); + } + if (!getTrackerNameBytes().isEmpty()) { + com.google.protobuf.GeneratedMessageV3.writeString(output, 3, trackerName_); + } + if (trackerRole_ != 0) { + output.writeInt32(4, trackerRole_); + } + unknownFields.writeTo(output); + } + + @java.lang.Override + public int getSerializedSize() { + int size = memoizedSize; + if (size != -1) return size; + + size = 0; + if (trackerId_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(1, trackerId_); + } + if (!getTrackerSerialBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, trackerSerial_); + } + if (!getTrackerNameBytes().isEmpty()) { + size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, trackerName_); + } + if (trackerRole_ != 0) { + size += com.google.protobuf.CodedOutputStream + .computeInt32Size(4, trackerRole_); + } + size += unknownFields.getSerializedSize(); + memoizedSize = size; + return size; + } + + @java.lang.Override + public boolean equals(final java.lang.Object obj) { + if (obj == this) { + return true; + } + if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.TrackerAdded)) { + return super.equals(obj); + } + dev.slimevr.bridge.ProtobufMessages.TrackerAdded other = (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) obj; + + if (getTrackerId() + != other.getTrackerId()) return false; + if (!getTrackerSerial() + .equals(other.getTrackerSerial())) return false; + if (!getTrackerName() + .equals(other.getTrackerName())) return false; + if (getTrackerRole() + != other.getTrackerRole()) return false; + if (!unknownFields.equals(other.unknownFields)) return false; + return true; + } + + @java.lang.Override + public int hashCode() { + if (memoizedHashCode != 0) { + return memoizedHashCode; + } + int hash = 41; + hash = (19 * hash) + getDescriptor().hashCode(); + hash = (37 * hash) + TRACKER_ID_FIELD_NUMBER; + hash = (53 * hash) + getTrackerId(); + hash = (37 * hash) + TRACKER_SERIAL_FIELD_NUMBER; + hash = (53 * hash) + getTrackerSerial().hashCode(); + hash = (37 * hash) + TRACKER_NAME_FIELD_NUMBER; + hash = (53 * hash) + getTrackerName().hashCode(); + hash = (37 * hash) + TRACKER_ROLE_FIELD_NUMBER; + hash = (53 * hash) + getTrackerRole(); + hash = (29 * hash) + unknownFields.hashCode(); + memoizedHashCode = hash; + return hash; + } + + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + java.nio.ByteBuffer data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + java.nio.ByteBuffer data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + com.google.protobuf.ByteString data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + com.google.protobuf.ByteString data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(byte[] data) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data); + } + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + byte[] data, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return PARSER.parseFrom(data, extensionRegistry); + } + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseDelimitedFrom(java.io.InputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input); + } + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseDelimitedFrom( + java.io.InputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseDelimitedWithIOException(PARSER, input, extensionRegistry); + } + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + com.google.protobuf.CodedInputStream input) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input); + } + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + return com.google.protobuf.GeneratedMessageV3 + .parseWithIOException(PARSER, input, extensionRegistry); + } + + @java.lang.Override + public Builder newBuilderForType() { return newBuilder(); } + public static Builder newBuilder() { + return DEFAULT_INSTANCE.toBuilder(); + } + public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.TrackerAdded prototype) { + return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); + } + @java.lang.Override + public Builder toBuilder() { + return this == DEFAULT_INSTANCE + ? new Builder() : new Builder().mergeFrom(this); + } + + @java.lang.Override + protected Builder newBuilderForType( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + Builder builder = new Builder(parent); + return builder; + } + /** + * Protobuf type {@code messages.TrackerAdded} + */ + public static final class Builder extends + com.google.protobuf.GeneratedMessageV3.Builder implements + // @@protoc_insertion_point(builder_implements:messages.TrackerAdded) + dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder { + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerAdded_descriptor; + } + + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerAdded_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.slimevr.bridge.ProtobufMessages.TrackerAdded.class, dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder.class); + } + + // Construct using dev.slimevr.bridge.ProtobufMessages.TrackerAdded.newBuilder() + private Builder() { + maybeForceBuilderInitialization(); + } + + private Builder( + com.google.protobuf.GeneratedMessageV3.BuilderParent parent) { + super(parent); + maybeForceBuilderInitialization(); + } + private void maybeForceBuilderInitialization() { + if (com.google.protobuf.GeneratedMessageV3 + .alwaysUseFieldBuilders) { + } + } + @java.lang.Override + public Builder clear() { + super.clear(); + trackerId_ = 0; + + trackerSerial_ = ""; + + trackerName_ = ""; + + trackerRole_ = 0; + + return this; + } + + @java.lang.Override + public com.google.protobuf.Descriptors.Descriptor + getDescriptorForType() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerAdded_descriptor; + } + + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerAdded getDefaultInstanceForType() { + return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance(); + } + + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerAdded build() { + dev.slimevr.bridge.ProtobufMessages.TrackerAdded result = buildPartial(); + if (!result.isInitialized()) { + throw newUninitializedMessageException(result); + } + return result; + } + + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerAdded buildPartial() { + dev.slimevr.bridge.ProtobufMessages.TrackerAdded result = new dev.slimevr.bridge.ProtobufMessages.TrackerAdded(this); + result.trackerId_ = trackerId_; + result.trackerSerial_ = trackerSerial_; + result.trackerName_ = trackerName_; + result.trackerRole_ = trackerRole_; + onBuilt(); + return result; + } + + @java.lang.Override + public Builder clone() { + return super.clone(); + } + @java.lang.Override + public Builder setField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.setField(field, value); + } + @java.lang.Override + public Builder clearField( + com.google.protobuf.Descriptors.FieldDescriptor field) { + return super.clearField(field); + } + @java.lang.Override + public Builder clearOneof( + com.google.protobuf.Descriptors.OneofDescriptor oneof) { + return super.clearOneof(oneof); + } + @java.lang.Override + public Builder setRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + int index, java.lang.Object value) { + return super.setRepeatedField(field, index, value); + } + @java.lang.Override + public Builder addRepeatedField( + com.google.protobuf.Descriptors.FieldDescriptor field, + java.lang.Object value) { + return super.addRepeatedField(field, value); + } + @java.lang.Override + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.slimevr.bridge.ProtobufMessages.TrackerAdded) { + return mergeFrom((dev.slimevr.bridge.ProtobufMessages.TrackerAdded)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.TrackerAdded other) { + if (other == dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance()) return this; + if (other.getTrackerId() != 0) { + setTrackerId(other.getTrackerId()); + } + if (!other.getTrackerSerial().isEmpty()) { + trackerSerial_ = other.trackerSerial_; + onChanged(); + } + if (!other.getTrackerName().isEmpty()) { + trackerName_ = other.trackerName_; + onChanged(); + } + if (other.getTrackerRole() != 0) { + setTrackerRole(other.getTrackerRole()); + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.slimevr.bridge.ProtobufMessages.TrackerAdded parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + + private int trackerId_ ; + /** + * int32 tracker_id = 1; + * @return The trackerId. + */ + @java.lang.Override + public int getTrackerId() { + return trackerId_; + } + /** + * int32 tracker_id = 1; + * @param value The trackerId to set. + * @return This builder for chaining. + */ + public Builder setTrackerId(int value) { + + trackerId_ = value; + onChanged(); + return this; + } + /** + * int32 tracker_id = 1; + * @return This builder for chaining. + */ + public Builder clearTrackerId() { + + trackerId_ = 0; + onChanged(); + return this; + } + + private java.lang.Object trackerSerial_ = ""; + /** + * string tracker_serial = 2; + * @return The trackerSerial. + */ + @Override + public java.lang.String getTrackerSerial() { + java.lang.Object ref = trackerSerial_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + trackerSerial_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string tracker_serial = 2; + * @return The bytes for trackerSerial. + */ + @Override + public com.google.protobuf.ByteString + getTrackerSerialBytes() { + java.lang.Object ref = trackerSerial_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + trackerSerial_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string tracker_serial = 2; + * @param value The trackerSerial to set. + * @return This builder for chaining. + */ + public Builder setTrackerSerial( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + trackerSerial_ = value; + onChanged(); + return this; + } + /** + * string tracker_serial = 2; + * @return This builder for chaining. + */ + public Builder clearTrackerSerial() { + + trackerSerial_ = getDefaultInstance().getTrackerSerial(); + onChanged(); + return this; + } + /** + * string tracker_serial = 2; + * @param value The bytes for trackerSerial to set. + * @return This builder for chaining. + */ + public Builder setTrackerSerialBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + trackerSerial_ = value; + onChanged(); + return this; + } + + private java.lang.Object trackerName_ = ""; + /** + * string tracker_name = 3; + * @return The trackerName. + */ + @Override + public java.lang.String getTrackerName() { + java.lang.Object ref = trackerName_; + if (!(ref instanceof java.lang.String)) { + com.google.protobuf.ByteString bs = + (com.google.protobuf.ByteString) ref; + java.lang.String s = bs.toStringUtf8(); + trackerName_ = s; + return s; + } else { + return (java.lang.String) ref; + } + } + /** + * string tracker_name = 3; + * @return The bytes for trackerName. + */ + @Override + public com.google.protobuf.ByteString + getTrackerNameBytes() { + java.lang.Object ref = trackerName_; + if (ref instanceof String) { + com.google.protobuf.ByteString b = + com.google.protobuf.ByteString.copyFromUtf8( + (java.lang.String) ref); + trackerName_ = b; + return b; + } else { + return (com.google.protobuf.ByteString) ref; + } + } + /** + * string tracker_name = 3; + * @param value The trackerName to set. + * @return This builder for chaining. + */ + public Builder setTrackerName( + java.lang.String value) { + if (value == null) { + throw new NullPointerException(); + } + + trackerName_ = value; + onChanged(); + return this; + } + /** + * string tracker_name = 3; + * @return This builder for chaining. + */ + public Builder clearTrackerName() { + + trackerName_ = getDefaultInstance().getTrackerName(); + onChanged(); + return this; + } + /** + * string tracker_name = 3; + * @param value The bytes for trackerName to set. + * @return This builder for chaining. + */ + public Builder setTrackerNameBytes( + com.google.protobuf.ByteString value) { + if (value == null) { + throw new NullPointerException(); + } + checkByteStringIsUtf8(value); + + trackerName_ = value; + onChanged(); + return this; + } + + private int trackerRole_ ; + /** + * int32 tracker_role = 4; + * @return The trackerRole. + */ + @java.lang.Override + public int getTrackerRole() { + return trackerRole_; + } + /** + * int32 tracker_role = 4; + * @param value The trackerRole to set. + * @return This builder for chaining. + */ + public Builder setTrackerRole(int value) { + + trackerRole_ = value; + onChanged(); + return this; + } + /** + * int32 tracker_role = 4; + * @return This builder for chaining. + */ + public Builder clearTrackerRole() { + + trackerRole_ = 0; + onChanged(); + return this; + } + @java.lang.Override + public final Builder setUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.setUnknownFields(unknownFields); + } + + @java.lang.Override + public final Builder mergeUnknownFields( + final com.google.protobuf.UnknownFieldSet unknownFields) { + return super.mergeUnknownFields(unknownFields); + } + + + // @@protoc_insertion_point(builder_scope:messages.TrackerAdded) + } + + // @@protoc_insertion_point(class_scope:messages.TrackerAdded) + private static final dev.slimevr.bridge.ProtobufMessages.TrackerAdded DEFAULT_INSTANCE; + static { + DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.TrackerAdded(); + } + + public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded getDefaultInstance() { + return DEFAULT_INSTANCE; + } + + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { + @java.lang.Override + public TrackerAdded parsePartialFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + return new TrackerAdded(input, extensionRegistry); + } + }; + + public static com.google.protobuf.Parser parser() { + return PARSER; + } + + @java.lang.Override + public com.google.protobuf.Parser getParserForType() { + return PARSER; + } + + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerAdded getDefaultInstanceForType() { + return DEFAULT_INSTANCE; + } + + } + + public interface TrackerStatusOrBuilder extends + // @@protoc_insertion_point(interface_extends:messages.TrackerStatus) + com.google.protobuf.MessageOrBuilder { + + /** + * int32 tracker_id = 1; + * @return The trackerId. + */ + int getTrackerId(); + + /** + * .messages.TrackerStatus.Status status = 2; + * @return The enum numeric value on the wire for status. + */ + int getStatusValue(); + /** + * .messages.TrackerStatus.Status status = 2; + * @return The status. + */ + dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status getStatus(); + + /** + * map<string, string> extra = 3; + */ + int getExtraCount(); + /** + * map<string, string> extra = 3; + */ + boolean containsExtra( + java.lang.String key); + /** + * Use {@link #getExtraMap()} instead. + */ + @java.lang.Deprecated + java.util.Map + getExtra(); + /** + * map<string, string> extra = 3; + */ + java.util.Map + getExtraMap(); + /** + * map<string, string> extra = 3; + */ + + java.lang.String getExtraOrDefault( + java.lang.String key, + java.lang.String defaultValue); + /** + * map<string, string> extra = 3; + */ + + java.lang.String getExtraOrThrow( + java.lang.String key); + + /** + * .messages.TrackerStatus.Confidence confidence = 4; + * @return Whether the confidence field is set. + */ + boolean hasConfidence(); + /** + * .messages.TrackerStatus.Confidence confidence = 4; + * @return The enum numeric value on the wire for confidence. + */ + int getConfidenceValue(); + /** + * .messages.TrackerStatus.Confidence confidence = 4; + * @return The confidence. + */ + dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence getConfidence(); + } + /** + * Protobuf type {@code messages.TrackerStatus} + */ + public static final class TrackerStatus extends + com.google.protobuf.GeneratedMessageV3 implements + // @@protoc_insertion_point(message_implements:messages.TrackerStatus) + TrackerStatusOrBuilder { + private static final long serialVersionUID = 0L; + // Use TrackerStatus.newBuilder() to construct. + private TrackerStatus(com.google.protobuf.GeneratedMessageV3.Builder builder) { + super(builder); + } + private TrackerStatus() { + status_ = 0; + confidence_ = 0; + } + + @java.lang.Override + @SuppressWarnings({"unused"}) + protected java.lang.Object newInstance( + UnusedPrivateParameter unused) { + return new TrackerStatus(); + } + + @java.lang.Override + public final com.google.protobuf.UnknownFieldSet + getUnknownFields() { + return this.unknownFields; + } + private TrackerStatus( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws com.google.protobuf.InvalidProtocolBufferException { + this(); + if (extensionRegistry == null) { + throw new java.lang.NullPointerException(); + } + int mutable_bitField0_ = 0; + com.google.protobuf.UnknownFieldSet.Builder unknownFields = + com.google.protobuf.UnknownFieldSet.newBuilder(); + try { + boolean done = false; + while (!done) { + int tag = input.readTag(); + switch (tag) { + case 0: + done = true; + break; + case 8: { + + trackerId_ = input.readInt32(); + break; + } + case 16: { + int rawValue = input.readEnum(); + + status_ = rawValue; + break; + } + case 26: { + if (!((mutable_bitField0_ & 0x00000001) != 0)) { + extra_ = com.google.protobuf.MapField.newMapField( + ExtraDefaultEntryHolder.defaultEntry); + mutable_bitField0_ |= 0x00000001; + } + com.google.protobuf.MapEntry + extra__ = input.readMessage( + ExtraDefaultEntryHolder.defaultEntry.getParserForType(), extensionRegistry); + extra_.getMutableMap().put( + extra__.getKey(), extra__.getValue()); + break; + } + case 32: { + int rawValue = input.readEnum(); + bitField0_ |= 0x00000001; + confidence_ = rawValue; + break; + } + default: { + if (!parseUnknownField( + input, unknownFields, extensionRegistry, tag)) { + done = true; + } + break; + } + } + } + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + throw e.setUnfinishedMessage(this); + } catch (java.io.IOException e) { + throw new com.google.protobuf.InvalidProtocolBufferException( + e).setUnfinishedMessage(this); + } finally { + this.unknownFields = unknownFields.build(); + makeExtensionsImmutable(); + } + } + public static final com.google.protobuf.Descriptors.Descriptor + getDescriptor() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_descriptor; + } + + @SuppressWarnings({"rawtypes"}) + @java.lang.Override + protected com.google.protobuf.MapField internalGetMapField( + int number) { + switch (number) { + case 3: + return internalGetExtra(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @java.lang.Override + protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internalGetFieldAccessorTable() { + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_fieldAccessorTable + .ensureFieldAccessorsInitialized( + dev.slimevr.bridge.ProtobufMessages.TrackerStatus.class, dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder.class); + } + + /** + * Protobuf enum {@code messages.TrackerStatus.Status} + */ + public enum Status + implements com.google.protobuf.ProtocolMessageEnum { + /** + * DISCONNECTED = 0; + */ + DISCONNECTED(0), + /** + * OK = 1; + */ + OK(1), + /** + * BUSY = 2; + */ + BUSY(2), + /** + * ERROR = 3; + */ + ERROR(3), + /** + * OCCLUDED = 4; + */ + OCCLUDED(4), + UNRECOGNIZED(-1), + ; + + /** + * DISCONNECTED = 0; + */ + public static final int DISCONNECTED_VALUE = 0; + /** + * OK = 1; + */ + public static final int OK_VALUE = 1; + /** + * BUSY = 2; + */ + public static final int BUSY_VALUE = 2; + /** + * ERROR = 3; + */ + public static final int ERROR_VALUE = 3; + /** + * OCCLUDED = 4; + */ + public static final int OCCLUDED_VALUE = 4; + + + @Override + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; + } + /** - * string name = 1; - * @return This builder for chaining. + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. */ - public Builder clearName() { - - name_ = getDefaultInstance().getName(); - onChanged(); - return this; + @java.lang.Deprecated + public static Status valueOf(int value) { + return forNumber(value); } + /** - * string name = 1; - * @param value The bytes for name to set. - * @return This builder for chaining. + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. */ - public Builder setNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - name_ = value; - onChanged(); - return this; + public static Status forNumber(int value) { + switch (value) { + case 0: return DISCONNECTED; + case 1: return OK; + case 2: return BUSY; + case 3: return ERROR; + case 4: return OCCLUDED; + default: return null; + } } - private com.google.protobuf.MapField< - java.lang.String, java.lang.String> actionArguments_; - private com.google.protobuf.MapField - internalGetActionArguments() { - if (actionArguments_ == null) { - return com.google.protobuf.MapField.emptyMapField( - ActionArgumentsDefaultEntryHolder.defaultEntry); + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + Status> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + @Override + public Status findValueByNumber(int number) { + return Status.forNumber(number); + } + }; + + @Override + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); } - return actionArguments_; + return getDescriptor().getValues().get(ordinal()); } - private com.google.protobuf.MapField - internalGetMutableActionArguments() { - onChanged();; - if (actionArguments_ == null) { - actionArguments_ = com.google.protobuf.MapField.newMapField( - ActionArgumentsDefaultEntryHolder.defaultEntry); + @Override + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDescriptor().getEnumTypes().get(0); + } + + private static final Status[] VALUES = values(); + + public static Status valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); } - if (!actionArguments_.isMutable()) { - actionArguments_ = actionArguments_.copy(); + if (desc.getIndex() == -1) { + return UNRECOGNIZED; } - return actionArguments_; + return VALUES[desc.getIndex()]; } - @Override - public int getActionArgumentsCount() { - return internalGetActionArguments().getMap().size(); - } - /** - * map<string, string> action_arguments = 2; - */ + private final int value; - @java.lang.Override - public boolean containsActionArguments( - java.lang.String key) { - if (key == null) { throw new java.lang.NullPointerException(); } - return internalGetActionArguments().getMap().containsKey(key); + private Status(int value) { + this.value = value; } + + // @@protoc_insertion_point(enum_scope:messages.TrackerStatus.Status) + } + + /** + * Protobuf enum {@code messages.TrackerStatus.Confidence} + */ + public enum Confidence + implements com.google.protobuf.ProtocolMessageEnum { /** - * Use {@link #getActionArgumentsMap()} instead. + * NO = 0; */ - @java.lang.Override - @java.lang.Deprecated - public java.util.Map getActionArguments() { - return getActionArgumentsMap(); - } + NO(0), /** - * map<string, string> action_arguments = 2; + * LOW = 1; */ - @java.lang.Override - - public java.util.Map getActionArgumentsMap() { - return internalGetActionArguments().getMap(); - } + LOW(1), /** - * map<string, string> action_arguments = 2; + * MEDIUM = 5; */ - @java.lang.Override - - public java.lang.String getActionArgumentsOrDefault( - java.lang.String key, - java.lang.String defaultValue) { - if (key == null) { throw new java.lang.NullPointerException(); } - java.util.Map map = - internalGetActionArguments().getMap(); - return map.containsKey(key) ? map.get(key) : defaultValue; - } + MEDIUM(5), /** - * map<string, string> action_arguments = 2; + * HIGH = 10; */ - @java.lang.Override - - public java.lang.String getActionArgumentsOrThrow( - java.lang.String key) { - if (key == null) { throw new java.lang.NullPointerException(); } - java.util.Map map = - internalGetActionArguments().getMap(); - if (!map.containsKey(key)) { - throw new java.lang.IllegalArgumentException(); - } - return map.get(key); - } + HIGH(10), + UNRECOGNIZED(-1), + ; - public Builder clearActionArguments() { - internalGetMutableActionArguments().getMutableMap() - .clear(); - return this; - } /** - * map<string, string> action_arguments = 2; + * NO = 0; */ - - public Builder removeActionArguments( - java.lang.String key) { - if (key == null) { throw new java.lang.NullPointerException(); } - internalGetMutableActionArguments().getMutableMap() - .remove(key); - return this; - } + public static final int NO_VALUE = 0; /** - * Use alternate mutation accessors instead. + * LOW = 1; */ - @java.lang.Deprecated - public java.util.Map - getMutableActionArguments() { - return internalGetMutableActionArguments().getMutableMap(); - } + public static final int LOW_VALUE = 1; /** - * map<string, string> action_arguments = 2; + * MEDIUM = 5; */ - public Builder putActionArguments( - java.lang.String key, - java.lang.String value) { - if (key == null) { throw new java.lang.NullPointerException(); } - if (value == null) { throw new java.lang.NullPointerException(); } - internalGetMutableActionArguments().getMutableMap() - .put(key, value); - return this; - } + public static final int MEDIUM_VALUE = 5; /** - * map<string, string> action_arguments = 2; + * HIGH = 10; */ + public static final int HIGH_VALUE = 10; - public Builder putAllActionArguments( - java.util.Map values) { - internalGetMutableActionArguments().getMutableMap() - .putAll(values); - return this; + + @Override + public final int getNumber() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalArgumentException( + "Can't get the number of an unknown enum value."); + } + return value; } - @java.lang.Override - public final Builder setUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.setUnknownFields(unknownFields); + + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + * @deprecated Use {@link #forNumber(int)} instead. + */ + @java.lang.Deprecated + public static Confidence valueOf(int value) { + return forNumber(value); } - @java.lang.Override - public final Builder mergeUnknownFields( - final com.google.protobuf.UnknownFieldSet unknownFields) { - return super.mergeUnknownFields(unknownFields); + /** + * @param value The numeric wire value of the corresponding enum entry. + * @return The enum associated with the given numeric wire value. + */ + public static Confidence forNumber(int value) { + switch (value) { + case 0: return NO; + case 1: return LOW; + case 5: return MEDIUM; + case 10: return HIGH; + default: return null; + } } + public static com.google.protobuf.Internal.EnumLiteMap + internalGetValueMap() { + return internalValueMap; + } + private static final com.google.protobuf.Internal.EnumLiteMap< + Confidence> internalValueMap = + new com.google.protobuf.Internal.EnumLiteMap() { + @Override + public Confidence findValueByNumber(int number) { + return Confidence.forNumber(number); + } + }; - // @@protoc_insertion_point(builder_scope:dev.slimevr.bridge.UserAction) - } - - // @@protoc_insertion_point(class_scope:dev.slimevr.bridge.UserAction) - private static final dev.slimevr.bridge.ProtobufMessages.UserAction DEFAULT_INSTANCE; - static { - DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.UserAction(); - } + @Override + public final com.google.protobuf.Descriptors.EnumValueDescriptor + getValueDescriptor() { + if (this == UNRECOGNIZED) { + throw new java.lang.IllegalStateException( + "Can't get the descriptor of an unrecognized enum value."); + } + return getDescriptor().getValues().get(ordinal()); + } + @Override + public final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptorForType() { + return getDescriptor(); + } + public static final com.google.protobuf.Descriptors.EnumDescriptor + getDescriptor() { + return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDescriptor().getEnumTypes().get(1); + } - public static dev.slimevr.bridge.ProtobufMessages.UserAction getDefaultInstance() { - return DEFAULT_INSTANCE; - } + private static final Confidence[] VALUES = values(); - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { - @java.lang.Override - public UserAction parsePartialFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - return new UserAction(input, extensionRegistry); + public static Confidence valueOf( + com.google.protobuf.Descriptors.EnumValueDescriptor desc) { + if (desc.getType() != getDescriptor()) { + throw new java.lang.IllegalArgumentException( + "EnumValueDescriptor is not for this type."); + } + if (desc.getIndex() == -1) { + return UNRECOGNIZED; + } + return VALUES[desc.getIndex()]; } - }; - public static com.google.protobuf.Parser parser() { - return PARSER; - } + private final int value; - @java.lang.Override - public com.google.protobuf.Parser getParserForType() { - return PARSER; - } + private Confidence(int value) { + this.value = value; + } - @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.UserAction getDefaultInstanceForType() { - return DEFAULT_INSTANCE; + // @@protoc_insertion_point(enum_scope:messages.TrackerStatus.Confidence) } - } - - public interface TrackerAddedOrBuilder extends - // @@protoc_insertion_point(interface_extends:dev.slimevr.bridge.TrackerAdded) - com.google.protobuf.MessageOrBuilder { - + private int bitField0_; + public static final int TRACKER_ID_FIELD_NUMBER = 1; + private int trackerId_; /** * int32 tracker_id = 1; * @return The trackerId. */ - int getTrackerId(); - - /** - * string tracker_name = 2; - * @return The trackerName. - */ - java.lang.String getTrackerName(); - /** - * string tracker_name = 2; - * @return The bytes for trackerName. - */ - com.google.protobuf.ByteString - getTrackerNameBytes(); + @java.lang.Override + public int getTrackerId() { + return trackerId_; + } + public static final int STATUS_FIELD_NUMBER = 2; + private int status_; /** - * string location = 3; - * @return The location. + * .messages.TrackerStatus.Status status = 2; + * @return The enum numeric value on the wire for status. */ - java.lang.String getLocation(); + @java.lang.Override public int getStatusValue() { + return status_; + } /** - * string location = 3; - * @return The bytes for location. + * .messages.TrackerStatus.Status status = 2; + * @return The status. */ - com.google.protobuf.ByteString - getLocationBytes(); - } - /** - * Protobuf type {@code dev.slimevr.bridge.TrackerAdded} - */ - public static final class TrackerAdded extends - com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:dev.slimevr.bridge.TrackerAdded) - TrackerAddedOrBuilder { - private static final long serialVersionUID = 0L; - // Use TrackerAdded.newBuilder() to construct. - private TrackerAdded(com.google.protobuf.GeneratedMessageV3.Builder builder) { - super(builder); - } - private TrackerAdded() { - trackerName_ = ""; - location_ = ""; - } - - @java.lang.Override - @SuppressWarnings({"unused"}) - protected java.lang.Object newInstance( - UnusedPrivateParameter unused) { - return new TrackerAdded(); + @java.lang.Override public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status getStatus() { + @SuppressWarnings("deprecation") + dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.valueOf(status_); + return result == null ? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.UNRECOGNIZED : result; } - @java.lang.Override - public final com.google.protobuf.UnknownFieldSet - getUnknownFields() { - return this.unknownFields; + public static final int EXTRA_FIELD_NUMBER = 3; + private static final class ExtraDefaultEntryHolder { + static final com.google.protobuf.MapEntry< + java.lang.String, java.lang.String> defaultEntry = + com.google.protobuf.MapEntry + .newDefaultInstance( + dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_ExtraEntry_descriptor, + com.google.protobuf.WireFormat.FieldType.STRING, + "", + com.google.protobuf.WireFormat.FieldType.STRING, + ""); } - private TrackerAdded( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws com.google.protobuf.InvalidProtocolBufferException { - this(); - if (extensionRegistry == null) { - throw new java.lang.NullPointerException(); - } - com.google.protobuf.UnknownFieldSet.Builder unknownFields = - com.google.protobuf.UnknownFieldSet.newBuilder(); - try { - boolean done = false; - while (!done) { - int tag = input.readTag(); - switch (tag) { - case 0: - done = true; - break; - case 8: { - - trackerId_ = input.readInt32(); - break; - } - case 18: { - java.lang.String s = input.readStringRequireUtf8(); - - trackerName_ = s; - break; - } - case 26: { - java.lang.String s = input.readStringRequireUtf8(); - - location_ = s; - break; - } - default: { - if (!parseUnknownField( - input, unknownFields, extensionRegistry, tag)) { - done = true; - } - break; - } - } - } - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - throw e.setUnfinishedMessage(this); - } catch (java.io.IOException e) { - throw new com.google.protobuf.InvalidProtocolBufferException( - e).setUnfinishedMessage(this); - } finally { - this.unknownFields = unknownFields.build(); - makeExtensionsImmutable(); + private com.google.protobuf.MapField< + java.lang.String, java.lang.String> extra_; + private com.google.protobuf.MapField + internalGetExtra() { + if (extra_ == null) { + return com.google.protobuf.MapField.emptyMapField( + ExtraDefaultEntryHolder.defaultEntry); } + return extra_; } - public static final com.google.protobuf.Descriptors.Descriptor - getDescriptor() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_TrackerAdded_descriptor; + + @Override + public int getExtraCount() { + return internalGetExtra().getMap().size(); } + /** + * map<string, string> extra = 3; + */ @java.lang.Override - protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internalGetFieldAccessorTable() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_TrackerAdded_fieldAccessorTable - .ensureFieldAccessorsInitialized( - dev.slimevr.bridge.ProtobufMessages.TrackerAdded.class, dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder.class); + public boolean containsExtra( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + return internalGetExtra().getMap().containsKey(key); } - - public static final int TRACKER_ID_FIELD_NUMBER = 1; - private int trackerId_; /** - * int32 tracker_id = 1; - * @return The trackerId. + * Use {@link #getExtraMap()} instead. */ @java.lang.Override - public int getTrackerId() { - return trackerId_; + @java.lang.Deprecated + public java.util.Map getExtra() { + return getExtraMap(); } + /** + * map<string, string> extra = 3; + */ + @java.lang.Override - public static final int TRACKER_NAME_FIELD_NUMBER = 2; - private volatile java.lang.Object trackerName_; + public java.util.Map getExtraMap() { + return internalGetExtra().getMap(); + } /** - * string tracker_name = 2; - * @return The trackerName. + * map<string, string> extra = 3; */ @java.lang.Override - public java.lang.String getTrackerName() { - java.lang.Object ref = trackerName_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - trackerName_ = s; - return s; - } + + public java.lang.String getExtraOrDefault( + java.lang.String key, + java.lang.String defaultValue) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetExtra().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; } /** - * string tracker_name = 2; - * @return The bytes for trackerName. + * map<string, string> extra = 3; */ @java.lang.Override - public com.google.protobuf.ByteString - getTrackerNameBytes() { - java.lang.Object ref = trackerName_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - trackerName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; + + public java.lang.String getExtraOrThrow( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetExtra().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); } + return map.get(key); } - public static final int LOCATION_FIELD_NUMBER = 3; - private volatile java.lang.Object location_; + public static final int CONFIDENCE_FIELD_NUMBER = 4; + private int confidence_; /** - * string location = 3; - * @return The location. + * .messages.TrackerStatus.Confidence confidence = 4; + * @return Whether the confidence field is set. */ - @java.lang.Override - public java.lang.String getLocation() { - java.lang.Object ref = location_; - if (ref instanceof java.lang.String) { - return (java.lang.String) ref; - } else { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - location_ = s; - return s; - } + @java.lang.Override public boolean hasConfidence() { + return ((bitField0_ & 0x00000001) != 0); } /** - * string location = 3; - * @return The bytes for location. + * .messages.TrackerStatus.Confidence confidence = 4; + * @return The enum numeric value on the wire for confidence. */ - @java.lang.Override - public com.google.protobuf.ByteString - getLocationBytes() { - java.lang.Object ref = location_; - if (ref instanceof java.lang.String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - location_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + @java.lang.Override public int getConfidenceValue() { + return confidence_; + } + /** + * .messages.TrackerStatus.Confidence confidence = 4; + * @return The confidence. + */ + @java.lang.Override public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence getConfidence() { + @SuppressWarnings("deprecation") + dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence.valueOf(confidence_); + return result == null ? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence.UNRECOGNIZED : result; } private byte memoizedIsInitialized = -1; @@ -2404,11 +4155,17 @@ public void writeTo(com.google.protobuf.CodedOutputStream output) if (trackerId_ != 0) { output.writeInt32(1, trackerId_); } - if (!getTrackerNameBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 2, trackerName_); + if (status_ != dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.DISCONNECTED.getNumber()) { + output.writeEnum(2, status_); } - if (!getLocationBytes().isEmpty()) { - com.google.protobuf.GeneratedMessageV3.writeString(output, 3, location_); + com.google.protobuf.GeneratedMessageV3 + .serializeStringMapTo( + output, + internalGetExtra(), + ExtraDefaultEntryHolder.defaultEntry, + 3); + if (((bitField0_ & 0x00000001) != 0)) { + output.writeEnum(4, confidence_); } unknownFields.writeTo(output); } @@ -2423,11 +4180,23 @@ public int getSerializedSize() { size += com.google.protobuf.CodedOutputStream .computeInt32Size(1, trackerId_); } - if (!getTrackerNameBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(2, trackerName_); + if (status_ != dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.DISCONNECTED.getNumber()) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(2, status_); + } + for (java.util.Map.Entry entry + : internalGetExtra().getMap().entrySet()) { + com.google.protobuf.MapEntry + extra__ = ExtraDefaultEntryHolder.defaultEntry.newBuilderForType() + .setKey(entry.getKey()) + .setValue(entry.getValue()) + .build(); + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, extra__); } - if (!getLocationBytes().isEmpty()) { - size += com.google.protobuf.GeneratedMessageV3.computeStringSize(3, location_); + if (((bitField0_ & 0x00000001) != 0)) { + size += com.google.protobuf.CodedOutputStream + .computeEnumSize(4, confidence_); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -2439,17 +4208,20 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.TrackerAdded)) { + if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.TrackerStatus)) { return super.equals(obj); } - dev.slimevr.bridge.ProtobufMessages.TrackerAdded other = (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) obj; + dev.slimevr.bridge.ProtobufMessages.TrackerStatus other = (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) obj; if (getTrackerId() != other.getTrackerId()) return false; - if (!getTrackerName() - .equals(other.getTrackerName())) return false; - if (!getLocation() - .equals(other.getLocation())) return false; + if (status_ != other.status_) return false; + if (!internalGetExtra().equals( + other.internalGetExtra())) return false; + if (hasConfidence() != other.hasConfidence()) return false; + if (hasConfidence()) { + if (confidence_ != other.confidence_) return false; + } if (!unknownFields.equals(other.unknownFields)) return false; return true; } @@ -2463,78 +4235,84 @@ public int hashCode() { hash = (19 * hash) + getDescriptor().hashCode(); hash = (37 * hash) + TRACKER_ID_FIELD_NUMBER; hash = (53 * hash) + getTrackerId(); - hash = (37 * hash) + TRACKER_NAME_FIELD_NUMBER; - hash = (53 * hash) + getTrackerName().hashCode(); - hash = (37 * hash) + LOCATION_FIELD_NUMBER; - hash = (53 * hash) + getLocation().hashCode(); + hash = (37 * hash) + STATUS_FIELD_NUMBER; + hash = (53 * hash) + status_; + if (!internalGetExtra().getMap().isEmpty()) { + hash = (37 * hash) + EXTRA_FIELD_NUMBER; + hash = (53 * hash) + internalGetExtra().hashCode(); + } + if (hasConfidence()) { + hash = (37 * hash) + CONFIDENCE_FIELD_NUMBER; + hash = (53 * hash) + confidence_; + } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(byte[] data) + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom(java.io.InputStream input) + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseDelimitedFrom(java.io.InputStream input) + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseDelimitedFrom( + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -2547,7 +4325,7 @@ public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.TrackerAdded prototype) { + public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.TrackerStatus prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -2563,26 +4341,50 @@ protected Builder newBuilderForType( return builder; } /** - * Protobuf type {@code dev.slimevr.bridge.TrackerAdded} + * Protobuf type {@code messages.TrackerStatus} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:dev.slimevr.bridge.TrackerAdded) - dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder { + // @@protoc_insertion_point(builder_implements:messages.TrackerStatus) + dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_TrackerAdded_descriptor; + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_descriptor; } + @Override + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapField internalGetMapField( + int number) { + switch (number) { + case 3: + return internalGetExtra(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } + @Override + @SuppressWarnings({"rawtypes"}) + protected com.google.protobuf.MapField internalGetMutableMapField( + int number) { + switch (number) { + case 3: + return internalGetMutableExtra(); + default: + throw new RuntimeException( + "Invalid map field number: " + number); + } + } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_TrackerAdded_fieldAccessorTable + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_fieldAccessorTable .ensureFieldAccessorsInitialized( - dev.slimevr.bridge.ProtobufMessages.TrackerAdded.class, dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder.class); + dev.slimevr.bridge.ProtobufMessages.TrackerStatus.class, dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder.class); } - // Construct using dev.slimevr.bridge.ProtobufMessages.TrackerAdded.newBuilder() + // Construct using dev.slimevr.bridge.ProtobufMessages.TrackerStatus.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -2602,27 +4404,28 @@ public Builder clear() { super.clear(); trackerId_ = 0; - trackerName_ = ""; - - location_ = ""; + status_ = 0; + internalGetMutableExtra().clear(); + confidence_ = 0; + bitField0_ = (bitField0_ & ~0x00000002); return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_TrackerAdded_descriptor; + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_TrackerStatus_descriptor; } @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.TrackerAdded getDefaultInstanceForType() { - return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance(); + public dev.slimevr.bridge.ProtobufMessages.TrackerStatus getDefaultInstanceForType() { + return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance(); } @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.TrackerAdded build() { - dev.slimevr.bridge.ProtobufMessages.TrackerAdded result = buildPartial(); + public dev.slimevr.bridge.ProtobufMessages.TrackerStatus build() { + dev.slimevr.bridge.ProtobufMessages.TrackerStatus result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -2630,11 +4433,19 @@ public dev.slimevr.bridge.ProtobufMessages.TrackerAdded build() { } @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.TrackerAdded buildPartial() { - dev.slimevr.bridge.ProtobufMessages.TrackerAdded result = new dev.slimevr.bridge.ProtobufMessages.TrackerAdded(this); + public dev.slimevr.bridge.ProtobufMessages.TrackerStatus buildPartial() { + dev.slimevr.bridge.ProtobufMessages.TrackerStatus result = new dev.slimevr.bridge.ProtobufMessages.TrackerStatus(this); + int from_bitField0_ = bitField0_; + int to_bitField0_ = 0; result.trackerId_ = trackerId_; - result.trackerName_ = trackerName_; - result.location_ = location_; + result.status_ = status_; + result.extra_ = internalGetExtra(); + result.extra_.makeImmutable(); + if (((from_bitField0_ & 0x00000002) != 0)) { + to_bitField0_ |= 0x00000001; + } + result.confidence_ = confidence_; + result.bitField0_ = to_bitField0_; onBuilt(); return result; } @@ -2673,26 +4484,26 @@ public Builder addRepeatedField( } @java.lang.Override public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof dev.slimevr.bridge.ProtobufMessages.TrackerAdded) { - return mergeFrom((dev.slimevr.bridge.ProtobufMessages.TrackerAdded)other); + if (other instanceof dev.slimevr.bridge.ProtobufMessages.TrackerStatus) { + return mergeFrom((dev.slimevr.bridge.ProtobufMessages.TrackerStatus)other); } else { super.mergeFrom(other); return this; } } - public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.TrackerAdded other) { - if (other == dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance()) return this; + public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.TrackerStatus other) { + if (other == dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance()) return this; if (other.getTrackerId() != 0) { setTrackerId(other.getTrackerId()); } - if (!other.getTrackerName().isEmpty()) { - trackerName_ = other.trackerName_; - onChanged(); + if (other.status_ != 0) { + setStatusValue(other.getStatusValue()); } - if (!other.getLocation().isEmpty()) { - location_ = other.location_; - onChanged(); + internalGetMutableExtra().mergeFrom( + other.internalGetExtra()); + if (other.hasConfidence()) { + setConfidence(other.getConfidence()); } this.mergeUnknownFields(other.unknownFields); onChanged(); @@ -2709,203 +4520,292 @@ public Builder mergeFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { - dev.slimevr.bridge.ProtobufMessages.TrackerAdded parsedMessage = null; + dev.slimevr.bridge.ProtobufMessages.TrackerStatus parsedMessage = null; try { parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) e.getUnfinishedMessage(); + parsedMessage = (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) e.getUnfinishedMessage(); throw e.unwrapIOException(); } finally { if (parsedMessage != null) { mergeFrom(parsedMessage); } } - return this; + return this; + } + private int bitField0_; + + private int trackerId_ ; + /** + * int32 tracker_id = 1; + * @return The trackerId. + */ + @java.lang.Override + public int getTrackerId() { + return trackerId_; + } + /** + * int32 tracker_id = 1; + * @param value The trackerId to set. + * @return This builder for chaining. + */ + public Builder setTrackerId(int value) { + + trackerId_ = value; + onChanged(); + return this; + } + /** + * int32 tracker_id = 1; + * @return This builder for chaining. + */ + public Builder clearTrackerId() { + + trackerId_ = 0; + onChanged(); + return this; + } + + private int status_ = 0; + /** + * .messages.TrackerStatus.Status status = 2; + * @return The enum numeric value on the wire for status. + */ + @java.lang.Override public int getStatusValue() { + return status_; + } + /** + * .messages.TrackerStatus.Status status = 2; + * @param value The enum numeric value on the wire for status to set. + * @return This builder for chaining. + */ + public Builder setStatusValue(int value) { + + status_ = value; + onChanged(); + return this; + } + /** + * .messages.TrackerStatus.Status status = 2; + * @return The status. + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status getStatus() { + @SuppressWarnings("deprecation") + dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.valueOf(status_); + return result == null ? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.UNRECOGNIZED : result; + } + /** + * .messages.TrackerStatus.Status status = 2; + * @param value The status to set. + * @return This builder for chaining. + */ + public Builder setStatus(dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status value) { + if (value == null) { + throw new NullPointerException(); + } + + status_ = value.getNumber(); + onChanged(); + return this; + } + /** + * .messages.TrackerStatus.Status status = 2; + * @return This builder for chaining. + */ + public Builder clearStatus() { + + status_ = 0; + onChanged(); + return this; + } + + private com.google.protobuf.MapField< + java.lang.String, java.lang.String> extra_; + private com.google.protobuf.MapField + internalGetExtra() { + if (extra_ == null) { + return com.google.protobuf.MapField.emptyMapField( + ExtraDefaultEntryHolder.defaultEntry); + } + return extra_; + } + private com.google.protobuf.MapField + internalGetMutableExtra() { + onChanged();; + if (extra_ == null) { + extra_ = com.google.protobuf.MapField.newMapField( + ExtraDefaultEntryHolder.defaultEntry); + } + if (!extra_.isMutable()) { + extra_ = extra_.copy(); + } + return extra_; } - private int trackerId_ ; + @Override + public int getExtraCount() { + return internalGetExtra().getMap().size(); + } /** - * int32 tracker_id = 1; - * @return The trackerId. + * map<string, string> extra = 3; */ + @java.lang.Override - public int getTrackerId() { - return trackerId_; + public boolean containsExtra( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + return internalGetExtra().getMap().containsKey(key); } /** - * int32 tracker_id = 1; - * @param value The trackerId to set. - * @return This builder for chaining. + * Use {@link #getExtraMap()} instead. */ - public Builder setTrackerId(int value) { - - trackerId_ = value; - onChanged(); - return this; + @java.lang.Override + @java.lang.Deprecated + public java.util.Map getExtra() { + return getExtraMap(); } /** - * int32 tracker_id = 1; - * @return This builder for chaining. + * map<string, string> extra = 3; */ - public Builder clearTrackerId() { - - trackerId_ = 0; - onChanged(); - return this; - } + @java.lang.Override - private java.lang.Object trackerName_ = ""; + public java.util.Map getExtraMap() { + return internalGetExtra().getMap(); + } /** - * string tracker_name = 2; - * @return The trackerName. + * map<string, string> extra = 3; */ - @Override - public java.lang.String getTrackerName() { - java.lang.Object ref = trackerName_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - trackerName_ = s; - return s; - } else { - return (java.lang.String) ref; - } + @java.lang.Override + + public java.lang.String getExtraOrDefault( + java.lang.String key, + java.lang.String defaultValue) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetExtra().getMap(); + return map.containsKey(key) ? map.get(key) : defaultValue; } /** - * string tracker_name = 2; - * @return The bytes for trackerName. + * map<string, string> extra = 3; */ - @Override - public com.google.protobuf.ByteString - getTrackerNameBytes() { - java.lang.Object ref = trackerName_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - trackerName_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; + @java.lang.Override + + public java.lang.String getExtraOrThrow( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + java.util.Map map = + internalGetExtra().getMap(); + if (!map.containsKey(key)) { + throw new java.lang.IllegalArgumentException(); } + return map.get(key); + } + + public Builder clearExtra() { + internalGetMutableExtra().getMutableMap() + .clear(); + return this; } /** - * string tracker_name = 2; - * @param value The trackerName to set. - * @return This builder for chaining. + * map<string, string> extra = 3; */ - public Builder setTrackerName( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - trackerName_ = value; - onChanged(); + + public Builder removeExtra( + java.lang.String key) { + if (key == null) { throw new java.lang.NullPointerException(); } + internalGetMutableExtra().getMutableMap() + .remove(key); return this; } /** - * string tracker_name = 2; - * @return This builder for chaining. + * Use alternate mutation accessors instead. */ - public Builder clearTrackerName() { - - trackerName_ = getDefaultInstance().getTrackerName(); - onChanged(); + @java.lang.Deprecated + public java.util.Map + getMutableExtra() { + return internalGetMutableExtra().getMutableMap(); + } + /** + * map<string, string> extra = 3; + */ + public Builder putExtra( + java.lang.String key, + java.lang.String value) { + if (key == null) { throw new java.lang.NullPointerException(); } + if (value == null) { throw new java.lang.NullPointerException(); } + internalGetMutableExtra().getMutableMap() + .put(key, value); return this; } /** - * string tracker_name = 2; - * @param value The bytes for trackerName to set. - * @return This builder for chaining. + * map<string, string> extra = 3; */ - public Builder setTrackerNameBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - trackerName_ = value; - onChanged(); + + public Builder putAllExtra( + java.util.Map values) { + internalGetMutableExtra().getMutableMap() + .putAll(values); return this; } - private java.lang.Object location_ = ""; + private int confidence_ = 0; /** - * string location = 3; - * @return The location. + * .messages.TrackerStatus.Confidence confidence = 4; + * @return Whether the confidence field is set. */ - @Override - public java.lang.String getLocation() { - java.lang.Object ref = location_; - if (!(ref instanceof java.lang.String)) { - com.google.protobuf.ByteString bs = - (com.google.protobuf.ByteString) ref; - java.lang.String s = bs.toStringUtf8(); - location_ = s; - return s; - } else { - return (java.lang.String) ref; - } + @java.lang.Override public boolean hasConfidence() { + return ((bitField0_ & 0x00000002) != 0); } /** - * string location = 3; - * @return The bytes for location. + * .messages.TrackerStatus.Confidence confidence = 4; + * @return The enum numeric value on the wire for confidence. */ - @Override - public com.google.protobuf.ByteString - getLocationBytes() { - java.lang.Object ref = location_; - if (ref instanceof String) { - com.google.protobuf.ByteString b = - com.google.protobuf.ByteString.copyFromUtf8( - (java.lang.String) ref); - location_ = b; - return b; - } else { - return (com.google.protobuf.ByteString) ref; - } + @java.lang.Override public int getConfidenceValue() { + return confidence_; } /** - * string location = 3; - * @param value The location to set. + * .messages.TrackerStatus.Confidence confidence = 4; + * @param value The enum numeric value on the wire for confidence to set. * @return This builder for chaining. */ - public Builder setLocation( - java.lang.String value) { - if (value == null) { - throw new NullPointerException(); - } - - location_ = value; + public Builder setConfidenceValue(int value) { + bitField0_ |= 0x00000002; + confidence_ = value; onChanged(); return this; } /** - * string location = 3; + * .messages.TrackerStatus.Confidence confidence = 4; + * @return The confidence. + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence getConfidence() { + @SuppressWarnings("deprecation") + dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence.valueOf(confidence_); + return result == null ? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence.UNRECOGNIZED : result; + } + /** + * .messages.TrackerStatus.Confidence confidence = 4; + * @param value The confidence to set. * @return This builder for chaining. */ - public Builder clearLocation() { - - location_ = getDefaultInstance().getLocation(); + public Builder setConfidence(dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence value) { + if (value == null) { + throw new NullPointerException(); + } + bitField0_ |= 0x00000002; + confidence_ = value.getNumber(); onChanged(); return this; } /** - * string location = 3; - * @param value The bytes for location to set. + * .messages.TrackerStatus.Confidence confidence = 4; * @return This builder for chaining. */ - public Builder setLocationBytes( - com.google.protobuf.ByteString value) { - if (value == null) { - throw new NullPointerException(); - } - checkByteStringIsUtf8(value); - - location_ = value; + public Builder clearConfidence() { + bitField0_ = (bitField0_ & ~0x00000002); + confidence_ = 0; onChanged(); return this; } @@ -2922,105 +4822,132 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:dev.slimevr.bridge.TrackerAdded) + // @@protoc_insertion_point(builder_scope:messages.TrackerStatus) } - // @@protoc_insertion_point(class_scope:dev.slimevr.bridge.TrackerAdded) - private static final dev.slimevr.bridge.ProtobufMessages.TrackerAdded DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:messages.TrackerStatus) + private static final dev.slimevr.bridge.ProtobufMessages.TrackerStatus DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.TrackerAdded(); + DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.TrackerStatus(); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerAdded getDefaultInstance() { + public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public TrackerAdded parsePartialFrom( + public TrackerStatus parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new TrackerAdded(input, extensionRegistry); + return new TrackerStatus(input, extensionRegistry); } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.TrackerAdded getDefaultInstanceForType() { + public dev.slimevr.bridge.ProtobufMessages.TrackerStatus getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } - public interface TrackerStatusOrBuilder extends - // @@protoc_insertion_point(interface_extends:dev.slimevr.bridge.TrackerStatus) + public interface ProtobufMessageOrBuilder extends + // @@protoc_insertion_point(interface_extends:messages.ProtobufMessage) com.google.protobuf.MessageOrBuilder { /** - * int32 tracker_id = 1; - * @return The trackerId. + * .messages.Position position = 1; + * @return Whether the position field is set. */ - int getTrackerId(); + boolean hasPosition(); + /** + * .messages.Position position = 1; + * @return The position. + */ + dev.slimevr.bridge.ProtobufMessages.Position getPosition(); + /** + * .messages.Position position = 1; + */ + dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder getPositionOrBuilder(); /** - * .dev.slimevr.bridge.TrackerStatus.Status status = 2; - * @return The enum numeric value on the wire for status. + * .messages.UserAction user_action = 2; + * @return Whether the userAction field is set. */ - int getStatusValue(); + boolean hasUserAction(); /** - * .dev.slimevr.bridge.TrackerStatus.Status status = 2; - * @return The status. + * .messages.UserAction user_action = 2; + * @return The userAction. */ - dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status getStatus(); + dev.slimevr.bridge.ProtobufMessages.UserAction getUserAction(); + /** + * .messages.UserAction user_action = 2; + */ + dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder getUserActionOrBuilder(); /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @return Whether the confidence field is set. + * .messages.TrackerAdded tracker_added = 3; + * @return Whether the trackerAdded field is set. */ - boolean hasConfidence(); + boolean hasTrackerAdded(); /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @return The enum numeric value on the wire for confidence. + * .messages.TrackerAdded tracker_added = 3; + * @return The trackerAdded. */ - int getConfidenceValue(); + dev.slimevr.bridge.ProtobufMessages.TrackerAdded getTrackerAdded(); /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @return The confidence. + * .messages.TrackerAdded tracker_added = 3; */ - dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence getConfidence(); + dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder getTrackerAddedOrBuilder(); + + /** + * .messages.TrackerStatus tracker_status = 4; + * @return Whether the trackerStatus field is set. + */ + boolean hasTrackerStatus(); + /** + * .messages.TrackerStatus tracker_status = 4; + * @return The trackerStatus. + */ + dev.slimevr.bridge.ProtobufMessages.TrackerStatus getTrackerStatus(); + /** + * .messages.TrackerStatus tracker_status = 4; + */ + dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder getTrackerStatusOrBuilder(); + + public dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.MessageCase getMessageCase(); } /** - * Protobuf type {@code dev.slimevr.bridge.TrackerStatus} + * Protobuf type {@code messages.ProtobufMessage} */ - public static final class TrackerStatus extends + public static final class ProtobufMessage extends com.google.protobuf.GeneratedMessageV3 implements - // @@protoc_insertion_point(message_implements:dev.slimevr.bridge.TrackerStatus) - TrackerStatusOrBuilder { + // @@protoc_insertion_point(message_implements:messages.ProtobufMessage) + ProtobufMessageOrBuilder { private static final long serialVersionUID = 0L; - // Use TrackerStatus.newBuilder() to construct. - private TrackerStatus(com.google.protobuf.GeneratedMessageV3.Builder builder) { + // Use ProtobufMessage.newBuilder() to construct. + private ProtobufMessage(com.google.protobuf.GeneratedMessageV3.Builder builder) { super(builder); } - private TrackerStatus() { - status_ = 0; - confidence_ = 0; + private ProtobufMessage() { } @java.lang.Override @SuppressWarnings({"unused"}) protected java.lang.Object newInstance( UnusedPrivateParameter unused) { - return new TrackerStatus(); + return new ProtobufMessage(); } @java.lang.Override @@ -3028,7 +4955,7 @@ protected java.lang.Object newInstance( getUnknownFields() { return this.unknownFields; } - private TrackerStatus( + private ProtobufMessage( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { @@ -3036,7 +4963,6 @@ private TrackerStatus( if (extensionRegistry == null) { throw new java.lang.NullPointerException(); } - int mutable_bitField0_ = 0; com.google.protobuf.UnknownFieldSet.Builder unknownFields = com.google.protobuf.UnknownFieldSet.newBuilder(); try { @@ -3047,21 +4973,60 @@ private TrackerStatus( case 0: done = true; break; - case 8: { - - trackerId_ = input.readInt32(); + case 10: { + dev.slimevr.bridge.ProtobufMessages.Position.Builder subBuilder = null; + if (messageCase_ == 1) { + subBuilder = ((dev.slimevr.bridge.ProtobufMessages.Position) message_).toBuilder(); + } + message_ = + input.readMessage(dev.slimevr.bridge.ProtobufMessages.Position.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom((dev.slimevr.bridge.ProtobufMessages.Position) message_); + message_ = subBuilder.buildPartial(); + } + messageCase_ = 1; break; } - case 16: { - int rawValue = input.readEnum(); - - status_ = rawValue; + case 18: { + dev.slimevr.bridge.ProtobufMessages.UserAction.Builder subBuilder = null; + if (messageCase_ == 2) { + subBuilder = ((dev.slimevr.bridge.ProtobufMessages.UserAction) message_).toBuilder(); + } + message_ = + input.readMessage(dev.slimevr.bridge.ProtobufMessages.UserAction.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom((dev.slimevr.bridge.ProtobufMessages.UserAction) message_); + message_ = subBuilder.buildPartial(); + } + messageCase_ = 2; break; } - case 24: { - int rawValue = input.readEnum(); - bitField0_ |= 0x00000001; - confidence_ = rawValue; + case 26: { + dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder subBuilder = null; + if (messageCase_ == 3) { + subBuilder = ((dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_).toBuilder(); + } + message_ = + input.readMessage(dev.slimevr.bridge.ProtobufMessages.TrackerAdded.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom((dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_); + message_ = subBuilder.buildPartial(); + } + messageCase_ = 3; + break; + } + case 34: { + dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder subBuilder = null; + if (messageCase_ == 4) { + subBuilder = ((dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_).toBuilder(); + } + message_ = + input.readMessage(dev.slimevr.bridge.ProtobufMessages.TrackerStatus.parser(), extensionRegistry); + if (subBuilder != null) { + subBuilder.mergeFrom((dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_); + message_ = subBuilder.buildPartial(); + } + messageCase_ = 4; break; } default: { @@ -3085,341 +5050,186 @@ private TrackerStatus( } public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_TrackerStatus_descriptor; + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_ProtobufMessage_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_TrackerStatus_fieldAccessorTable + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_ProtobufMessage_fieldAccessorTable .ensureFieldAccessorsInitialized( - dev.slimevr.bridge.ProtobufMessages.TrackerStatus.class, dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder.class); - } - - /** - * Protobuf enum {@code dev.slimevr.bridge.TrackerStatus.Status} - */ - public enum Status - implements com.google.protobuf.ProtocolMessageEnum { - /** - * DISCONNECTED = 0; - */ - DISCONNECTED(0), - /** - * OK = 1; - */ - OK(1), - /** - * BUSY = 2; - */ - BUSY(2), - /** - * ERROR = 3; - */ - ERROR(3), - /** - * OCCLUDED = 4; - */ - OCCLUDED(4), - UNRECOGNIZED(-1), - ; - - /** - * DISCONNECTED = 0; - */ - public static final int DISCONNECTED_VALUE = 0; - /** - * OK = 1; - */ - public static final int OK_VALUE = 1; - /** - * BUSY = 2; - */ - public static final int BUSY_VALUE = 2; - /** - * ERROR = 3; - */ - public static final int ERROR_VALUE = 3; - /** - * OCCLUDED = 4; - */ - public static final int OCCLUDED_VALUE = 4; - - - @Override - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - * @deprecated Use {@link #forNumber(int)} instead. - */ - @java.lang.Deprecated - public static Status valueOf(int value) { - return forNumber(value); - } - - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static Status forNumber(int value) { - switch (value) { - case 0: return DISCONNECTED; - case 1: return OK; - case 2: return BUSY; - case 3: return ERROR; - case 4: return OCCLUDED; - default: return null; - } - } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - Status> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - @Override - public Status findValueByNumber(int number) { - return Status.forNumber(number); - } - }; - - @Override - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } - @Override - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDescriptor().getEnumTypes().get(0); - } - - private static final Status[] VALUES = values(); - - public static Status valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; - } - + dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.class, dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.Builder.class); + } + + private int messageCase_ = 0; + private java.lang.Object message_; + public enum MessageCase + implements com.google.protobuf.Internal.EnumLite, + com.google.protobuf.AbstractMessage.InternalOneOfEnum { + POSITION(1), + USER_ACTION(2), + TRACKER_ADDED(3), + TRACKER_STATUS(4), + MESSAGE_NOT_SET(0); private final int value; - - private Status(int value) { + private MessageCase(int value) { this.value = value; } - - // @@protoc_insertion_point(enum_scope:dev.slimevr.bridge.TrackerStatus.Status) - } - - /** - * Protobuf enum {@code dev.slimevr.bridge.TrackerStatus.Confidence} - */ - public enum Confidence - implements com.google.protobuf.ProtocolMessageEnum { - /** - * NO = 0; - */ - NO(0), - /** - * LOW = 1; - */ - LOW(1), - /** - * MEDIUM = 5; - */ - MEDIUM(5), - /** - * HIGH = 10; - */ - HIGH(10), - UNRECOGNIZED(-1), - ; - - /** - * NO = 0; - */ - public static final int NO_VALUE = 0; - /** - * LOW = 1; - */ - public static final int LOW_VALUE = 1; - /** - * MEDIUM = 5; - */ - public static final int MEDIUM_VALUE = 5; - /** - * HIGH = 10; - */ - public static final int HIGH_VALUE = 10; - - - @Override - public final int getNumber() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalArgumentException( - "Can't get the number of an unknown enum value."); - } - return value; - } - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. + * @param value The number of the enum to look for. + * @return The enum associated with the given number. * @deprecated Use {@link #forNumber(int)} instead. */ @java.lang.Deprecated - public static Confidence valueOf(int value) { + public static MessageCase valueOf(int value) { return forNumber(value); } - /** - * @param value The numeric wire value of the corresponding enum entry. - * @return The enum associated with the given numeric wire value. - */ - public static Confidence forNumber(int value) { + public static MessageCase forNumber(int value) { switch (value) { - case 0: return NO; - case 1: return LOW; - case 5: return MEDIUM; - case 10: return HIGH; + case 1: return POSITION; + case 2: return USER_ACTION; + case 3: return TRACKER_ADDED; + case 4: return TRACKER_STATUS; + case 0: return MESSAGE_NOT_SET; default: return null; } } - - public static com.google.protobuf.Internal.EnumLiteMap - internalGetValueMap() { - return internalValueMap; - } - private static final com.google.protobuf.Internal.EnumLiteMap< - Confidence> internalValueMap = - new com.google.protobuf.Internal.EnumLiteMap() { - @Override - public Confidence findValueByNumber(int number) { - return Confidence.forNumber(number); - } - }; - - @Override - public final com.google.protobuf.Descriptors.EnumValueDescriptor - getValueDescriptor() { - if (this == UNRECOGNIZED) { - throw new java.lang.IllegalStateException( - "Can't get the descriptor of an unrecognized enum value."); - } - return getDescriptor().getValues().get(ordinal()); - } @Override - public final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptorForType() { - return getDescriptor(); - } - public static final com.google.protobuf.Descriptors.EnumDescriptor - getDescriptor() { - return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDescriptor().getEnumTypes().get(1); - } - - private static final Confidence[] VALUES = values(); - - public static Confidence valueOf( - com.google.protobuf.Descriptors.EnumValueDescriptor desc) { - if (desc.getType() != getDescriptor()) { - throw new java.lang.IllegalArgumentException( - "EnumValueDescriptor is not for this type."); - } - if (desc.getIndex() == -1) { - return UNRECOGNIZED; - } - return VALUES[desc.getIndex()]; + public int getNumber() { + return this.value; } + }; - private final int value; + @Override + public MessageCase + getMessageCase() { + return MessageCase.forNumber( + messageCase_); + } - private Confidence(int value) { - this.value = value; + public static final int POSITION_FIELD_NUMBER = 1; + /** + * .messages.Position position = 1; + * @return Whether the position field is set. + */ + @java.lang.Override + public boolean hasPosition() { + return messageCase_ == 1; + } + /** + * .messages.Position position = 1; + * @return The position. + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.Position getPosition() { + if (messageCase_ == 1) { + return (dev.slimevr.bridge.ProtobufMessages.Position) message_; } - - // @@protoc_insertion_point(enum_scope:dev.slimevr.bridge.TrackerStatus.Confidence) + return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance(); + } + /** + * .messages.Position position = 1; + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder getPositionOrBuilder() { + if (messageCase_ == 1) { + return (dev.slimevr.bridge.ProtobufMessages.Position) message_; + } + return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance(); } - private int bitField0_; - public static final int TRACKER_ID_FIELD_NUMBER = 1; - private int trackerId_; + public static final int USER_ACTION_FIELD_NUMBER = 2; /** - * int32 tracker_id = 1; - * @return The trackerId. + * .messages.UserAction user_action = 2; + * @return Whether the userAction field is set. */ @java.lang.Override - public int getTrackerId() { - return trackerId_; + public boolean hasUserAction() { + return messageCase_ == 2; + } + /** + * .messages.UserAction user_action = 2; + * @return The userAction. + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.UserAction getUserAction() { + if (messageCase_ == 2) { + return (dev.slimevr.bridge.ProtobufMessages.UserAction) message_; + } + return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance(); + } + /** + * .messages.UserAction user_action = 2; + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder getUserActionOrBuilder() { + if (messageCase_ == 2) { + return (dev.slimevr.bridge.ProtobufMessages.UserAction) message_; + } + return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance(); } - public static final int STATUS_FIELD_NUMBER = 2; - private int status_; + public static final int TRACKER_ADDED_FIELD_NUMBER = 3; /** - * .dev.slimevr.bridge.TrackerStatus.Status status = 2; - * @return The enum numeric value on the wire for status. + * .messages.TrackerAdded tracker_added = 3; + * @return Whether the trackerAdded field is set. */ - @java.lang.Override public int getStatusValue() { - return status_; + @java.lang.Override + public boolean hasTrackerAdded() { + return messageCase_ == 3; } /** - * .dev.slimevr.bridge.TrackerStatus.Status status = 2; - * @return The status. + * .messages.TrackerAdded tracker_added = 3; + * @return The trackerAdded. */ - @java.lang.Override public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status getStatus() { - @SuppressWarnings("deprecation") - dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.valueOf(status_); - return result == null ? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.UNRECOGNIZED : result; + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerAdded getTrackerAdded() { + if (messageCase_ == 3) { + return (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_; + } + return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance(); + } + /** + * .messages.TrackerAdded tracker_added = 3; + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder getTrackerAddedOrBuilder() { + if (messageCase_ == 3) { + return (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_; + } + return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance(); } - public static final int CONFIDENCE_FIELD_NUMBER = 3; - private int confidence_; + public static final int TRACKER_STATUS_FIELD_NUMBER = 4; /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @return Whether the confidence field is set. + * .messages.TrackerStatus tracker_status = 4; + * @return Whether the trackerStatus field is set. */ - @java.lang.Override public boolean hasConfidence() { - return ((bitField0_ & 0x00000001) != 0); + @java.lang.Override + public boolean hasTrackerStatus() { + return messageCase_ == 4; } /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @return The enum numeric value on the wire for confidence. + * .messages.TrackerStatus tracker_status = 4; + * @return The trackerStatus. */ - @java.lang.Override public int getConfidenceValue() { - return confidence_; + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerStatus getTrackerStatus() { + if (messageCase_ == 4) { + return (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_; + } + return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance(); } /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @return The confidence. + * .messages.TrackerStatus tracker_status = 4; */ - @java.lang.Override public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence getConfidence() { - @SuppressWarnings("deprecation") - dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence.valueOf(confidence_); - return result == null ? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence.UNRECOGNIZED : result; + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder getTrackerStatusOrBuilder() { + if (messageCase_ == 4) { + return (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_; + } + return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance(); } private byte memoizedIsInitialized = -1; @@ -3436,14 +5246,17 @@ public final boolean isInitialized() { @java.lang.Override public void writeTo(com.google.protobuf.CodedOutputStream output) throws java.io.IOException { - if (trackerId_ != 0) { - output.writeInt32(1, trackerId_); + if (messageCase_ == 1) { + output.writeMessage(1, (dev.slimevr.bridge.ProtobufMessages.Position) message_); } - if (status_ != dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.DISCONNECTED.getNumber()) { - output.writeEnum(2, status_); + if (messageCase_ == 2) { + output.writeMessage(2, (dev.slimevr.bridge.ProtobufMessages.UserAction) message_); } - if (((bitField0_ & 0x00000001) != 0)) { - output.writeEnum(3, confidence_); + if (messageCase_ == 3) { + output.writeMessage(3, (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_); + } + if (messageCase_ == 4) { + output.writeMessage(4, (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_); } unknownFields.writeTo(output); } @@ -3454,17 +5267,21 @@ public int getSerializedSize() { if (size != -1) return size; size = 0; - if (trackerId_ != 0) { + if (messageCase_ == 1) { size += com.google.protobuf.CodedOutputStream - .computeInt32Size(1, trackerId_); + .computeMessageSize(1, (dev.slimevr.bridge.ProtobufMessages.Position) message_); } - if (status_ != dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.DISCONNECTED.getNumber()) { + if (messageCase_ == 2) { size += com.google.protobuf.CodedOutputStream - .computeEnumSize(2, status_); + .computeMessageSize(2, (dev.slimevr.bridge.ProtobufMessages.UserAction) message_); } - if (((bitField0_ & 0x00000001) != 0)) { + if (messageCase_ == 3) { + size += com.google.protobuf.CodedOutputStream + .computeMessageSize(3, (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_); + } + if (messageCase_ == 4) { size += com.google.protobuf.CodedOutputStream - .computeEnumSize(3, confidence_); + .computeMessageSize(4, (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_); } size += unknownFields.getSerializedSize(); memoizedSize = size; @@ -3476,17 +5293,31 @@ public boolean equals(final java.lang.Object obj) { if (obj == this) { return true; } - if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.TrackerStatus)) { + if (!(obj instanceof dev.slimevr.bridge.ProtobufMessages.ProtobufMessage)) { return super.equals(obj); } - dev.slimevr.bridge.ProtobufMessages.TrackerStatus other = (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) obj; + dev.slimevr.bridge.ProtobufMessages.ProtobufMessage other = (dev.slimevr.bridge.ProtobufMessages.ProtobufMessage) obj; - if (getTrackerId() - != other.getTrackerId()) return false; - if (status_ != other.status_) return false; - if (hasConfidence() != other.hasConfidence()) return false; - if (hasConfidence()) { - if (confidence_ != other.confidence_) return false; + if (!getMessageCase().equals(other.getMessageCase())) return false; + switch (messageCase_) { + case 1: + if (!getPosition() + .equals(other.getPosition())) return false; + break; + case 2: + if (!getUserAction() + .equals(other.getUserAction())) return false; + break; + case 3: + if (!getTrackerAdded() + .equals(other.getTrackerAdded())) return false; + break; + case 4: + if (!getTrackerStatus() + .equals(other.getTrackerStatus())) return false; + break; + case 0: + default: } if (!unknownFields.equals(other.unknownFields)) return false; return true; @@ -3499,82 +5330,94 @@ public int hashCode() { } int hash = 41; hash = (19 * hash) + getDescriptor().hashCode(); - hash = (37 * hash) + TRACKER_ID_FIELD_NUMBER; - hash = (53 * hash) + getTrackerId(); - hash = (37 * hash) + STATUS_FIELD_NUMBER; - hash = (53 * hash) + status_; - if (hasConfidence()) { - hash = (37 * hash) + CONFIDENCE_FIELD_NUMBER; - hash = (53 * hash) + confidence_; + switch (messageCase_) { + case 1: + hash = (37 * hash) + POSITION_FIELD_NUMBER; + hash = (53 * hash) + getPosition().hashCode(); + break; + case 2: + hash = (37 * hash) + USER_ACTION_FIELD_NUMBER; + hash = (53 * hash) + getUserAction().hashCode(); + break; + case 3: + hash = (37 * hash) + TRACKER_ADDED_FIELD_NUMBER; + hash = (53 * hash) + getTrackerAdded().hashCode(); + break; + case 4: + hash = (37 * hash) + TRACKER_STATUS_FIELD_NUMBER; + hash = (53 * hash) + getTrackerStatus().hashCode(); + break; + case 0: + default: } hash = (29 * hash) + unknownFields.hashCode(); memoizedHashCode = hash; return hash; } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom( java.nio.ByteBuffer data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom( java.nio.ByteBuffer data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom( com.google.protobuf.ByteString data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom( com.google.protobuf.ByteString data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(byte[] data) + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom(byte[] data) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom( byte[] data, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { return PARSER.parseFrom(data, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom(java.io.InputStream input) + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseDelimitedFrom(java.io.InputStream input) + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseDelimitedFrom(java.io.InputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseDelimitedFrom( + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseDelimitedFrom( java.io.InputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseDelimitedWithIOException(PARSER, input, extensionRegistry); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom( com.google.protobuf.CodedInputStream input) throws java.io.IOException { return com.google.protobuf.GeneratedMessageV3 .parseWithIOException(PARSER, input); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parseFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws java.io.IOException { @@ -3587,7 +5430,7 @@ public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus parseFrom( public static Builder newBuilder() { return DEFAULT_INSTANCE.toBuilder(); } - public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.TrackerStatus prototype) { + public static Builder newBuilder(dev.slimevr.bridge.ProtobufMessages.ProtobufMessage prototype) { return DEFAULT_INSTANCE.toBuilder().mergeFrom(prototype); } @java.lang.Override @@ -3603,26 +5446,26 @@ protected Builder newBuilderForType( return builder; } /** - * Protobuf type {@code dev.slimevr.bridge.TrackerStatus} + * Protobuf type {@code messages.ProtobufMessage} */ public static final class Builder extends com.google.protobuf.GeneratedMessageV3.Builder implements - // @@protoc_insertion_point(builder_implements:dev.slimevr.bridge.TrackerStatus) - dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder { + // @@protoc_insertion_point(builder_implements:messages.ProtobufMessage) + dev.slimevr.bridge.ProtobufMessages.ProtobufMessageOrBuilder { public static final com.google.protobuf.Descriptors.Descriptor getDescriptor() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_TrackerStatus_descriptor; + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_ProtobufMessage_descriptor; } @java.lang.Override protected com.google.protobuf.GeneratedMessageV3.FieldAccessorTable internalGetFieldAccessorTable() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_TrackerStatus_fieldAccessorTable + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_ProtobufMessage_fieldAccessorTable .ensureFieldAccessorsInitialized( - dev.slimevr.bridge.ProtobufMessages.TrackerStatus.class, dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder.class); + dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.class, dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.Builder.class); } - // Construct using dev.slimevr.bridge.ProtobufMessages.TrackerStatus.newBuilder() + // Construct using dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.newBuilder() private Builder() { maybeForceBuilderInitialization(); } @@ -3640,29 +5483,25 @@ private void maybeForceBuilderInitialization() { @java.lang.Override public Builder clear() { super.clear(); - trackerId_ = 0; - - status_ = 0; - - confidence_ = 0; - bitField0_ = (bitField0_ & ~0x00000001); + messageCase_ = 0; + message_ = null; return this; } @java.lang.Override public com.google.protobuf.Descriptors.Descriptor getDescriptorForType() { - return dev.slimevr.bridge.ProtobufMessages.internal_static_dev_slimevr_bridge_TrackerStatus_descriptor; + return dev.slimevr.bridge.ProtobufMessages.internal_static_messages_ProtobufMessage_descriptor; } @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.TrackerStatus getDefaultInstanceForType() { - return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance(); + public dev.slimevr.bridge.ProtobufMessages.ProtobufMessage getDefaultInstanceForType() { + return dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.getDefaultInstance(); } @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.TrackerStatus build() { - dev.slimevr.bridge.ProtobufMessages.TrackerStatus result = buildPartial(); + public dev.slimevr.bridge.ProtobufMessages.ProtobufMessage build() { + dev.slimevr.bridge.ProtobufMessages.ProtobufMessage result = buildPartial(); if (!result.isInitialized()) { throw newUninitializedMessageException(result); } @@ -3670,17 +5509,37 @@ public dev.slimevr.bridge.ProtobufMessages.TrackerStatus build() { } @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.TrackerStatus buildPartial() { - dev.slimevr.bridge.ProtobufMessages.TrackerStatus result = new dev.slimevr.bridge.ProtobufMessages.TrackerStatus(this); - int from_bitField0_ = bitField0_; - int to_bitField0_ = 0; - result.trackerId_ = trackerId_; - result.status_ = status_; - if (((from_bitField0_ & 0x00000001) != 0)) { - to_bitField0_ |= 0x00000001; + public dev.slimevr.bridge.ProtobufMessages.ProtobufMessage buildPartial() { + dev.slimevr.bridge.ProtobufMessages.ProtobufMessage result = new dev.slimevr.bridge.ProtobufMessages.ProtobufMessage(this); + if (messageCase_ == 1) { + if (positionBuilder_ == null) { + result.message_ = message_; + } else { + result.message_ = positionBuilder_.build(); + } } - result.confidence_ = confidence_; - result.bitField0_ = to_bitField0_; + if (messageCase_ == 2) { + if (userActionBuilder_ == null) { + result.message_ = message_; + } else { + result.message_ = userActionBuilder_.build(); + } + } + if (messageCase_ == 3) { + if (trackerAddedBuilder_ == null) { + result.message_ = message_; + } else { + result.message_ = trackerAddedBuilder_.build(); + } + } + if (messageCase_ == 4) { + if (trackerStatusBuilder_ == null) { + result.message_ = message_; + } else { + result.message_ = trackerStatusBuilder_.build(); + } + } + result.messageCase_ = messageCase_; onBuilt(); return result; } @@ -3718,201 +5577,646 @@ public Builder addRepeatedField( return super.addRepeatedField(field, value); } @java.lang.Override - public Builder mergeFrom(com.google.protobuf.Message other) { - if (other instanceof dev.slimevr.bridge.ProtobufMessages.TrackerStatus) { - return mergeFrom((dev.slimevr.bridge.ProtobufMessages.TrackerStatus)other); + public Builder mergeFrom(com.google.protobuf.Message other) { + if (other instanceof dev.slimevr.bridge.ProtobufMessages.ProtobufMessage) { + return mergeFrom((dev.slimevr.bridge.ProtobufMessages.ProtobufMessage)other); + } else { + super.mergeFrom(other); + return this; + } + } + + public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.ProtobufMessage other) { + if (other == dev.slimevr.bridge.ProtobufMessages.ProtobufMessage.getDefaultInstance()) return this; + switch (other.getMessageCase()) { + case POSITION: { + mergePosition(other.getPosition()); + break; + } + case USER_ACTION: { + mergeUserAction(other.getUserAction()); + break; + } + case TRACKER_ADDED: { + mergeTrackerAdded(other.getTrackerAdded()); + break; + } + case TRACKER_STATUS: { + mergeTrackerStatus(other.getTrackerStatus()); + break; + } + case MESSAGE_NOT_SET: { + break; + } + } + this.mergeUnknownFields(other.unknownFields); + onChanged(); + return this; + } + + @java.lang.Override + public final boolean isInitialized() { + return true; + } + + @java.lang.Override + public Builder mergeFrom( + com.google.protobuf.CodedInputStream input, + com.google.protobuf.ExtensionRegistryLite extensionRegistry) + throws java.io.IOException { + dev.slimevr.bridge.ProtobufMessages.ProtobufMessage parsedMessage = null; + try { + parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); + } catch (com.google.protobuf.InvalidProtocolBufferException e) { + parsedMessage = (dev.slimevr.bridge.ProtobufMessages.ProtobufMessage) e.getUnfinishedMessage(); + throw e.unwrapIOException(); + } finally { + if (parsedMessage != null) { + mergeFrom(parsedMessage); + } + } + return this; + } + private int messageCase_ = 0; + private java.lang.Object message_; + @Override + public MessageCase + getMessageCase() { + return MessageCase.forNumber( + messageCase_); + } + + public Builder clearMessage() { + messageCase_ = 0; + message_ = null; + onChanged(); + return this; + } + + + private com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.Position, dev.slimevr.bridge.ProtobufMessages.Position.Builder, dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder> positionBuilder_; + /** + * .messages.Position position = 1; + * @return Whether the position field is set. + */ + @java.lang.Override + public boolean hasPosition() { + return messageCase_ == 1; + } + /** + * .messages.Position position = 1; + * @return The position. + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.Position getPosition() { + if (positionBuilder_ == null) { + if (messageCase_ == 1) { + return (dev.slimevr.bridge.ProtobufMessages.Position) message_; + } + return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance(); + } else { + if (messageCase_ == 1) { + return positionBuilder_.getMessage(); + } + return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance(); + } + } + /** + * .messages.Position position = 1; + */ + public Builder setPosition(dev.slimevr.bridge.ProtobufMessages.Position value) { + if (positionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + message_ = value; + onChanged(); + } else { + positionBuilder_.setMessage(value); + } + messageCase_ = 1; + return this; + } + /** + * .messages.Position position = 1; + */ + public Builder setPosition( + dev.slimevr.bridge.ProtobufMessages.Position.Builder builderForValue) { + if (positionBuilder_ == null) { + message_ = builderForValue.build(); + onChanged(); + } else { + positionBuilder_.setMessage(builderForValue.build()); + } + messageCase_ = 1; + return this; + } + /** + * .messages.Position position = 1; + */ + public Builder mergePosition(dev.slimevr.bridge.ProtobufMessages.Position value) { + if (positionBuilder_ == null) { + if (messageCase_ == 1 && + message_ != dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance()) { + message_ = dev.slimevr.bridge.ProtobufMessages.Position.newBuilder((dev.slimevr.bridge.ProtobufMessages.Position) message_) + .mergeFrom(value).buildPartial(); + } else { + message_ = value; + } + onChanged(); + } else { + if (messageCase_ == 1) { + positionBuilder_.mergeFrom(value); + } + positionBuilder_.setMessage(value); + } + messageCase_ = 1; + return this; + } + /** + * .messages.Position position = 1; + */ + public Builder clearPosition() { + if (positionBuilder_ == null) { + if (messageCase_ == 1) { + messageCase_ = 0; + message_ = null; + onChanged(); + } + } else { + if (messageCase_ == 1) { + messageCase_ = 0; + message_ = null; + } + positionBuilder_.clear(); + } + return this; + } + /** + * .messages.Position position = 1; + */ + public dev.slimevr.bridge.ProtobufMessages.Position.Builder getPositionBuilder() { + return getPositionFieldBuilder().getBuilder(); + } + /** + * .messages.Position position = 1; + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder getPositionOrBuilder() { + if ((messageCase_ == 1) && (positionBuilder_ != null)) { + return positionBuilder_.getMessageOrBuilder(); + } else { + if (messageCase_ == 1) { + return (dev.slimevr.bridge.ProtobufMessages.Position) message_; + } + return dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance(); + } + } + /** + * .messages.Position position = 1; + */ + private com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.Position, dev.slimevr.bridge.ProtobufMessages.Position.Builder, dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder> + getPositionFieldBuilder() { + if (positionBuilder_ == null) { + if (!(messageCase_ == 1)) { + message_ = dev.slimevr.bridge.ProtobufMessages.Position.getDefaultInstance(); + } + positionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.Position, dev.slimevr.bridge.ProtobufMessages.Position.Builder, dev.slimevr.bridge.ProtobufMessages.PositionOrBuilder>( + (dev.slimevr.bridge.ProtobufMessages.Position) message_, + getParentForChildren(), + isClean()); + message_ = null; + } + messageCase_ = 1; + onChanged();; + return positionBuilder_; + } + + private com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.UserAction, dev.slimevr.bridge.ProtobufMessages.UserAction.Builder, dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder> userActionBuilder_; + /** + * .messages.UserAction user_action = 2; + * @return Whether the userAction field is set. + */ + @java.lang.Override + public boolean hasUserAction() { + return messageCase_ == 2; + } + /** + * .messages.UserAction user_action = 2; + * @return The userAction. + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.UserAction getUserAction() { + if (userActionBuilder_ == null) { + if (messageCase_ == 2) { + return (dev.slimevr.bridge.ProtobufMessages.UserAction) message_; + } + return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance(); } else { - super.mergeFrom(other); - return this; + if (messageCase_ == 2) { + return userActionBuilder_.getMessage(); + } + return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance(); } } - - public Builder mergeFrom(dev.slimevr.bridge.ProtobufMessages.TrackerStatus other) { - if (other == dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance()) return this; - if (other.getTrackerId() != 0) { - setTrackerId(other.getTrackerId()); + /** + * .messages.UserAction user_action = 2; + */ + public Builder setUserAction(dev.slimevr.bridge.ProtobufMessages.UserAction value) { + if (userActionBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + message_ = value; + onChanged(); + } else { + userActionBuilder_.setMessage(value); } - if (other.status_ != 0) { - setStatusValue(other.getStatusValue()); + messageCase_ = 2; + return this; + } + /** + * .messages.UserAction user_action = 2; + */ + public Builder setUserAction( + dev.slimevr.bridge.ProtobufMessages.UserAction.Builder builderForValue) { + if (userActionBuilder_ == null) { + message_ = builderForValue.build(); + onChanged(); + } else { + userActionBuilder_.setMessage(builderForValue.build()); } - if (other.hasConfidence()) { - setConfidence(other.getConfidence()); + messageCase_ = 2; + return this; + } + /** + * .messages.UserAction user_action = 2; + */ + public Builder mergeUserAction(dev.slimevr.bridge.ProtobufMessages.UserAction value) { + if (userActionBuilder_ == null) { + if (messageCase_ == 2 && + message_ != dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance()) { + message_ = dev.slimevr.bridge.ProtobufMessages.UserAction.newBuilder((dev.slimevr.bridge.ProtobufMessages.UserAction) message_) + .mergeFrom(value).buildPartial(); + } else { + message_ = value; + } + onChanged(); + } else { + if (messageCase_ == 2) { + userActionBuilder_.mergeFrom(value); + } + userActionBuilder_.setMessage(value); } - this.mergeUnknownFields(other.unknownFields); - onChanged(); + messageCase_ = 2; return this; } - - @java.lang.Override - public final boolean isInitialized() { - return true; + /** + * .messages.UserAction user_action = 2; + */ + public Builder clearUserAction() { + if (userActionBuilder_ == null) { + if (messageCase_ == 2) { + messageCase_ = 0; + message_ = null; + onChanged(); + } + } else { + if (messageCase_ == 2) { + messageCase_ = 0; + message_ = null; + } + userActionBuilder_.clear(); + } + return this; } - + /** + * .messages.UserAction user_action = 2; + */ + public dev.slimevr.bridge.ProtobufMessages.UserAction.Builder getUserActionBuilder() { + return getUserActionFieldBuilder().getBuilder(); + } + /** + * .messages.UserAction user_action = 2; + */ @java.lang.Override - public Builder mergeFrom( - com.google.protobuf.CodedInputStream input, - com.google.protobuf.ExtensionRegistryLite extensionRegistry) - throws java.io.IOException { - dev.slimevr.bridge.ProtobufMessages.TrackerStatus parsedMessage = null; - try { - parsedMessage = PARSER.parsePartialFrom(input, extensionRegistry); - } catch (com.google.protobuf.InvalidProtocolBufferException e) { - parsedMessage = (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) e.getUnfinishedMessage(); - throw e.unwrapIOException(); - } finally { - if (parsedMessage != null) { - mergeFrom(parsedMessage); + public dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder getUserActionOrBuilder() { + if ((messageCase_ == 2) && (userActionBuilder_ != null)) { + return userActionBuilder_.getMessageOrBuilder(); + } else { + if (messageCase_ == 2) { + return (dev.slimevr.bridge.ProtobufMessages.UserAction) message_; } + return dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance(); } - return this; } - private int bitField0_; + /** + * .messages.UserAction user_action = 2; + */ + private com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.UserAction, dev.slimevr.bridge.ProtobufMessages.UserAction.Builder, dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder> + getUserActionFieldBuilder() { + if (userActionBuilder_ == null) { + if (!(messageCase_ == 2)) { + message_ = dev.slimevr.bridge.ProtobufMessages.UserAction.getDefaultInstance(); + } + userActionBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.UserAction, dev.slimevr.bridge.ProtobufMessages.UserAction.Builder, dev.slimevr.bridge.ProtobufMessages.UserActionOrBuilder>( + (dev.slimevr.bridge.ProtobufMessages.UserAction) message_, + getParentForChildren(), + isClean()); + message_ = null; + } + messageCase_ = 2; + onChanged();; + return userActionBuilder_; + } - private int trackerId_ ; + private com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.TrackerAdded, dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder> trackerAddedBuilder_; /** - * int32 tracker_id = 1; - * @return The trackerId. + * .messages.TrackerAdded tracker_added = 3; + * @return Whether the trackerAdded field is set. */ @java.lang.Override - public int getTrackerId() { - return trackerId_; + public boolean hasTrackerAdded() { + return messageCase_ == 3; } /** - * int32 tracker_id = 1; - * @param value The trackerId to set. - * @return This builder for chaining. + * .messages.TrackerAdded tracker_added = 3; + * @return The trackerAdded. */ - public Builder setTrackerId(int value) { - - trackerId_ = value; - onChanged(); + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerAdded getTrackerAdded() { + if (trackerAddedBuilder_ == null) { + if (messageCase_ == 3) { + return (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_; + } + return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance(); + } else { + if (messageCase_ == 3) { + return trackerAddedBuilder_.getMessage(); + } + return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance(); + } + } + /** + * .messages.TrackerAdded tracker_added = 3; + */ + public Builder setTrackerAdded(dev.slimevr.bridge.ProtobufMessages.TrackerAdded value) { + if (trackerAddedBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + message_ = value; + onChanged(); + } else { + trackerAddedBuilder_.setMessage(value); + } + messageCase_ = 3; return this; } /** - * int32 tracker_id = 1; - * @return This builder for chaining. + * .messages.TrackerAdded tracker_added = 3; */ - public Builder clearTrackerId() { - - trackerId_ = 0; - onChanged(); + public Builder setTrackerAdded( + dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder builderForValue) { + if (trackerAddedBuilder_ == null) { + message_ = builderForValue.build(); + onChanged(); + } else { + trackerAddedBuilder_.setMessage(builderForValue.build()); + } + messageCase_ = 3; return this; } - - private int status_ = 0; /** - * .dev.slimevr.bridge.TrackerStatus.Status status = 2; - * @return The enum numeric value on the wire for status. + * .messages.TrackerAdded tracker_added = 3; */ - @java.lang.Override public int getStatusValue() { - return status_; + public Builder mergeTrackerAdded(dev.slimevr.bridge.ProtobufMessages.TrackerAdded value) { + if (trackerAddedBuilder_ == null) { + if (messageCase_ == 3 && + message_ != dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance()) { + message_ = dev.slimevr.bridge.ProtobufMessages.TrackerAdded.newBuilder((dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_) + .mergeFrom(value).buildPartial(); + } else { + message_ = value; + } + onChanged(); + } else { + if (messageCase_ == 3) { + trackerAddedBuilder_.mergeFrom(value); + } + trackerAddedBuilder_.setMessage(value); + } + messageCase_ = 3; + return this; } /** - * .dev.slimevr.bridge.TrackerStatus.Status status = 2; - * @param value The enum numeric value on the wire for status to set. - * @return This builder for chaining. + * .messages.TrackerAdded tracker_added = 3; */ - public Builder setStatusValue(int value) { - - status_ = value; - onChanged(); + public Builder clearTrackerAdded() { + if (trackerAddedBuilder_ == null) { + if (messageCase_ == 3) { + messageCase_ = 0; + message_ = null; + onChanged(); + } + } else { + if (messageCase_ == 3) { + messageCase_ = 0; + message_ = null; + } + trackerAddedBuilder_.clear(); + } return this; } /** - * .dev.slimevr.bridge.TrackerStatus.Status status = 2; - * @return The status. + * .messages.TrackerAdded tracker_added = 3; */ - @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status getStatus() { - @SuppressWarnings("deprecation") - dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.valueOf(status_); - return result == null ? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status.UNRECOGNIZED : result; + public dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder getTrackerAddedBuilder() { + return getTrackerAddedFieldBuilder().getBuilder(); } /** - * .dev.slimevr.bridge.TrackerStatus.Status status = 2; - * @param value The status to set. - * @return This builder for chaining. + * .messages.TrackerAdded tracker_added = 3; */ - public Builder setStatus(dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Status value) { - if (value == null) { - throw new NullPointerException(); + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder getTrackerAddedOrBuilder() { + if ((messageCase_ == 3) && (trackerAddedBuilder_ != null)) { + return trackerAddedBuilder_.getMessageOrBuilder(); + } else { + if (messageCase_ == 3) { + return (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_; + } + return dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance(); } - - status_ = value.getNumber(); - onChanged(); - return this; } /** - * .dev.slimevr.bridge.TrackerStatus.Status status = 2; - * @return This builder for chaining. + * .messages.TrackerAdded tracker_added = 3; */ - public Builder clearStatus() { - - status_ = 0; - onChanged(); - return this; + private com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.TrackerAdded, dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder> + getTrackerAddedFieldBuilder() { + if (trackerAddedBuilder_ == null) { + if (!(messageCase_ == 3)) { + message_ = dev.slimevr.bridge.ProtobufMessages.TrackerAdded.getDefaultInstance(); + } + trackerAddedBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.TrackerAdded, dev.slimevr.bridge.ProtobufMessages.TrackerAdded.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerAddedOrBuilder>( + (dev.slimevr.bridge.ProtobufMessages.TrackerAdded) message_, + getParentForChildren(), + isClean()); + message_ = null; + } + messageCase_ = 3; + onChanged();; + return trackerAddedBuilder_; } - private int confidence_ = 0; + private com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.TrackerStatus, dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder> trackerStatusBuilder_; /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @return Whether the confidence field is set. + * .messages.TrackerStatus tracker_status = 4; + * @return Whether the trackerStatus field is set. */ - @java.lang.Override public boolean hasConfidence() { - return ((bitField0_ & 0x00000001) != 0); + @java.lang.Override + public boolean hasTrackerStatus() { + return messageCase_ == 4; } /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @return The enum numeric value on the wire for confidence. + * .messages.TrackerStatus tracker_status = 4; + * @return The trackerStatus. */ - @java.lang.Override public int getConfidenceValue() { - return confidence_; + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerStatus getTrackerStatus() { + if (trackerStatusBuilder_ == null) { + if (messageCase_ == 4) { + return (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_; + } + return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance(); + } else { + if (messageCase_ == 4) { + return trackerStatusBuilder_.getMessage(); + } + return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance(); + } } /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @param value The enum numeric value on the wire for confidence to set. - * @return This builder for chaining. + * .messages.TrackerStatus tracker_status = 4; */ - public Builder setConfidenceValue(int value) { - bitField0_ |= 0x00000001; - confidence_ = value; - onChanged(); + public Builder setTrackerStatus(dev.slimevr.bridge.ProtobufMessages.TrackerStatus value) { + if (trackerStatusBuilder_ == null) { + if (value == null) { + throw new NullPointerException(); + } + message_ = value; + onChanged(); + } else { + trackerStatusBuilder_.setMessage(value); + } + messageCase_ = 4; return this; } /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @return The confidence. + * .messages.TrackerStatus tracker_status = 4; */ - @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence getConfidence() { - @SuppressWarnings("deprecation") - dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence result = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence.valueOf(confidence_); - return result == null ? dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence.UNRECOGNIZED : result; + public Builder setTrackerStatus( + dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder builderForValue) { + if (trackerStatusBuilder_ == null) { + message_ = builderForValue.build(); + onChanged(); + } else { + trackerStatusBuilder_.setMessage(builderForValue.build()); + } + messageCase_ = 4; + return this; } /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @param value The confidence to set. - * @return This builder for chaining. + * .messages.TrackerStatus tracker_status = 4; */ - public Builder setConfidence(dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Confidence value) { - if (value == null) { - throw new NullPointerException(); + public Builder mergeTrackerStatus(dev.slimevr.bridge.ProtobufMessages.TrackerStatus value) { + if (trackerStatusBuilder_ == null) { + if (messageCase_ == 4 && + message_ != dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance()) { + message_ = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.newBuilder((dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_) + .mergeFrom(value).buildPartial(); + } else { + message_ = value; + } + onChanged(); + } else { + if (messageCase_ == 4) { + trackerStatusBuilder_.mergeFrom(value); + } + trackerStatusBuilder_.setMessage(value); } - bitField0_ |= 0x00000001; - confidence_ = value.getNumber(); - onChanged(); + messageCase_ = 4; return this; } /** - * .dev.slimevr.bridge.TrackerStatus.Confidence confidence = 3; - * @return This builder for chaining. + * .messages.TrackerStatus tracker_status = 4; */ - public Builder clearConfidence() { - bitField0_ = (bitField0_ & ~0x00000001); - confidence_ = 0; - onChanged(); + public Builder clearTrackerStatus() { + if (trackerStatusBuilder_ == null) { + if (messageCase_ == 4) { + messageCase_ = 0; + message_ = null; + onChanged(); + } + } else { + if (messageCase_ == 4) { + messageCase_ = 0; + message_ = null; + } + trackerStatusBuilder_.clear(); + } return this; } + /** + * .messages.TrackerStatus tracker_status = 4; + */ + public dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder getTrackerStatusBuilder() { + return getTrackerStatusFieldBuilder().getBuilder(); + } + /** + * .messages.TrackerStatus tracker_status = 4; + */ + @java.lang.Override + public dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder getTrackerStatusOrBuilder() { + if ((messageCase_ == 4) && (trackerStatusBuilder_ != null)) { + return trackerStatusBuilder_.getMessageOrBuilder(); + } else { + if (messageCase_ == 4) { + return (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_; + } + return dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance(); + } + } + /** + * .messages.TrackerStatus tracker_status = 4; + */ + private com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.TrackerStatus, dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder> + getTrackerStatusFieldBuilder() { + if (trackerStatusBuilder_ == null) { + if (!(messageCase_ == 4)) { + message_ = dev.slimevr.bridge.ProtobufMessages.TrackerStatus.getDefaultInstance(); + } + trackerStatusBuilder_ = new com.google.protobuf.SingleFieldBuilderV3< + dev.slimevr.bridge.ProtobufMessages.TrackerStatus, dev.slimevr.bridge.ProtobufMessages.TrackerStatus.Builder, dev.slimevr.bridge.ProtobufMessages.TrackerStatusOrBuilder>( + (dev.slimevr.bridge.ProtobufMessages.TrackerStatus) message_, + getParentForChildren(), + isClean()); + message_ = null; + } + messageCase_ = 4; + onChanged();; + return trackerStatusBuilder_; + } @java.lang.Override public final Builder setUnknownFields( final com.google.protobuf.UnknownFieldSet unknownFields) { @@ -3926,71 +6230,86 @@ public final Builder mergeUnknownFields( } - // @@protoc_insertion_point(builder_scope:dev.slimevr.bridge.TrackerStatus) + // @@protoc_insertion_point(builder_scope:messages.ProtobufMessage) } - // @@protoc_insertion_point(class_scope:dev.slimevr.bridge.TrackerStatus) - private static final dev.slimevr.bridge.ProtobufMessages.TrackerStatus DEFAULT_INSTANCE; + // @@protoc_insertion_point(class_scope:messages.ProtobufMessage) + private static final dev.slimevr.bridge.ProtobufMessages.ProtobufMessage DEFAULT_INSTANCE; static { - DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.TrackerStatus(); + DEFAULT_INSTANCE = new dev.slimevr.bridge.ProtobufMessages.ProtobufMessage(); } - public static dev.slimevr.bridge.ProtobufMessages.TrackerStatus getDefaultInstance() { + public static dev.slimevr.bridge.ProtobufMessages.ProtobufMessage getDefaultInstance() { return DEFAULT_INSTANCE; } - private static final com.google.protobuf.Parser - PARSER = new com.google.protobuf.AbstractParser() { + private static final com.google.protobuf.Parser + PARSER = new com.google.protobuf.AbstractParser() { @java.lang.Override - public TrackerStatus parsePartialFrom( + public ProtobufMessage parsePartialFrom( com.google.protobuf.CodedInputStream input, com.google.protobuf.ExtensionRegistryLite extensionRegistry) throws com.google.protobuf.InvalidProtocolBufferException { - return new TrackerStatus(input, extensionRegistry); + return new ProtobufMessage(input, extensionRegistry); } }; - public static com.google.protobuf.Parser parser() { + public static com.google.protobuf.Parser parser() { return PARSER; } @java.lang.Override - public com.google.protobuf.Parser getParserForType() { + public com.google.protobuf.Parser getParserForType() { return PARSER; } @java.lang.Override - public dev.slimevr.bridge.ProtobufMessages.TrackerStatus getDefaultInstanceForType() { + public dev.slimevr.bridge.ProtobufMessages.ProtobufMessage getDefaultInstanceForType() { return DEFAULT_INSTANCE; } } private static final com.google.protobuf.Descriptors.Descriptor - internal_static_dev_slimevr_bridge_Position_descriptor; + internal_static_messages_PingPong_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_messages_PingPong_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_messages_Position_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_messages_Position_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_messages_UserAction_descriptor; + private static final + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable + internal_static_messages_UserAction_fieldAccessorTable; + private static final com.google.protobuf.Descriptors.Descriptor + internal_static_messages_UserAction_ActionArgumentsEntry_descriptor; private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_dev_slimevr_bridge_Position_fieldAccessorTable; + internal_static_messages_UserAction_ActionArgumentsEntry_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor - internal_static_dev_slimevr_bridge_UserAction_descriptor; + internal_static_messages_TrackerAdded_descriptor; private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_dev_slimevr_bridge_UserAction_fieldAccessorTable; + internal_static_messages_TrackerAdded_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor - internal_static_dev_slimevr_bridge_UserAction_ActionArgumentsEntry_descriptor; + internal_static_messages_TrackerStatus_descriptor; private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_dev_slimevr_bridge_UserAction_ActionArgumentsEntry_fieldAccessorTable; + internal_static_messages_TrackerStatus_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor - internal_static_dev_slimevr_bridge_TrackerAdded_descriptor; + internal_static_messages_TrackerStatus_ExtraEntry_descriptor; private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_dev_slimevr_bridge_TrackerAdded_fieldAccessorTable; + internal_static_messages_TrackerStatus_ExtraEntry_fieldAccessorTable; private static final com.google.protobuf.Descriptors.Descriptor - internal_static_dev_slimevr_bridge_TrackerStatus_descriptor; + internal_static_messages_ProtobufMessage_descriptor; private static final com.google.protobuf.GeneratedMessageV3.FieldAccessorTable - internal_static_dev_slimevr_bridge_TrackerStatus_fieldAccessorTable; + internal_static_messages_ProtobufMessage_fieldAccessorTable; public static com.google.protobuf.Descriptors.FileDescriptor getDescriptor() { @@ -4000,63 +6319,90 @@ public dev.slimevr.bridge.ProtobufMessages.TrackerStatus getDefaultInstanceForTy descriptor; static { java.lang.String[] descriptorData = { - "\n\026ProtobufMessages.proto\022\022dev.slimevr.br" + - "idge\"\374\001\n\010Position\022\022\n\ntracker_id\030\001 \001(\005\022\t\n" + - "\001x\030\002 \001(\002\022\t\n\001y\030\003 \001(\002\022\t\n\001z\030\004 \001(\002\022\n\n\002qx\030\005 \001" + - "(\002\022\n\n\002qy\030\006 \001(\002\022\n\n\002qz\030\007 \001(\002\022\n\n\002qw\030\010 \001(\002\022A" + - "\n\013data_source\030\t \001(\0162\'.dev.slimevr.bridge" + - ".Position.DataSourceH\000\210\001\001\"8\n\nDataSource\022" + - "\010\n\004NONE\020\000\022\007\n\003IMU\020\001\022\r\n\tPRECISION\020\002\022\010\n\004FUL" + - "L\020\003B\016\n\014_data_source\"\241\001\n\nUserAction\022\014\n\004na" + - "me\030\001 \001(\t\022M\n\020action_arguments\030\002 \003(\01323.dev" + - ".slimevr.bridge.UserAction.ActionArgumen" + - "tsEntry\0326\n\024ActionArgumentsEntry\022\013\n\003key\030\001" + - " \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"J\n\014TrackerAdded\022" + - "\022\n\ntracker_id\030\001 \001(\005\022\024\n\014tracker_name\030\002 \001(" + - "\t\022\020\n\010location\030\003 \001(\t\"\257\002\n\rTrackerStatus\022\022\n" + - "\ntracker_id\030\001 \001(\005\0228\n\006status\030\002 \001(\0162(.dev." + - "slimevr.bridge.TrackerStatus.Status\022E\n\nc" + - "onfidence\030\003 \001(\0162,.dev.slimevr.bridge.Tra" + - "ckerStatus.ConfidenceH\000\210\001\001\"E\n\006Status\022\020\n\014" + + "\n\026ProtobufMessages.proto\022\010messages\"\n\n\010Pi" + + "ngPong\"\223\002\n\010Position\022\022\n\ntracker_id\030\001 \001(\005\022" + + "\016\n\001x\030\002 \001(\002H\000\210\001\001\022\016\n\001y\030\003 \001(\002H\001\210\001\001\022\016\n\001z\030\004 \001" + + "(\002H\002\210\001\001\022\n\n\002qx\030\005 \001(\002\022\n\n\002qy\030\006 \001(\002\022\n\n\002qz\030\007 " + + "\001(\002\022\n\n\002qw\030\010 \001(\002\0227\n\013data_source\030\t \001(\0162\035.m" + + "essages.Position.DataSourceH\003\210\001\001\"8\n\nData" + + "Source\022\010\n\004NONE\020\000\022\007\n\003IMU\020\001\022\r\n\tPRECISION\020\002" + + "\022\010\n\004FULL\020\003B\004\n\002_xB\004\n\002_yB\004\n\002_zB\016\n\014_data_so" + + "urce\"\227\001\n\nUserAction\022\014\n\004name\030\001 \001(\t\022C\n\020act" + + "ion_arguments\030\002 \003(\0132).messages.UserActio" + + "n.ActionArgumentsEntry\0326\n\024ActionArgument" + + "sEntry\022\013\n\003key\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"f" + + "\n\014TrackerAdded\022\022\n\ntracker_id\030\001 \001(\005\022\026\n\016tr" + + "acker_serial\030\002 \001(\t\022\024\n\014tracker_name\030\003 \001(\t" + + "\022\024\n\014tracker_role\030\004 \001(\005\"\374\002\n\rTrackerStatus" + + "\022\022\n\ntracker_id\030\001 \001(\005\022.\n\006status\030\002 \001(\0162\036.m" + + "essages.TrackerStatus.Status\0221\n\005extra\030\003 " + + "\003(\0132\".messages.TrackerStatus.ExtraEntry\022" + + ";\n\nconfidence\030\004 \001(\0162\".messages.TrackerSt" + + "atus.ConfidenceH\000\210\001\001\032,\n\nExtraEntry\022\013\n\003ke" + + "y\030\001 \001(\t\022\r\n\005value\030\002 \001(\t:\0028\001\"E\n\006Status\022\020\n\014" + "DISCONNECTED\020\000\022\006\n\002OK\020\001\022\010\n\004BUSY\020\002\022\t\n\005ERRO" + "R\020\003\022\014\n\010OCCLUDED\020\004\"3\n\nConfidence\022\006\n\002NO\020\000\022" + "\007\n\003LOW\020\001\022\n\n\006MEDIUM\020\005\022\010\n\004HIGH\020\nB\r\n\013_confi" + - "denceb\006proto3" + "dence\"\325\001\n\017ProtobufMessage\022&\n\010position\030\001 " + + "\001(\0132\022.messages.PositionH\000\022+\n\013user_action" + + "\030\002 \001(\0132\024.messages.UserActionH\000\022/\n\rtracke" + + "r_added\030\003 \001(\0132\026.messages.TrackerAddedH\000\022" + + "1\n\016tracker_status\030\004 \001(\0132\027.messages.Track" + + "erStatusH\000B\t\n\007messageB&\n\022dev.slimevr.bri" + + "dgeB\020ProtobufMessagesb\006proto3" }; descriptor = com.google.protobuf.Descriptors.FileDescriptor .internalBuildGeneratedFileFrom(descriptorData, new com.google.protobuf.Descriptors.FileDescriptor[] { }); - internal_static_dev_slimevr_bridge_Position_descriptor = + internal_static_messages_PingPong_descriptor = getDescriptor().getMessageTypes().get(0); - internal_static_dev_slimevr_bridge_Position_fieldAccessorTable = new + internal_static_messages_PingPong_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_dev_slimevr_bridge_Position_descriptor, - new java.lang.String[] { "TrackerId", "X", "Y", "Z", "Qx", "Qy", "Qz", "Qw", "DataSource", "DataSource", }); - internal_static_dev_slimevr_bridge_UserAction_descriptor = + internal_static_messages_PingPong_descriptor, + new java.lang.String[] { }); + internal_static_messages_Position_descriptor = getDescriptor().getMessageTypes().get(1); - internal_static_dev_slimevr_bridge_UserAction_fieldAccessorTable = new + internal_static_messages_Position_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_dev_slimevr_bridge_UserAction_descriptor, + internal_static_messages_Position_descriptor, + new java.lang.String[] { "TrackerId", "X", "Y", "Z", "Qx", "Qy", "Qz", "Qw", "DataSource", "X", "Y", "Z", "DataSource", }); + internal_static_messages_UserAction_descriptor = + getDescriptor().getMessageTypes().get(2); + internal_static_messages_UserAction_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_messages_UserAction_descriptor, new java.lang.String[] { "Name", "ActionArguments", }); - internal_static_dev_slimevr_bridge_UserAction_ActionArgumentsEntry_descriptor = - internal_static_dev_slimevr_bridge_UserAction_descriptor.getNestedTypes().get(0); - internal_static_dev_slimevr_bridge_UserAction_ActionArgumentsEntry_fieldAccessorTable = new + internal_static_messages_UserAction_ActionArgumentsEntry_descriptor = + internal_static_messages_UserAction_descriptor.getNestedTypes().get(0); + internal_static_messages_UserAction_ActionArgumentsEntry_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_dev_slimevr_bridge_UserAction_ActionArgumentsEntry_descriptor, + internal_static_messages_UserAction_ActionArgumentsEntry_descriptor, new java.lang.String[] { "Key", "Value", }); - internal_static_dev_slimevr_bridge_TrackerAdded_descriptor = - getDescriptor().getMessageTypes().get(2); - internal_static_dev_slimevr_bridge_TrackerAdded_fieldAccessorTable = new - com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_dev_slimevr_bridge_TrackerAdded_descriptor, - new java.lang.String[] { "TrackerId", "TrackerName", "Location", }); - internal_static_dev_slimevr_bridge_TrackerStatus_descriptor = + internal_static_messages_TrackerAdded_descriptor = getDescriptor().getMessageTypes().get(3); - internal_static_dev_slimevr_bridge_TrackerStatus_fieldAccessorTable = new + internal_static_messages_TrackerAdded_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_messages_TrackerAdded_descriptor, + new java.lang.String[] { "TrackerId", "TrackerSerial", "TrackerName", "TrackerRole", }); + internal_static_messages_TrackerStatus_descriptor = + getDescriptor().getMessageTypes().get(4); + internal_static_messages_TrackerStatus_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_messages_TrackerStatus_descriptor, + new java.lang.String[] { "TrackerId", "Status", "Extra", "Confidence", "Confidence", }); + internal_static_messages_TrackerStatus_ExtraEntry_descriptor = + internal_static_messages_TrackerStatus_descriptor.getNestedTypes().get(0); + internal_static_messages_TrackerStatus_ExtraEntry_fieldAccessorTable = new + com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( + internal_static_messages_TrackerStatus_ExtraEntry_descriptor, + new java.lang.String[] { "Key", "Value", }); + internal_static_messages_ProtobufMessage_descriptor = + getDescriptor().getMessageTypes().get(5); + internal_static_messages_ProtobufMessage_fieldAccessorTable = new com.google.protobuf.GeneratedMessageV3.FieldAccessorTable( - internal_static_dev_slimevr_bridge_TrackerStatus_descriptor, - new java.lang.String[] { "TrackerId", "Status", "Confidence", "Confidence", }); + internal_static_messages_ProtobufMessage_descriptor, + new java.lang.String[] { "Position", "UserAction", "TrackerAdded", "TrackerStatus", "Message", }); } // @@protoc_insertion_point(outer_class_scope) diff --git a/src/main/java/io/eiren/vr/bridge/SteamVRPipeInputBridge.java b/src/main/java/dev/slimevr/bridge/SteamVRPipeInputBridge.java similarity index 69% rename from src/main/java/io/eiren/vr/bridge/SteamVRPipeInputBridge.java rename to src/main/java/dev/slimevr/bridge/SteamVRPipeInputBridge.java index d3dc15e006..c9ee5a4070 100644 --- a/src/main/java/io/eiren/vr/bridge/SteamVRPipeInputBridge.java +++ b/src/main/java/dev/slimevr/bridge/SteamVRPipeInputBridge.java @@ -1,4 +1,4 @@ -package io.eiren.vr.bridge; +package dev.slimevr.bridge; import java.io.IOException; import java.util.HashMap; @@ -13,16 +13,19 @@ import com.jme3.math.Vector3f; import com.sun.jna.platform.win32.Kernel32; import com.sun.jna.platform.win32.WinBase; +import com.sun.jna.platform.win32.WinError; import com.sun.jna.ptr.IntByReference; +import dev.slimevr.bridge.Pipe.PipeState; import io.eiren.util.collections.FastList; import io.eiren.util.logging.LogManager; import io.eiren.vr.VRServer; -import io.eiren.vr.processor.TrackerBodyPosition; -import io.eiren.vr.trackers.SteamVRTracker; +import io.eiren.vr.trackers.VRTracker; +import io.eiren.vr.trackers.ShareableTracker; +import io.eiren.vr.trackers.TrackerPosition; import io.eiren.vr.trackers.TrackerStatus; -public class SteamVRPipeInputBridge extends Thread implements VRBridge { +public class SteamVRPipeInputBridge extends Thread implements Bridge { private static final int MAX_COMMAND_LENGTH = 2048; public static final String PipeName = "\\\\.\\pipe\\SlimeVRInput"; @@ -30,8 +33,8 @@ public class SteamVRPipeInputBridge extends Thread implements VRBridge { private final byte[] buffArray = new byte[1024]; private final VRServer server; private final StringBuilder commandBuilder = new StringBuilder(1024); - private final List trackers = new FastList<>(); - private final Map trackersInternal = new HashMap<>(); + private final List trackers = new FastList<>(); + private final Map trackersInternal = new HashMap<>(); private AtomicBoolean newData = new AtomicBoolean(false); private final Vector3f vBuffer = new Vector3f(); private final Quaternion qBuffer = new Quaternion(); @@ -46,14 +49,22 @@ public void run() { try { createPipes(); while(true) { - waitForPipesToOpen(); - if(areAllPipesOpen()) { - boolean pipesUpdated = updatePipes(); // Update at HMDs frequency - if(!pipesUpdated) { + boolean pipesUpdated = false; + if(pipe.state == PipeState.CREATED) { + tryOpeningPipe(pipe); + } + if(pipe.state == PipeState.OPEN) { + pipesUpdated = updatePipes(); + } + if(pipe.state == PipeState.ERROR) { + resetPipe(); + } + if(!pipesUpdated) { + try { Thread.sleep(5); // Up to 200Hz + } catch(InterruptedException e) { + e.printStackTrace(); } - } else { - Thread.sleep(10); } } } catch(Exception e) { @@ -61,12 +72,6 @@ public void run() { } } - private void waitForPipesToOpen() { - if(pipe.state == PipeState.CREATED) { - tryOpeningPipe(pipe); - } - } - public boolean updatePipes() throws IOException { if(pipe.state == PipeState.OPEN) { IntByReference bytesAvailable = new IntByReference(0); @@ -88,11 +93,15 @@ public boolean updatePipes() throws IOException { } } if(bytesRead < buffArray.length) - break; // Don't repeat, we read all available bytes + return true; // All pipe data read } - return true; + } else { + return false; // Pipe was empty, it's okay } } + // PeekNamedPipe or ReadFile returned an error + pipe.state = PipeState.ERROR; + LogManager.log.severe("[SteamVRPipeInputBridge] Pipe error: " + Kernel32.INSTANCE.GetLastError()); } return false; } @@ -105,15 +114,15 @@ private void executeInputCommand() throws IOException { LogManager.log.severe("[SteamVRPipeInputBridge] Error in ADD command. Command requires at least 4 arguments. Supplied: " + commandBuilder.toString()); return; } - SteamVRTracker internalTracker = new SteamVRTracker(Integer.parseInt(command[1]), StringUtils.join(command, " ", 3, command.length), true, true); + VRTracker internalTracker = new VRTracker(Integer.parseInt(command[1]), StringUtils.join(command, " ", 3, command.length), true, true); int roleId = Integer.parseInt(command[2]); if(roleId >= 0 && roleId < SteamVRInputRoles.values.length) { SteamVRInputRoles svrRole = SteamVRInputRoles.values[roleId]; internalTracker.bodyPosition = svrRole.bodyPosition; } - SteamVRTracker oldTracker; + VRTracker oldTracker; synchronized(trackersInternal) { - oldTracker = trackersInternal.put(internalTracker.id, internalTracker); + oldTracker = trackersInternal.put(internalTracker.getTrackerId(), internalTracker); } if(oldTracker != null) { LogManager.log.severe("[SteamVRPipeInputBridge] New tracker added with the same id. Supplied: " + commandBuilder.toString()); @@ -165,25 +174,20 @@ private void executeInputCommand() throws IOException { @Override public void dataRead() { - // Not used, only input - } - - @Override - public void dataWrite() { if(newData.getAndSet(false)) { if(trackers.size() < trackersInternal.size()) { // Add new trackers synchronized(trackersInternal) { - Iterator iterator = trackersInternal.values().iterator(); + Iterator iterator = trackersInternal.values().iterator(); internal: while(iterator.hasNext()) { - SteamVRTracker internalTracker = iterator.next(); + VRTracker internalTracker = iterator.next(); for(int i = 0; i < trackers.size(); ++i) { - SteamVRTracker t = trackers.get(i); - if(t.id == internalTracker.id) + VRTracker t = trackers.get(i); + if(t.getTrackerId() == internalTracker.getTrackerId()) continue internal; } // Tracker is not found in current trackers - SteamVRTracker tracker = new SteamVRTracker(internalTracker.id, internalTracker.getName(), true, true); + VRTracker tracker = new VRTracker(internalTracker.getTrackerId(), internalTracker.getName(), true, true); tracker.bodyPosition = internalTracker.bodyPosition; trackers.add(tracker); server.registerTracker(tracker); @@ -191,10 +195,10 @@ public void dataWrite() { } } for(int i = 0; i < trackers.size(); ++i) { - SteamVRTracker tracker = trackers.get(i); - SteamVRTracker internal = trackersInternal.get(tracker.id); + VRTracker tracker = trackers.get(i); + VRTracker internal = trackersInternal.get(tracker.getTrackerId()); if(internal == null) - throw new NullPointerException("Lost internal tracker somehow: " + tracker.id); // Shouln't really happen even, but better to catch it like this + throw new NullPointerException("Lost internal tracker somehow: " + tracker.getTrackerId()); // Shouln't really happen even, but better to catch it like this if(internal.getPosition(vBuffer)) tracker.position.set(vBuffer); if(internal.getRotation(qBuffer)) @@ -205,8 +209,19 @@ public void dataWrite() { } } + @Override + public void dataWrite() { + // Not used, only input + } + + private void resetPipe() { + Pipe.safeDisconnect(pipe); + pipe.state = PipeState.CREATED; + //Main.vrServer.queueTask(this::disconnected); + } + private boolean tryOpeningPipe(Pipe pipe) { - if(Kernel32.INSTANCE.ConnectNamedPipe(pipe.pipeHandle, null)) { + if(Kernel32.INSTANCE.ConnectNamedPipe(pipe.pipeHandle, null) || Kernel32.INSTANCE.GetLastError() == WinError.ERROR_PIPE_CONNECTED) { pipe.state = PipeState.OPEN; LogManager.log.info("[SteamVRPipeInputBridge] Pipe " + pipe.name + " is open"); return true; @@ -216,13 +231,6 @@ private boolean tryOpeningPipe(Pipe pipe) { return false; } - private boolean areAllPipesOpen() { - if(pipe == null || pipe.state == PipeState.CREATED) { - return false; - } - return true; - } - private void createPipes() throws IOException { try { pipe = new Pipe(Kernel32.INSTANCE.CreateNamedPipe(PipeName, WinBase.PIPE_ACCESS_DUPLEX, // dwOpenMode @@ -237,40 +245,49 @@ private void createPipes() throws IOException { throw new IOException("Can't open " + PipeName + " pipe: " + Kernel32.INSTANCE.GetLastError()); LogManager.log.info("[SteamVRPipeInputBridge] Pipes are open"); } catch(IOException e) { - safeDisconnect(pipe); + Pipe.safeDisconnect(pipe); throw e; } } - - public static void safeDisconnect(Pipe pipe) { - try { - if(pipe != null && pipe.pipeHandle != null) - Kernel32.INSTANCE.DisconnectNamedPipe(pipe.pipeHandle); - } catch(Exception e) { - } + + @Override + public void addSharedTracker(ShareableTracker tracker) { + // TODO Auto-generated method stub + + } + + @Override + public void removeSharedTracker(ShareableTracker tracker) { + // TODO Auto-generated method stub + } public enum SteamVRInputRoles { - HEAD(TrackerBodyPosition.HMD), - LEFT_HAND(TrackerBodyPosition.LEFT_CONTROLLER), - RIGHT_HAND(TrackerBodyPosition.RIGHT_CONTROLLER), - LEFT_FOOT(TrackerBodyPosition.LEFT_FOOT), - RIGHT_FOOT(TrackerBodyPosition.RIGHT_FOOT), - LEFT_SHOULDER(TrackerBodyPosition.NONE), - RIGHT_SHOULDER(TrackerBodyPosition.NONE), - LEFT_ELBOW(TrackerBodyPosition.NONE), - RIGHT_ELBOW(TrackerBodyPosition.NONE), - LEFT_KNEE(TrackerBodyPosition.LEFT_LEG), - RIGHT_KNEE(TrackerBodyPosition.RIGHT_LEG), - WAIST(TrackerBodyPosition.WAIST), - CHEST(TrackerBodyPosition.CHEST), + HEAD(TrackerPosition.HMD), + LEFT_HAND(TrackerPosition.LEFT_CONTROLLER), + RIGHT_HAND(TrackerPosition.RIGHT_CONTROLLER), + LEFT_FOOT(TrackerPosition.LEFT_FOOT), + RIGHT_FOOT(TrackerPosition.RIGHT_FOOT), + LEFT_SHOULDER(TrackerPosition.NONE), + RIGHT_SHOULDER(TrackerPosition.NONE), + LEFT_ELBOW(TrackerPosition.NONE), + RIGHT_ELBOW(TrackerPosition.NONE), + LEFT_KNEE(TrackerPosition.LEFT_LEG), + RIGHT_KNEE(TrackerPosition.RIGHT_LEG), + WAIST(TrackerPosition.WAIST), + CHEST(TrackerPosition.CHEST), ; private static final SteamVRInputRoles[] values = values(); - public final TrackerBodyPosition bodyPosition; + public final TrackerPosition bodyPosition; - private SteamVRInputRoles(TrackerBodyPosition slimeVrPosition) { + private SteamVRInputRoles(TrackerPosition slimeVrPosition) { this.bodyPosition = slimeVrPosition; } } + + @Override + public void startBridge() { + start(); + } } diff --git a/src/main/java/io/eiren/vr/bridge/VMCBridge.java b/src/main/java/dev/slimevr/bridge/VMCBridge.java similarity index 57% rename from src/main/java/io/eiren/vr/bridge/VMCBridge.java rename to src/main/java/dev/slimevr/bridge/VMCBridge.java index 0e0cf69762..fa083039a6 100644 --- a/src/main/java/io/eiren/vr/bridge/VMCBridge.java +++ b/src/main/java/dev/slimevr/bridge/VMCBridge.java @@ -1,8 +1,11 @@ -package io.eiren.vr.bridge; +package dev.slimevr.bridge; import java.net.InetAddress; -public class VMCBridge extends Thread implements VRBridge { +import io.eiren.vr.trackers.ShareableTracker; +import io.eiren.vr.trackers.Tracker; + +public class VMCBridge extends Thread implements Bridge { public final int readPort; public final int writePort; @@ -28,5 +31,22 @@ public void dataWrite() { // TODO Auto-generated method stub } + + @Override + public void addSharedTracker(ShareableTracker tracker) { + // TODO Auto-generated method stub + + } + + @Override + public void removeSharedTracker(ShareableTracker tracker) { + // TODO Auto-generated method stub + + } + + @Override + public void startBridge() { + start(); + } } diff --git a/src/main/java/io/eiren/vr/bridge/WebSocketVRBridge.java b/src/main/java/dev/slimevr/bridge/WebSocketVRBridge.java similarity index 88% rename from src/main/java/io/eiren/vr/bridge/WebSocketVRBridge.java rename to src/main/java/dev/slimevr/bridge/WebSocketVRBridge.java index c4eb59537e..bd24bdbb91 100644 --- a/src/main/java/io/eiren/vr/bridge/WebSocketVRBridge.java +++ b/src/main/java/dev/slimevr/bridge/WebSocketVRBridge.java @@ -1,4 +1,4 @@ -package io.eiren.vr.bridge; +package dev.slimevr.bridge; import java.net.InetSocketAddress; import java.nio.ByteBuffer; @@ -23,29 +23,30 @@ import io.eiren.vr.VRServer; import io.eiren.vr.trackers.ComputedTracker; import io.eiren.vr.trackers.HMDTracker; +import io.eiren.vr.trackers.ShareableTracker; import io.eiren.vr.trackers.Tracker; import io.eiren.vr.trackers.TrackerStatus; -public class WebSocketVRBridge extends WebSocketServer implements VRBridge { +public class WebSocketVRBridge extends WebSocketServer implements Bridge { private final Vector3f vBuffer = new Vector3f(); private final Quaternion qBuffer = new Quaternion(); private final HMDTracker hmd; - private final List shareTrackers; + private final List shareTrackers; private final List internalTrackers; private final HMDTracker internalHMDTracker = new HMDTracker("itnernal://HMD"); private final AtomicBoolean newHMDData = new AtomicBoolean(false); - public WebSocketVRBridge(HMDTracker hmd, List shareTrackers, VRServer server) { + public WebSocketVRBridge(HMDTracker hmd, List shareTrackers, VRServer server) { super(new InetSocketAddress(21110), Collections.singletonList(new Draft_6455())); this.hmd = hmd; this.shareTrackers = new FastList<>(shareTrackers); this.internalTrackers = new FastList<>(shareTrackers.size()); for(int i = 0; i < shareTrackers.size(); ++i) { Tracker t = shareTrackers.get(i); - ComputedTracker ct = new ComputedTracker("internal://" + t.getName(), true, true); + ComputedTracker ct = new ComputedTracker(t.getTrackerId(), "internal://" + t.getName(), true, true); ct.setStatus(TrackerStatus.OK); ct.bodyPosition = t.getBodyPosition(); this.internalTrackers.add(ct); @@ -81,7 +82,7 @@ public void onOpen(WebSocket conn, ClientHandshake handshake) { JSONObject message = new JSONObject(); message.put("type", "config"); message.put("tracker_id", "SlimeVR Tracker " + (i + 1)); - message.put("location", internalTrackers.get(i).bodyPosition.designation); + message.put("location", shareTrackers.get(i).getTrackerRole().name().toLowerCase()); message.put("tracker_type", message.optString("location")); conn.send(message.toString()); } @@ -173,4 +174,21 @@ public void onStart() { setConnectionLostTimeout(0); setConnectionLostTimeout(1); } + + @Override + public void addSharedTracker(ShareableTracker tracker) { + // TODO Auto-generated method stub + + } + + @Override + public void removeSharedTracker(ShareableTracker tracker) { + // TODO Auto-generated method stub + + } + + @Override + public void startBridge() { + start(); + } } diff --git a/src/main/java/dev/slimevr/poserecorder/PoseFrameIO.java b/src/main/java/dev/slimevr/poserecorder/PoseFrameIO.java index 74af74cc41..9b8e3bad0a 100644 --- a/src/main/java/dev/slimevr/poserecorder/PoseFrameIO.java +++ b/src/main/java/dev/slimevr/poserecorder/PoseFrameIO.java @@ -13,7 +13,7 @@ import io.eiren.util.collections.FastList; import io.eiren.util.logging.LogManager; -import io.eiren.vr.processor.TrackerBodyPosition; +import io.eiren.vr.trackers.TrackerPosition; public final class PoseFrameIO { @@ -91,9 +91,9 @@ public static PoseFrame readFrames(DataInputStream inputStream) { for(int j = 0; j < trackerFrameCount; j++) { int dataFlags = inputStream.readInt(); - TrackerBodyPosition designation = null; + TrackerPosition designation = null; if(TrackerFrameData.DESIGNATION.check(dataFlags)) { - designation = TrackerBodyPosition.getByDesignation(inputStream.readUTF()); + designation = TrackerPosition.getByDesignation(inputStream.readUTF()); } Quaternion rotation = null; diff --git a/src/main/java/dev/slimevr/poserecorder/PoseFrameTracker.java b/src/main/java/dev/slimevr/poserecorder/PoseFrameTracker.java index 7970b833d1..533aeb27fc 100644 --- a/src/main/java/dev/slimevr/poserecorder/PoseFrameTracker.java +++ b/src/main/java/dev/slimevr/poserecorder/PoseFrameTracker.java @@ -6,9 +6,9 @@ import com.jme3.math.Vector3f; import io.eiren.util.collections.FastList; -import io.eiren.vr.processor.TrackerBodyPosition; import io.eiren.vr.trackers.Tracker; import io.eiren.vr.trackers.TrackerConfig; +import io.eiren.vr.trackers.TrackerPosition; import io.eiren.vr.trackers.TrackerStatus; public class PoseFrameTracker implements Tracker, Iterable { @@ -17,6 +17,7 @@ public class PoseFrameTracker implements Tracker, Iterable { private final FastList frames; private int frameCursor = 0; + private final int trackerId = Tracker.getNextLocalTrackerId(); public PoseFrameTracker(String name, FastList frames) { if(frames == null) { @@ -193,13 +194,13 @@ public void tick() { } @Override - public TrackerBodyPosition getBodyPosition() { + public TrackerPosition getBodyPosition() { TrackerFrame frame = safeGetFrame(); return frame == null ? null : frame.designation; } @Override - public void setBodyPosition(TrackerBodyPosition position) { + public void setBodyPosition(TrackerPosition position) { throw new UnsupportedOperationException("PoseFrameTracker does not allow setting the body position"); } @@ -230,4 +231,9 @@ public boolean isComputed() { public Iterator iterator() { return frames.iterator(); } + + @Override + public int getTrackerId() { + return this.trackerId; + } } diff --git a/src/main/java/dev/slimevr/poserecorder/TrackerFrame.java b/src/main/java/dev/slimevr/poserecorder/TrackerFrame.java index a1a132493f..78cb55364f 100644 --- a/src/main/java/dev/slimevr/poserecorder/TrackerFrame.java +++ b/src/main/java/dev/slimevr/poserecorder/TrackerFrame.java @@ -3,20 +3,21 @@ import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; -import io.eiren.vr.processor.TrackerBodyPosition; import io.eiren.vr.trackers.Tracker; import io.eiren.vr.trackers.TrackerConfig; +import io.eiren.vr.trackers.TrackerPosition; import io.eiren.vr.trackers.TrackerStatus; public final class TrackerFrame implements Tracker { private int dataFlags = 0; - public final TrackerBodyPosition designation; + public final TrackerPosition designation; public final Quaternion rotation; public final Vector3f position; + private final int trackerId = Tracker.getNextLocalTrackerId(); - public TrackerFrame(TrackerBodyPosition designation, Quaternion rotation, Vector3f position) { + public TrackerFrame(TrackerPosition designation, Quaternion rotation, Vector3f position) { this.designation = designation; if(designation != null) { dataFlags |= TrackerFrameData.DESIGNATION.flag; @@ -141,12 +142,12 @@ public void tick() { } @Override - public TrackerBodyPosition getBodyPosition() { + public TrackerPosition getBodyPosition() { return designation; } @Override - public void setBodyPosition(TrackerBodyPosition position) { + public void setBodyPosition(TrackerPosition position) { throw new UnsupportedOperationException("TrackerFrame does not allow setting the body position"); } @@ -170,4 +171,9 @@ public boolean isComputed() { return true; } //#endregion + + @Override + public int getTrackerId() { + return this.trackerId; + } } diff --git a/src/main/java/io/eiren/gui/TrackersList.java b/src/main/java/io/eiren/gui/TrackersList.java index a4798d2d13..0b0a7b3e4b 100644 --- a/src/main/java/io/eiren/gui/TrackersList.java +++ b/src/main/java/io/eiren/gui/TrackersList.java @@ -24,7 +24,6 @@ import io.eiren.util.ann.ThreadSafe; import io.eiren.util.collections.FastList; import io.eiren.vr.VRServer; -import io.eiren.vr.processor.TrackerBodyPosition; import io.eiren.vr.trackers.ReferenceAdjustedTracker; import io.eiren.vr.trackers.ComputedTracker; import io.eiren.vr.trackers.HMDTracker; @@ -32,6 +31,7 @@ import io.eiren.vr.trackers.Tracker; import io.eiren.vr.trackers.TrackerConfig; import io.eiren.vr.trackers.TrackerMountingRotation; +import io.eiren.vr.trackers.TrackerPosition; import io.eiren.vr.trackers.TrackerWithBattery; import io.eiren.vr.trackers.TrackerWithTPS; @@ -161,7 +161,7 @@ public TrackerPanel build() { realTracker = ((ReferenceAdjustedTracker) t).getTracker(); removeAll(); JLabel nameLabel; - add(nameLabel = new JLabel(t.getName()), s(c(0, row, 2, GridBagConstraints.FIRST_LINE_START), 4, 1)); + add(nameLabel = new JLabel(t.getDescriptiveName()), s(c(0, row, 2, GridBagConstraints.FIRST_LINE_START), 4, 1)); nameLabel.setFont(nameLabel.getFont().deriveFont(Font.BOLD)); row++; @@ -169,18 +169,18 @@ public TrackerPanel build() { TrackerConfig cfg = server.getTrackerConfig(t); JComboBox desSelect; add(desSelect = new JComboBox<>(), s(c(0, row, 2, GridBagConstraints.FIRST_LINE_START), 2, 1)); - for(TrackerBodyPosition p : TrackerBodyPosition.values) { + for(TrackerPosition p : TrackerPosition.values) { desSelect.addItem(p.name()); } if(cfg.designation != null) { - TrackerBodyPosition p = TrackerBodyPosition.getByDesignation(cfg.designation); + TrackerPosition p = TrackerPosition.getByDesignation(cfg.designation); if(p != null) desSelect.setSelectedItem(p.name()); } desSelect.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { - TrackerBodyPosition p = TrackerBodyPosition.valueOf(String.valueOf(desSelect.getSelectedItem())); + TrackerPosition p = TrackerPosition.valueOf(String.valueOf(desSelect.getSelectedItem())); t.setBodyPosition(p); server.trackerUpdated(t); } diff --git a/src/main/java/io/eiren/gui/VRServerGUI.java b/src/main/java/io/eiren/gui/VRServerGUI.java index 7d13d3d114..f4278b922f 100644 --- a/src/main/java/io/eiren/gui/VRServerGUI.java +++ b/src/main/java/io/eiren/gui/VRServerGUI.java @@ -5,7 +5,10 @@ import javax.swing.border.EmptyBorder; import javax.swing.event.MouseInputAdapter; +import dev.slimevr.bridge.NamedPipeBridge; +import dev.slimevr.bridge.NamedPipeVRBridge; import dev.slimevr.gui.swing.ButtonTimer; +import dev.slimevr.gui.swing.EJBagNoStretch; import dev.slimevr.gui.swing.EJBox; import dev.slimevr.gui.swing.EJBoxNoStretch; import io.eiren.util.MacOSX; @@ -14,7 +17,7 @@ import io.eiren.util.ann.AWTThread; import io.eiren.vr.Main; import io.eiren.vr.VRServer; -import io.eiren.vr.bridge.NamedPipeVRBridge; +import io.eiren.vr.trackers.TrackerRole; import java.awt.Component; import java.awt.Container; @@ -186,67 +189,86 @@ public void mouseClicked(MouseEvent e) { setBorder(new EmptyBorder(i(5))); add(new EJBoxNoStretch(PAGE_AXIS, false, true) {{ setAlignmentY(TOP_ALIGNMENT); - add(new JLabel("Trackers list")); + JLabel l; + add(l = new JLabel("Trackers list")); + l.setFont(l.getFont().deriveFont(Font.BOLD)); + l.setAlignmentX(0.5f); add(trackersList); add(Box.createVerticalGlue()); }}); add(new EJBoxNoStretch(PAGE_AXIS, false, true) {{ setAlignmentY(TOP_ALIGNMENT); - add(new JLabel("Body proportions")); + JLabel l; + add(l = new JLabel("Body proportions")); + l.setFont(l.getFont().deriveFont(Font.BOLD)); + l.setAlignmentX(0.5f); add(new SkeletonConfig(server, VRServerGUI.this)); add(Box.createVerticalStrut(10)); - - if(server.hasBridge(NamedPipeVRBridge.class)) { - add(new JLabel("SteamVR trackers")); - JComboBox trackersSelect; - add(trackersSelect = new JComboBox<>()); - trackersSelect.addItem("Waist"); - trackersSelect.addItem("Waist + Legs"); - trackersSelect.addItem("Waist + Legs + Chest"); - trackersSelect.addItem("Waist + Legs + Knees"); - trackersSelect.addItem("Waist + Legs + Chest + Knees"); - switch(server.config.getInt("virtualtrackers", 3)) { - case 1: - trackersSelect.setSelectedIndex(0); - break; - case 3: - trackersSelect.setSelectedIndex(1); - break; - case 4: - trackersSelect.setSelectedIndex(2); - break; - case 5: - trackersSelect.setSelectedIndex(3); - break; - case 6: - trackersSelect.setSelectedIndex(4); - break; - } - trackersSelect.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - switch(trackersSelect.getSelectedIndex()) { - case 0: - server.config.setProperty("virtualtrackers", 1); - break; - case 1: - server.config.setProperty("virtualtrackers", 3); - break; - case 2: - server.config.setProperty("virtualtrackers", 4); - break; - case 3: - server.config.setProperty("virtualtrackers", 5); - break; - case 4: - server.config.setProperty("virtualtrackers", 6); - break; + if(server.hasBridge(NamedPipeBridge.class)) { + NamedPipeBridge br = server.getVRBridge(NamedPipeBridge.class); + add(l = new JLabel("SteamVR Trackers")); + l.setFont(l.getFont().deriveFont(Font.BOLD)); + l.setAlignmentX(0.5f); + add(l = new JLabel("Changes may require restart of SteamVR")); + l.setFont(l.getFont().deriveFont(Font.ITALIC)); + l.setAlignmentX(0.5f); + + add(new EJBagNoStretch(false, true) {{ + JCheckBox waistCb; + add(waistCb = new JCheckBox("Waist"), c(1, 1)); + waistCb.setSelected(br.getShareSetting(TrackerRole.WAIST)); + waistCb.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + server.queueTask(() -> { + br.changeShareSettings(TrackerRole.WAIST, waistCb.isSelected()); + }); + } + }); + + JCheckBox legsCb; + add(legsCb = new JCheckBox("Legs"), c(2, 1)); + legsCb.setSelected(br.getShareSetting(TrackerRole.LEFT_FOOT) && br.getShareSetting(TrackerRole.RIGHT_FOOT)); + legsCb.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + server.queueTask(() -> { + br.changeShareSettings(TrackerRole.LEFT_FOOT, legsCb.isSelected()); + br.changeShareSettings(TrackerRole.RIGHT_FOOT, legsCb.isSelected()); + }); + } + }); + + JCheckBox chestCb; + add(chestCb = new JCheckBox("Chest"), c(1, 2)); + chestCb.setSelected(br.getShareSetting(TrackerRole.CHEST)); + chestCb.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + server.queueTask(() -> { + br.changeShareSettings(TrackerRole.CHEST, chestCb.isSelected()); + }); + } + }); + + JCheckBox kneesCb; + add(kneesCb = new JCheckBox("Knees"), c(2, 2)); + kneesCb.setSelected(br.getShareSetting(TrackerRole.LEFT_KNEE) && br.getShareSetting(TrackerRole.RIGHT_KNEE)); + kneesCb.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + server.queueTask(() -> { + br.changeShareSettings(TrackerRole.LEFT_KNEE, kneesCb.isSelected()); + br.changeShareSettings(TrackerRole.RIGHT_KNEE, kneesCb.isSelected()); + }); } - server.saveConfig(); - } - }); - add(Box.createVerticalStrut(10)); + }); + + }}); + + + add(Box.createVerticalStrut(10)); } add(new JLabel("Skeleton data")); add(skeletonList); diff --git a/src/main/java/io/eiren/vr/Main.java b/src/main/java/io/eiren/vr/Main.java index 1045edf506..fc307f5167 100644 --- a/src/main/java/io/eiren/vr/Main.java +++ b/src/main/java/io/eiren/vr/Main.java @@ -7,7 +7,7 @@ public class Main { - public static String VERSION = "0.0.19 Test 1"; + public static String VERSION = "0.1.0"; public static VRServer vrServer; diff --git a/src/main/java/io/eiren/vr/VRServer.java b/src/main/java/io/eiren/vr/VRServer.java index 9003599f1b..7890cdb9b3 100644 --- a/src/main/java/io/eiren/vr/VRServer.java +++ b/src/main/java/io/eiren/vr/VRServer.java @@ -15,19 +15,20 @@ import java.util.concurrent.LinkedBlockingQueue; import java.util.function.Consumer; +import dev.slimevr.bridge.Bridge; +import dev.slimevr.bridge.NamedPipeBridge; +import dev.slimevr.bridge.SteamVRPipeInputBridge; +import dev.slimevr.bridge.VMCBridge; +import dev.slimevr.bridge.WebSocketVRBridge; import io.eiren.util.OperatingSystem; import io.eiren.util.ann.ThreadSafe; import io.eiren.util.ann.ThreadSecure; import io.eiren.util.ann.VRServerThread; import io.eiren.util.collections.FastList; -import io.eiren.vr.bridge.NamedPipeVRBridge; -import io.eiren.vr.bridge.SteamVRPipeInputBridge; -import io.eiren.vr.bridge.VMCBridge; -import io.eiren.vr.bridge.VRBridge; -import io.eiren.vr.bridge.WebSocketVRBridge; import io.eiren.vr.processor.HumanPoseProcessor; import io.eiren.vr.processor.HumanSkeleton; import io.eiren.vr.trackers.HMDTracker; +import io.eiren.vr.trackers.ShareableTracker; import io.eiren.vr.trackers.TrackersUDPServer; import io.eiren.yaml.YamlException; import io.eiren.yaml.YamlFile; @@ -40,13 +41,14 @@ public class VRServer extends Thread { private final List trackers = new FastList<>(); public final HumanPoseProcessor humanPoseProcessor; private final TrackersUDPServer trackersServer; - private final List bridges = new FastList<>(); + private final List bridges = new FastList<>(); private final Queue tasks = new LinkedBlockingQueue<>(); private final Map configuration = new HashMap<>(); public final YamlFile config = new YamlFile(); public final HMDTracker hmdTracker; private final List> newTrackersConsumers = new FastList<>(); private final List onTick = new FastList<>(); + private final List shareTrackers; public VRServer() { super("VRServer"); @@ -54,33 +56,39 @@ public VRServer() { hmdTracker = new HMDTracker("HMD"); hmdTracker.position.set(0, 1.8f, 0); // Set starting position for easier debugging // TODO Multiple processors - humanPoseProcessor = new HumanPoseProcessor(this, hmdTracker, config.getInt("virtualtrackers", 3)); - List shareTrackers = humanPoseProcessor.getComputedTrackers(); + humanPoseProcessor = new HumanPoseProcessor(this, hmdTracker); + shareTrackers = humanPoseProcessor.getComputedTrackers(); // Start server for SlimeVR trackers trackersServer = new TrackersUDPServer(6969, "Sensors UDP server", this::registerTracker); // OpenVR bridge currently only supports Windows if(OperatingSystem.getCurrentPlatform() == OperatingSystem.WINDOWS) { + /* // Create named pipe bridge for SteamVR driver NamedPipeVRBridge driverBridge = new NamedPipeVRBridge(hmdTracker, shareTrackers, this); - tasks.add(() -> driverBridge.start()); + tasks.add(() -> driverBridge.startBridge()); bridges.add(driverBridge); + //*/ // Create named pipe bridge for SteamVR input SteamVRPipeInputBridge steamVRInput = new SteamVRPipeInputBridge(this); - tasks.add(() -> steamVRInput.start()); + tasks.add(() -> steamVRInput.startBridge()); bridges.add(steamVRInput); + //*/ + NamedPipeBridge driverBridge = new NamedPipeBridge(hmdTracker, "steamvr", "SteamVR Driver Bridge", "\\\\.\\pipe\\SlimeVRDriver", shareTrackers); + tasks.add(() -> driverBridge.startBridge()); + bridges.add(driverBridge); } // Create WebSocket server WebSocketVRBridge wsBridge = new WebSocketVRBridge(hmdTracker, shareTrackers, this); - tasks.add(() -> wsBridge.start()); + tasks.add(() -> wsBridge.startBridge()); bridges.add(wsBridge); // Create VMCBridge try { VMCBridge vmcBridge = new VMCBridge(39539, 39540, InetAddress.getLocalHost()); - tasks.add(() -> vmcBridge.start()); + tasks.add(() -> vmcBridge.startBridge()); bridges.add(vmcBridge); } catch(UnknownHostException e) { e.printStackTrace(); @@ -92,19 +100,20 @@ public VRServer() { registerTracker(shareTrackers.get(i)); } - public boolean hasBridge(Class bridgeClass) { + public boolean hasBridge(Class bridgeClass) { for(int i = 0; i < bridges.size(); ++i) { - return bridgeClass.isAssignableFrom(bridges.get(i).getClass()); + if(bridgeClass.isAssignableFrom(bridges.get(i).getClass())) + return true; } return false; } @ThreadSafe - public E getVRBridge(Class cls) { + public E getVRBridge(Class bridgeClass) { for(int i = 0; i < bridges.size(); ++i) { - VRBridge b = bridges.get(i); - if(cls.isInstance(b)) - return cls.cast(b); + Bridge b = bridges.get(i); + if(bridgeClass.isAssignableFrom(b.getClass())) + return bridgeClass.cast(b); } return null; } diff --git a/src/main/java/io/eiren/vr/bridge/Pipe.java b/src/main/java/io/eiren/vr/bridge/Pipe.java deleted file mode 100644 index e811bd594c..0000000000 --- a/src/main/java/io/eiren/vr/bridge/Pipe.java +++ /dev/null @@ -1,14 +0,0 @@ -package io.eiren.vr.bridge; - -import com.sun.jna.platform.win32.WinNT.HANDLE; - -class Pipe { - final String name; - final HANDLE pipeHandle; - PipeState state = PipeState.CREATED; - - public Pipe(HANDLE pipeHandle, String name) { - this.pipeHandle = pipeHandle; - this.name = name; - } -} \ No newline at end of file diff --git a/src/main/java/io/eiren/vr/bridge/PipeState.java b/src/main/java/io/eiren/vr/bridge/PipeState.java deleted file mode 100644 index 37766e0ee1..0000000000 --- a/src/main/java/io/eiren/vr/bridge/PipeState.java +++ /dev/null @@ -1,7 +0,0 @@ -package io.eiren.vr.bridge; - -enum PipeState { - CREATED, - OPEN, - ERROR; -} \ No newline at end of file diff --git a/src/main/java/io/eiren/vr/bridge/VRBridge.java b/src/main/java/io/eiren/vr/bridge/VRBridge.java deleted file mode 100644 index 7c48a4eff0..0000000000 --- a/src/main/java/io/eiren/vr/bridge/VRBridge.java +++ /dev/null @@ -1,8 +0,0 @@ -package io.eiren.vr.bridge; - -public interface VRBridge { - - public void dataRead(); - - public void dataWrite(); -} diff --git a/src/main/java/io/eiren/vr/processor/ComputedHumanPoseTracker.java b/src/main/java/io/eiren/vr/processor/ComputedHumanPoseTracker.java index d78ee7ee68..894ece5278 100644 --- a/src/main/java/io/eiren/vr/processor/ComputedHumanPoseTracker.java +++ b/src/main/java/io/eiren/vr/processor/ComputedHumanPoseTracker.java @@ -2,17 +2,20 @@ import io.eiren.util.BufferedTimer; import io.eiren.vr.trackers.ComputedTracker; +import io.eiren.vr.trackers.ShareableTracker; +import io.eiren.vr.trackers.TrackerRole; import io.eiren.vr.trackers.TrackerWithTPS; -public class ComputedHumanPoseTracker extends ComputedTracker implements TrackerWithTPS { +public class ComputedHumanPoseTracker extends ComputedTracker implements TrackerWithTPS, ShareableTracker { public final ComputedHumanPoseTrackerPosition skeletonPosition; + protected final TrackerRole trackerRole; protected BufferedTimer timer = new BufferedTimer(1f); - public ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition skeletonPosition, TrackerBodyPosition bodyPosition) { - super("human://" + skeletonPosition.name(), true, true); + public ComputedHumanPoseTracker(int trackerId, ComputedHumanPoseTrackerPosition skeletonPosition, TrackerRole role) { + super(trackerId, "human://" + skeletonPosition.name(), true, true); this.skeletonPosition = skeletonPosition; - this.bodyPosition = bodyPosition; + this.trackerRole = role; } @Override @@ -24,4 +27,9 @@ public float getTPS() { public void dataTick() { timer.update(); } + + @Override + public TrackerRole getTrackerRole() { + return trackerRole; + } } diff --git a/src/main/java/io/eiren/vr/processor/HumanPoseProcessor.java b/src/main/java/io/eiren/vr/processor/HumanPoseProcessor.java index a1923ec266..8ff6ea9296 100644 --- a/src/main/java/io/eiren/vr/processor/HumanPoseProcessor.java +++ b/src/main/java/io/eiren/vr/processor/HumanPoseProcessor.java @@ -8,7 +8,9 @@ import io.eiren.util.collections.FastList; import io.eiren.vr.VRServer; import io.eiren.vr.trackers.HMDTracker; +import io.eiren.vr.trackers.ShareableTracker; import io.eiren.vr.trackers.Tracker; +import io.eiren.vr.trackers.TrackerRole; import io.eiren.vr.trackers.TrackerStatus; public class HumanPoseProcessor { @@ -18,20 +20,14 @@ public class HumanPoseProcessor { private final List> onSkeletonUpdated = new FastList<>(); private HumanSkeleton skeleton; - public HumanPoseProcessor(VRServer server, HMDTracker hmd, int trackersAmount) { + public HumanPoseProcessor(VRServer server, HMDTracker hmd) { this.server = server; - computedTrackers.add(new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.WAIST, TrackerBodyPosition.WAIST)); - if(trackersAmount > 2) { - computedTrackers.add(new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.LEFT_FOOT, TrackerBodyPosition.LEFT_FOOT)); - computedTrackers.add(new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.RIGHT_FOOT, TrackerBodyPosition.RIGHT_FOOT)); - if(trackersAmount == 4 || trackersAmount >= 6) { - computedTrackers.add(new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.CHEST, TrackerBodyPosition.CHEST)); - } - if(trackersAmount >= 5) { - computedTrackers.add(new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.LEFT_KNEE, TrackerBodyPosition.LEFT_ANKLE)); - computedTrackers.add(new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.RIGHT_KNEE, TrackerBodyPosition.RIGHT_ANKLE)); - } - } + computedTrackers.add(new ComputedHumanPoseTracker(Tracker.getNextLocalTrackerId(), ComputedHumanPoseTrackerPosition.WAIST, TrackerRole.WAIST)); + computedTrackers.add(new ComputedHumanPoseTracker(Tracker.getNextLocalTrackerId(), ComputedHumanPoseTrackerPosition.LEFT_FOOT, TrackerRole.LEFT_FOOT)); + computedTrackers.add(new ComputedHumanPoseTracker(Tracker.getNextLocalTrackerId(), ComputedHumanPoseTrackerPosition.RIGHT_FOOT, TrackerRole.RIGHT_FOOT)); + computedTrackers.add(new ComputedHumanPoseTracker(Tracker.getNextLocalTrackerId(), ComputedHumanPoseTrackerPosition.CHEST, TrackerRole.CHEST)); + computedTrackers.add(new ComputedHumanPoseTracker(Tracker.getNextLocalTrackerId(), ComputedHumanPoseTrackerPosition.LEFT_KNEE, TrackerRole.LEFT_KNEE)); + computedTrackers.add(new ComputedHumanPoseTracker(Tracker.getNextLocalTrackerId(), ComputedHumanPoseTrackerPosition.RIGHT_KNEE, TrackerRole.RIGHT_KNEE)); } public HumanSkeleton getSkeleton() { @@ -68,7 +64,7 @@ public float getSkeletonConfig(String key) { } @ThreadSafe - public List getComputedTrackers() { + public List getComputedTrackers() { return computedTrackers; } diff --git a/src/main/java/io/eiren/vr/processor/HumanSkeletonWithLegs.java b/src/main/java/io/eiren/vr/processor/HumanSkeletonWithLegs.java index 6046c8b231..dc4e720a2c 100644 --- a/src/main/java/io/eiren/vr/processor/HumanSkeletonWithLegs.java +++ b/src/main/java/io/eiren/vr/processor/HumanSkeletonWithLegs.java @@ -9,6 +9,8 @@ import io.eiren.util.ann.VRServerThread; import io.eiren.vr.VRServer; import io.eiren.vr.trackers.Tracker; +import io.eiren.vr.trackers.TrackerPosition; +import io.eiren.vr.trackers.TrackerRole; import io.eiren.vr.trackers.TrackerStatus; import io.eiren.vr.trackers.TrackerUtils; @@ -69,12 +71,12 @@ public class HumanSkeletonWithLegs extends HumanSkeletonWithWaist { public HumanSkeletonWithLegs(VRServer server, List computedTrackers) { super(server, computedTrackers); List allTracekrs = server.getAllTrackers(); - this.leftLegTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerBodyPosition.LEFT_LEG, TrackerBodyPosition.LEFT_ANKLE); - this.leftAnkleTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerBodyPosition.LEFT_ANKLE, TrackerBodyPosition.LEFT_LEG); - this.leftFootTracker = TrackerUtils.findTrackerForBodyPosition(allTracekrs, TrackerBodyPosition.LEFT_FOOT); - this.rightLegTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerBodyPosition.RIGHT_LEG, TrackerBodyPosition.RIGHT_ANKLE); - this.rightAnkleTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerBodyPosition.RIGHT_ANKLE, TrackerBodyPosition.RIGHT_LEG); - this.rightFootTracker = TrackerUtils.findTrackerForBodyPosition(allTracekrs, TrackerBodyPosition.RIGHT_FOOT); + this.leftLegTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerPosition.LEFT_LEG, TrackerPosition.LEFT_ANKLE); + this.leftAnkleTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerPosition.LEFT_ANKLE, TrackerPosition.LEFT_LEG); + this.leftFootTracker = TrackerUtils.findTrackerForBodyPosition(allTracekrs, TrackerPosition.LEFT_FOOT); + this.rightLegTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerPosition.RIGHT_LEG, TrackerPosition.RIGHT_ANKLE); + this.rightAnkleTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerPosition.RIGHT_ANKLE, TrackerPosition.RIGHT_LEG); + this.rightFootTracker = TrackerUtils.findTrackerForBodyPosition(allTracekrs, TrackerPosition.RIGHT_FOOT); ComputedHumanPoseTracker lat = null; ComputedHumanPoseTracker rat = null; ComputedHumanPoseTracker rkt = null; @@ -91,9 +93,9 @@ public HumanSkeletonWithLegs(VRServer server, List com rkt = t; } if(lat == null) - lat = new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.LEFT_FOOT, TrackerBodyPosition.LEFT_FOOT); + lat = new ComputedHumanPoseTracker(Tracker.getNextLocalTrackerId(), ComputedHumanPoseTrackerPosition.LEFT_FOOT, TrackerRole.LEFT_FOOT); if(rat == null) - rat = new ComputedHumanPoseTracker(ComputedHumanPoseTrackerPosition.RIGHT_FOOT, TrackerBodyPosition.RIGHT_FOOT); + rat = new ComputedHumanPoseTracker(Tracker.getNextLocalTrackerId(), ComputedHumanPoseTrackerPosition.RIGHT_FOOT, TrackerRole.RIGHT_FOOT); computedLeftFootTracker = lat; computedRightFootTracker = rat; computedLeftKneeTracker = lkt; diff --git a/src/main/java/io/eiren/vr/processor/HumanSkeletonWithWaist.java b/src/main/java/io/eiren/vr/processor/HumanSkeletonWithWaist.java index 880e3087a2..3a80854479 100644 --- a/src/main/java/io/eiren/vr/processor/HumanSkeletonWithWaist.java +++ b/src/main/java/io/eiren/vr/processor/HumanSkeletonWithWaist.java @@ -11,6 +11,7 @@ import io.eiren.vr.VRServer; import io.eiren.vr.trackers.HMDTracker; import io.eiren.vr.trackers.Tracker; +import io.eiren.vr.trackers.TrackerPosition; import io.eiren.vr.trackers.TrackerStatus; import io.eiren.vr.trackers.TrackerUtils; @@ -60,8 +61,8 @@ public class HumanSkeletonWithWaist extends HumanSkeleton { public HumanSkeletonWithWaist(VRServer server, List computedTrackers) { List allTracekrs = server.getAllTrackers(); - this.waistTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerBodyPosition.WAIST, TrackerBodyPosition.CHEST); - this.chestTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerBodyPosition.CHEST, TrackerBodyPosition.WAIST); + this.waistTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerPosition.WAIST, TrackerPosition.CHEST); + this.chestTracker = TrackerUtils.findTrackerForBodyPositionOrEmpty(allTracekrs, TrackerPosition.CHEST, TrackerPosition.WAIST); this.hmdTracker = server.hmdTracker; this.server = server; ComputedHumanPoseTracker cwt = null; diff --git a/src/main/java/io/eiren/vr/processor/TrackerBodyPosition.java b/src/main/java/io/eiren/vr/processor/TrackerBodyPosition.java deleted file mode 100644 index d814c13716..0000000000 --- a/src/main/java/io/eiren/vr/processor/TrackerBodyPosition.java +++ /dev/null @@ -1,39 +0,0 @@ -package io.eiren.vr.processor; - -import java.util.HashMap; -import java.util.Map; - -public enum TrackerBodyPosition { - - NONE(""), - HMD("HMD"), - CHEST("chest"), - WAIST("waist"), - LEFT_LEG("left_leg"), - RIGHT_LEG("right_leg"), - LEFT_ANKLE("left_ankle"), - RIGHT_ANKLE("right_ankle"), - LEFT_FOOT("left_foot"), - RIGHT_FOOT("right_foot"), - LEFT_CONTROLLER("left_controller"), - RIGHT_CONTROLLER("right_conroller"), - ; - - public final String designation; - - public static final TrackerBodyPosition[] values = values(); - private static final Map byDesignation = new HashMap<>(); - - private TrackerBodyPosition(String designation) { - this.designation = designation; - } - - public static TrackerBodyPosition getByDesignation(String designation) { - return designation == null ? null : byDesignation.get(designation.toLowerCase()); - } - - static { - for(TrackerBodyPosition tbp : values()) - byDesignation.put(tbp.designation.toLowerCase(), tbp); - } -} \ No newline at end of file diff --git a/src/main/java/io/eiren/vr/trackers/ComputedTracker.java b/src/main/java/io/eiren/vr/trackers/ComputedTracker.java index 19da586882..e73c7d0aae 100644 --- a/src/main/java/io/eiren/vr/trackers/ComputedTracker.java +++ b/src/main/java/io/eiren/vr/trackers/ComputedTracker.java @@ -3,22 +3,28 @@ import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; -import io.eiren.vr.processor.TrackerBodyPosition; - -public class ComputedTracker implements Tracker { +public class ComputedTracker implements Tracker, TrackerWithTPS { public final Vector3f position = new Vector3f(); public final Quaternion rotation = new Quaternion(); protected final String name; + protected final String serial; protected TrackerStatus status = TrackerStatus.DISCONNECTED; - public TrackerBodyPosition bodyPosition = null; + public TrackerPosition bodyPosition = null; protected final boolean hasRotation; protected final boolean hasPosition; + protected final int trackerId; - public ComputedTracker(String name, boolean hasRotation, boolean hasPosition) { + public ComputedTracker(int trackerId, String serial, String name, boolean hasRotation, boolean hasPosition) { this.name = name; + this.serial = serial; this.hasRotation = hasRotation; this.hasPosition = hasPosition; + this.trackerId = trackerId; + } + + public ComputedTracker(int trackerId, String name, boolean hasRotation, boolean hasPosition) { + this(trackerId, name, name, hasRotation, hasPosition); } @Override @@ -30,12 +36,17 @@ public void saveConfig(TrackerConfig config) { public void loadConfig(TrackerConfig config) { // Loading a config is an act of user editing, therefore it shouldn't not be allowed if editing is not allowed if (userEditable()) { - bodyPosition = TrackerBodyPosition.getByDesignation(config.designation); + bodyPosition = TrackerPosition.getByDesignation(config.designation); } } @Override public String getName() { + return this.serial; + } + + @Override + public String getDescriptiveName() { return this.name; } @@ -74,12 +85,12 @@ public void resetYaw(Quaternion reference) { } @Override - public TrackerBodyPosition getBodyPosition() { + public TrackerPosition getBodyPosition() { return bodyPosition; } @Override - public void setBodyPosition(TrackerBodyPosition position) { + public void setBodyPosition(TrackerPosition position) { this.bodyPosition = position; } @@ -87,6 +98,10 @@ public void setBodyPosition(TrackerBodyPosition position) { public boolean userEditable() { return false; } + + @Override + public void dataTick() { + } @Override public void tick() { @@ -106,4 +121,14 @@ public boolean hasPosition() { public boolean isComputed() { return true; } + + @Override + public float getTPS() { + return -1; + } + + @Override + public int getTrackerId() { + return this.trackerId; + } } diff --git a/src/main/java/io/eiren/vr/trackers/DeviceType.java b/src/main/java/io/eiren/vr/trackers/DeviceType.java new file mode 100644 index 0000000000..e2ef8dffd9 --- /dev/null +++ b/src/main/java/io/eiren/vr/trackers/DeviceType.java @@ -0,0 +1,9 @@ +package io.eiren.vr.trackers; + +public enum DeviceType { + HMD, + CONTROLLER, + TRACKER, + TRACKING_REFERENCE, + ; +} diff --git a/src/main/java/io/eiren/vr/trackers/HMDTracker.java b/src/main/java/io/eiren/vr/trackers/HMDTracker.java index cb26402e6d..4598ad648b 100644 --- a/src/main/java/io/eiren/vr/trackers/HMDTracker.java +++ b/src/main/java/io/eiren/vr/trackers/HMDTracker.java @@ -1,15 +1,14 @@ package io.eiren.vr.trackers; import io.eiren.util.BufferedTimer; -import io.eiren.vr.processor.TrackerBodyPosition; public class HMDTracker extends ComputedTracker implements TrackerWithTPS { protected BufferedTimer timer = new BufferedTimer(1f); public HMDTracker(String name) { - super(name, true, true); - setBodyPosition(TrackerBodyPosition.HMD); + super(0, name, true, true); + setBodyPosition(TrackerPosition.HMD); } @Override diff --git a/src/main/java/io/eiren/vr/trackers/IMUTracker.java b/src/main/java/io/eiren/vr/trackers/IMUTracker.java index e1e5d3adca..3ef19e6a33 100644 --- a/src/main/java/io/eiren/vr/trackers/IMUTracker.java +++ b/src/main/java/io/eiren/vr/trackers/IMUTracker.java @@ -6,7 +6,6 @@ import io.eiren.math.FloatMath; import io.eiren.util.BufferedTimer; -import io.eiren.vr.processor.TrackerBodyPosition; public class IMUTracker implements Tracker, TrackerWithTPS, TrackerWithBattery { @@ -21,8 +20,10 @@ public class IMUTracker implements Tracker, TrackerWithTPS, TrackerWithBattery { protected final Quaternion correction = new Quaternion(); protected TrackerMountingRotation mounting = null; protected TrackerStatus status = TrackerStatus.OK; + protected final int trackerId; protected final String name; + protected final String descriptiveName; protected final TrackersUDPServer server; protected float confidence = 0; protected float batteryVoltage = 0; @@ -37,11 +38,13 @@ public class IMUTracker implements Tracker, TrackerWithTPS, TrackerWithBattery { public StringBuilder serialBuffer = new StringBuilder(); long lastSerialUpdate = 0; - public TrackerBodyPosition bodyPosition = null; + public TrackerPosition bodyPosition = null; - public IMUTracker(String name, TrackersUDPServer server) { + public IMUTracker(int trackerId, String name, String descriptiveName, TrackersUDPServer server) { this.name = name; this.server = server; + this.trackerId = trackerId; + this.descriptiveName = descriptiveName; } @Override @@ -64,7 +67,7 @@ public void loadConfig(TrackerConfig config) { } else { rotAdjust.loadIdentity(); } - bodyPosition = TrackerBodyPosition.getByDesignation(config.designation); + bodyPosition = TrackerPosition.getByDesignation(config.designation); } } @@ -188,12 +191,12 @@ protected void calculateLiveMagnetometerCorrection() { } @Override - public TrackerBodyPosition getBodyPosition() { + public TrackerPosition getBodyPosition() { return bodyPosition; } @Override - public void setBodyPosition(TrackerBodyPosition position) { + public void setBodyPosition(TrackerPosition position) { this.bodyPosition = position; } @@ -201,6 +204,31 @@ public void setBodyPosition(TrackerBodyPosition position) { public boolean userEditable() { return true; } + + @Override + public boolean hasRotation() { + return true; + } + + @Override + public boolean hasPosition() { + return false; + } + + @Override + public boolean isComputed() { + return false; + } + + @Override + public int getTrackerId() { + return this.trackerId; + } + + @Override + public String getDescriptiveName() { + return this.descriptiveName; + } public enum CalibrationAccuracy { @@ -228,19 +256,4 @@ public static CalibrationAccuracy getByStatus(int status) { byStatus[ca.status] = ca; } } - - @Override - public boolean hasRotation() { - return true; - } - - @Override - public boolean hasPosition() { - return false; - } - - @Override - public boolean isComputed() { - return false; - } } diff --git a/src/main/java/io/eiren/vr/trackers/MPUTracker.java b/src/main/java/io/eiren/vr/trackers/MPUTracker.java index 4c74c88353..8c6345b6a4 100644 --- a/src/main/java/io/eiren/vr/trackers/MPUTracker.java +++ b/src/main/java/io/eiren/vr/trackers/MPUTracker.java @@ -6,8 +6,8 @@ public class MPUTracker extends IMUTracker { public ConfigurationData newCalibrationData; - public MPUTracker(String name, TrackersUDPServer server) { - super(name, server); + public MPUTracker(int trackerId, String name, String descriptiveName, TrackersUDPServer server) { + super(trackerId, name, descriptiveName, server); } public static class ConfigurationData { diff --git a/src/main/java/io/eiren/vr/trackers/ReferenceAdjustedTracker.java b/src/main/java/io/eiren/vr/trackers/ReferenceAdjustedTracker.java index 1f124b6722..84af9b7a10 100644 --- a/src/main/java/io/eiren/vr/trackers/ReferenceAdjustedTracker.java +++ b/src/main/java/io/eiren/vr/trackers/ReferenceAdjustedTracker.java @@ -3,8 +3,6 @@ import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; -import io.eiren.vr.processor.TrackerBodyPosition; - public class ReferenceAdjustedTracker implements Tracker { public final E tracker; @@ -133,12 +131,12 @@ public float getConfidenceLevel() { } @Override - public TrackerBodyPosition getBodyPosition() { + public TrackerPosition getBodyPosition() { return tracker.getBodyPosition(); } @Override - public void setBodyPosition(TrackerBodyPosition position) { + public void setBodyPosition(TrackerPosition position) { tracker.setBodyPosition(position); } @@ -161,4 +159,14 @@ public boolean hasPosition() { public boolean isComputed() { return tracker.isComputed(); } + + @Override + public int getTrackerId() { + return tracker.getTrackerId(); + } + + @Override + public String getDescriptiveName() { + return tracker.getDescriptiveName(); + } } diff --git a/src/main/java/io/eiren/vr/trackers/ShareableTracker.java b/src/main/java/io/eiren/vr/trackers/ShareableTracker.java new file mode 100644 index 0000000000..0780b288ea --- /dev/null +++ b/src/main/java/io/eiren/vr/trackers/ShareableTracker.java @@ -0,0 +1,6 @@ +package io.eiren.vr.trackers; + +public interface ShareableTracker extends Tracker { + + public TrackerRole getTrackerRole(); +} diff --git a/src/main/java/io/eiren/vr/trackers/Tracker.java b/src/main/java/io/eiren/vr/trackers/Tracker.java index 34f576ab2f..263bdad79c 100644 --- a/src/main/java/io/eiren/vr/trackers/Tracker.java +++ b/src/main/java/io/eiren/vr/trackers/Tracker.java @@ -1,12 +1,14 @@ package io.eiren.vr.trackers; +import java.util.concurrent.atomic.AtomicInteger; + import com.jme3.math.Quaternion; import com.jme3.math.Vector3f; -import io.eiren.vr.processor.TrackerBodyPosition; - public interface Tracker { + public static final AtomicInteger nextLocalTrackerId = new AtomicInteger(); + public boolean getPosition(Vector3f store); public boolean getRotation(Quaternion store); @@ -27,9 +29,9 @@ public interface Tracker { public void tick(); - public TrackerBodyPosition getBodyPosition(); + public TrackerPosition getBodyPosition(); - public void setBodyPosition(TrackerBodyPosition position); + public void setBodyPosition(TrackerPosition position); public boolean userEditable(); @@ -39,7 +41,13 @@ public interface Tracker { public boolean isComputed(); + public int getTrackerId(); + public default String getDescriptiveName() { return getName(); } + + public static int getNextLocalTrackerId() { + return nextLocalTrackerId.incrementAndGet(); + } } diff --git a/src/main/java/io/eiren/vr/trackers/TrackerPosition.java b/src/main/java/io/eiren/vr/trackers/TrackerPosition.java new file mode 100644 index 0000000000..b03c60ebf4 --- /dev/null +++ b/src/main/java/io/eiren/vr/trackers/TrackerPosition.java @@ -0,0 +1,54 @@ +package io.eiren.vr.trackers; + +import java.util.EnumMap; +import java.util.HashMap; +import java.util.Map; + +public enum TrackerPosition { + + NONE("", TrackerRole.NONE), + HMD("HMD", TrackerRole.HMD), + CHEST("body:chest", TrackerRole.CHEST), + WAIST("body:waist", TrackerRole.WAIST), + LEFT_LEG("body:left_leg", TrackerRole.LEFT_KNEE), + RIGHT_LEG("body:right_leg", TrackerRole.RIGHT_KNEE), + LEFT_ANKLE("body:left_ankle", null), + RIGHT_ANKLE("body:right_ankle", null), + LEFT_FOOT("body:left_foot", TrackerRole.LEFT_FOOT), + RIGHT_FOOT("body:right_foot", TrackerRole.RIGHT_FOOT), + LEFT_CONTROLLER("body:left_controller", TrackerRole.LEFT_CONTROLLER), + RIGHT_CONTROLLER("body:right_conroller", TrackerRole.RIGHT_CONTROLLER), + ; + + public final String designation; + public final TrackerRole trackerRole; + + public static final TrackerPosition[] values = values(); + private static final Map byDesignation = new HashMap<>(); + private static final EnumMap byRole = new EnumMap<>(TrackerRole.class); + + private TrackerPosition(String designation, TrackerRole trackerRole) { + this.designation = designation; + this.trackerRole = trackerRole; + } + + public static TrackerPosition getByDesignation(String designation) { + return designation == null ? null : byDesignation.get(designation.toLowerCase()); + } + + public static TrackerPosition getByRole(TrackerRole role) { + return byRole.get(role); + } + + static { + for(TrackerPosition tbp : values()) { + byDesignation.put(tbp.designation.toLowerCase(), tbp); + if(tbp.trackerRole != null) { + TrackerPosition old = byRole.get(tbp.trackerRole); + if(old != null) + throw new AssertionError("Only one tracker position can match tracker role. " + tbp.trackerRole + " is occupied by " + old + " when adding " + tbp); + byRole.put(tbp.trackerRole, tbp); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/io/eiren/vr/trackers/TrackerRole.java b/src/main/java/io/eiren/vr/trackers/TrackerRole.java new file mode 100644 index 0000000000..410d1822da --- /dev/null +++ b/src/main/java/io/eiren/vr/trackers/TrackerRole.java @@ -0,0 +1,55 @@ +package io.eiren.vr.trackers; + +public enum TrackerRole { + + NONE(0, "", "", null), + WAIST(1, "vive_tracker_waist", "TrackerRole_Waist", DeviceType.TRACKER), + LEFT_FOOT(2, "vive_tracker_left_foot", "TrackerRole_LeftFoot", DeviceType.TRACKER), + RIGHT_FOOT(3, "vive_tracker_right_foot", "TrackerRole_RightFoot", DeviceType.TRACKER), + CHEST(4, "vive_tracker_chest", "TrackerRole_Chest", DeviceType.TRACKER), + LEFT_KNEE(5, "vive_tracker_left_knee", "TrackerRole_LeftKnee", DeviceType.TRACKER), + RIGHT_KNEE(6, "vive_tracker_right_knee", "TrackerRole_RightKnee", DeviceType.TRACKER), + LEFT_ELBOW(7, "vive_tracker_left_elbow", "TrackerRole_LeftElbow", DeviceType.TRACKER), + RIGHT_ELBOW(8, "vive_tracker_right_elbow", "TrackerRole_RightElbow", DeviceType.TRACKER), + LEFT_SHOULDER(9, "vive_tracker_left_shoulder", "TrackerRole_LeftShoulder", DeviceType.TRACKER), + RIGHT_SHOULDER(10, "vive_tracker_right_shoulder", "TrackerRole_RightShoulder", DeviceType.TRACKER), + LEFT_HAND(11, "vive_tracker_handed", "TrackerRole_Handed", DeviceType.TRACKER), + RIGHT_HAND(12, "vive_tracker_handed", "TrackerRole_Handed", DeviceType.TRACKER), + LEFT_CONTROLLER(13, "vive_tracker_handed", "TrackerRole_Handed", DeviceType.CONTROLLER), + RIGHT_CONTROLLER(14, "vive_tracker_handed", "TrackerRole_Handed", DeviceType.CONTROLLER), + HEAD(15, "", "", DeviceType.TRACKER), + NECK(16, "", "", DeviceType.TRACKER), + CAMERA(17, "vive_tracker_camera", "TrackerRole_Camera", DeviceType.TRACKER), + KEYBOARD(18, "vive_tracker_keyboard", "TrackerRole_Keyboard", DeviceType.TRACKER), + HMD(19, "", "", DeviceType.HMD), + BEACON(20, "", "", DeviceType.TRACKING_REFERENCE), + GENERIC_CONTROLLER(21, "vive_tracker_handed", "TrackerRole_Handed", DeviceType.CONTROLLER), + ; + + public final int id; + public final String roleHint; + public final String viveRole; + public final DeviceType deviceType; + + public static final TrackerRole[] values = values(); + private static final TrackerRole[] byId = new TrackerRole[22]; + + private TrackerRole(int id, String roleHint, String viveRole, DeviceType deviceType) { + this.id = id; + this.roleHint = roleHint; + this.viveRole = viveRole; + this.deviceType = deviceType; + } + + public static TrackerRole getById(int id) { + return id < 0 || id >= byId.length ? null : byId[id]; + } + + static { + for(TrackerRole tr : values) { + if(byId[tr.id] != null) + throw new AssertionError("Tracker role id " + tr.id + " occupied by " + byId[tr.id] + " when adding " + tr); + byId[tr.id] = tr; + } + } +} diff --git a/src/main/java/io/eiren/vr/trackers/TrackerUtils.java b/src/main/java/io/eiren/vr/trackers/TrackerUtils.java index 58cf211435..e02e382e1c 100644 --- a/src/main/java/io/eiren/vr/trackers/TrackerUtils.java +++ b/src/main/java/io/eiren/vr/trackers/TrackerUtils.java @@ -2,14 +2,12 @@ import java.util.List; -import io.eiren.vr.processor.TrackerBodyPosition; - public class TrackerUtils { private TrackerUtils() { } - public static T findTrackerForBodyPosition(T[] allTrackers, TrackerBodyPosition position) { + public static T findTrackerForBodyPosition(T[] allTrackers, TrackerPosition position) { for(int i = 0; i < allTrackers.length; ++i) { T t = allTrackers[i]; if(t != null && t.getBodyPosition() == position) @@ -18,7 +16,7 @@ public static T findTrackerForBodyPosition(T[] allTrackers, return null; } - public static T findTrackerForBodyPosition(List allTrackers, TrackerBodyPosition position) { + public static T findTrackerForBodyPosition(List allTrackers, TrackerPosition position) { for(int i = 0; i < allTrackers.size(); ++i) { T t = allTrackers.get(i); if(t != null && t.getBodyPosition() == position) @@ -27,37 +25,37 @@ public static T findTrackerForBodyPosition(List allTracke return null; } - public static T findTrackerForBodyPosition(List allTrackers, TrackerBodyPosition position, TrackerBodyPosition altPosition) { + public static T findTrackerForBodyPosition(List allTrackers, TrackerPosition position, TrackerPosition altPosition) { T t = findTrackerForBodyPosition(allTrackers, position); if(t != null) return t; return findTrackerForBodyPosition(allTrackers, altPosition); } - public static T findTrackerForBodyPosition(T[] allTrackers, TrackerBodyPosition position, TrackerBodyPosition altPosition) { + public static T findTrackerForBodyPosition(T[] allTrackers, TrackerPosition position, TrackerPosition altPosition) { T t = findTrackerForBodyPosition(allTrackers, position); if(t != null) return t; return findTrackerForBodyPosition(allTrackers, altPosition); } - public static Tracker findTrackerForBodyPositionOrEmpty(List allTrackers, TrackerBodyPosition position, TrackerBodyPosition altPosition) { + public static Tracker findTrackerForBodyPositionOrEmpty(List allTrackers, TrackerPosition position, TrackerPosition altPosition) { Tracker t = findTrackerForBodyPosition(allTrackers, position); if(t != null) return t; t = findTrackerForBodyPosition(allTrackers, altPosition); if(t != null) return t; - return new ComputedTracker("Empty tracker", false, false); + return new ComputedTracker(Tracker.getNextLocalTrackerId(), "Empty tracker", false, false); } - public static Tracker findTrackerForBodyPositionOrEmpty(Tracker[] allTrackers, TrackerBodyPosition position, TrackerBodyPosition altPosition) { + public static Tracker findTrackerForBodyPositionOrEmpty(Tracker[] allTrackers, TrackerPosition position, TrackerPosition altPosition) { Tracker t = findTrackerForBodyPosition(allTrackers, position); if(t != null) return t; t = findTrackerForBodyPosition(allTrackers, altPosition); if(t != null) return t; - return new ComputedTracker("Empty tracker", false, false); + return new ComputedTracker(Tracker.getNextLocalTrackerId(), "Empty tracker", false, false); } } diff --git a/src/main/java/io/eiren/vr/trackers/TrackersUDPServer.java b/src/main/java/io/eiren/vr/trackers/TrackersUDPServer.java index 7c7d0233c5..996ad546bb 100644 --- a/src/main/java/io/eiren/vr/trackers/TrackersUDPServer.java +++ b/src/main/java/io/eiren/vr/trackers/TrackersUDPServer.java @@ -10,6 +10,7 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.HashMap; +import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Random; @@ -104,7 +105,8 @@ private void setUpNewSensor(DatagramPacket handshakePacket, ByteBuffer data) thr isOwo = true; } String trackerName = macString != null ? "udp://" + macString : "udp:/" + handshakePacket.getAddress().toString(); - IMUTracker imu = new IMUTracker(trackerName, this); + String descriptiveName = "udp:/" + handshakePacket.getAddress().toString(); + IMUTracker imu = new IMUTracker(Tracker.getNextLocalTrackerId(), trackerName, descriptiveName, this); ReferenceAdjustedTracker adjustedTracker = new ReferenceAdjustedTracker<>(imu); trackersConsumer.accept(adjustedTracker); sensor = new TrackerConnection(imu, handshakePacket.getSocketAddress()); @@ -117,14 +119,14 @@ private void setUpNewSensor(DatagramPacket handshakePacket, ByteBuffer data) thr } System.out.println("[TrackerServer] Sensor " + i + " added with address " + handshakePacket.getSocketAddress() + ". Board type: " + boardType + ", imu type: " + imuType + ", firmware: " + firmware + " (" + firmwareBuild + "), mac: " + macString + ", name: " + trackerName); } - sensor.tracker.setStatus(TrackerStatus.OK); + sensor.sensors.get(0).setStatus(TrackerStatus.OK); socket.send(new DatagramPacket(HANDSHAKE_BUFFER, HANDSHAKE_BUFFER.length, handshakePacket.getAddress(), handshakePacket.getPort())); } - private void setUpAuxilarySensor(TrackerConnection connection) throws IOException { - System.out.println("[TrackerServer] Setting up auxilary sensor for " + connection.tracker.getName()); - IMUTracker imu = new IMUTracker(connection.tracker.getName() + "/1", this); - connection.secondTracker = imu; + private void setUpAuxilarySensor(TrackerConnection connection, int trackerId) throws IOException { + System.out.println("[TrackerServer] Setting up auxilary sensor for " + connection.sensors.get(0).getName()); + IMUTracker imu = new IMUTracker(Tracker.getNextLocalTrackerId(), connection.sensors.get(0).getName() + "/" + trackerId, connection.sensors.get(0).getDescriptiveName() + "/" + trackerId, this); + connection.sensors.put(trackerId, imu); ReferenceAdjustedTracker adjustedTracker = new ReferenceAdjustedTracker<>(imu); trackersConsumer.accept(adjustedTracker); System.out.println("[TrackerServer] Sensor added with address " + imu.getName()); @@ -167,9 +169,9 @@ public void run() { buf.set(bb.getFloat(), bb.getFloat(), bb.getFloat(), bb.getFloat()); offset.mult(buf, buf); if(packetId == 1) { - tracker = connection.tracker; + tracker = connection.sensors.get(0); } else { - tracker = connection.secondTracker; + tracker = connection.sensors.get(1); } if(tracker == null) break; @@ -183,11 +185,7 @@ public void run() { break; bb.getLong(); int sensorId = bb.get() & 0xFF; - if(sensorId == 0) { - tracker = connection.tracker; - } else if(sensorId == 1) { - tracker = connection.secondTracker; - } + tracker = connection.sensors.get(sensorId); if(tracker == null) break; @@ -216,11 +214,7 @@ public void run() { break; bb.getLong(); sensorId = bb.get() & 0xFF; - if(sensorId == 0) { - tracker = connection.tracker; - } else if(sensorId == 1) { - tracker = connection.secondTracker; - } + tracker = connection.sensors.get(sensorId); if(tracker == null) break; float accuracyInfo = bb.getFloat(); @@ -231,7 +225,7 @@ public void run() { if(connection == null) break; bb.getLong(); - connection.tracker.gyroVector.set(bb.getFloat(), bb.getFloat(), bb.getFloat()); + connection.sensors.get(0).gyroVector.set(bb.getFloat(), bb.getFloat(), bb.getFloat()); break; case 4: if(connection == null) @@ -240,7 +234,7 @@ public void run() { float x = bb.getFloat(); float z = bb.getFloat(); float y = bb.getFloat(); - connection.tracker.accelVector.set(x, y, z); + connection.sensors.get(0).accelVector.set(x, y, z); break; case 5: if(connection == null) @@ -251,23 +245,7 @@ public void run() { x = bb.getFloat(); z = bb.getFloat(); y = bb.getFloat(); - connection.tracker.magVector.set(x, y, z); - break; - case 6: // PACKET_RAW_CALIBRATION_DATA - if(connection == null) - break; - if(connection.isOwoTrack) - break; - bb.getLong(); - //sensor.rawCalibrationData.add(new double[] {bb.getInt(), bb.getInt(), bb.getInt(), bb.getInt(), bb.getInt(), bb.getInt()}); - break; - case 7: // PACKET_GYRO_CALIBRATION_DATA - if(connection == null) - break; - if(connection.isOwoTrack) - break; - bb.getLong(); - //sensor.gyroCalibrationData = new double[] {bb.getFloat(), bb.getFloat(), bb.getFloat()}; + connection.sensors.get(0).magVector.set(x, y, z); break; case 8: // PACKET_CONFIG if(connection == null) @@ -276,7 +254,7 @@ public void run() { break; bb.getLong(); MPUTracker.ConfigurationData data = new MPUTracker.ConfigurationData(bb); - Consumer dataConsumer = calibrationDataRequests.remove(connection.tracker); + Consumer dataConsumer = calibrationDataRequests.remove(connection.sensors.get(0)); if(dataConsumer != null) { dataConsumer.accept(data.toTextMatrix()); } @@ -290,7 +268,7 @@ public void run() { float mx = bb.getFloat(); float my = bb.getFloat(); float mz = bb.getFloat(); - connection.tracker.confidence = (float) Math.sqrt(mx * mx + my * my + mz * mz); + connection.sensors.get(0).confidence = (float) Math.sqrt(mx * mx + my * my + mz * mz); break; case 10: // PACKET_PING_PONG: if(connection == null) @@ -299,7 +277,7 @@ public void run() { break; int pingId = bb.getInt(); if(connection.lastPingPacketId == pingId) { - tracker = connection.tracker; + tracker = connection.sensors.get(0); tracker.ping = (int) (System.currentTimeMillis() - connection.lastPingPacketTime) / 2; } break; @@ -308,7 +286,7 @@ public void run() { break; if(connection.isOwoTrack) break; - tracker = connection.tracker; + tracker = connection.sensors.get(0); bb.getLong(); int length = bb.getInt(); for(int i = 0; i < length; ++i) { @@ -326,7 +304,7 @@ public void run() { case 12: // PACKET_BATTERY_VOLTAGE if(connection == null) break; - tracker = connection.tracker; + tracker = connection.sensors.get(0); bb.getLong(); tracker.setBatteryVoltage(bb.getFloat()); break; @@ -335,14 +313,11 @@ public void run() { break; if(connection.isOwoTrack) break; - tracker = connection.tracker; bb.getLong(); sensorId = bb.get() & 0xFF; - if(sensorId == 0) { - tracker = connection.tracker; - } else if(sensorId == 1) { - tracker = connection.secondTracker; - } + tracker = connection.sensors.get(sensorId); + if(tracker == null) + break; int tap = bb.get() & 0xFF; BnoTap tapObj = new BnoTap(tap); System.out.println("[TrackerServer] Tap packet received from " + tracker.getName() + "/" + sensorId + ": " + tapObj + " (b" + Integer.toBinaryString(tap) + ")"); @@ -353,7 +328,7 @@ public void run() { System.out.println("[TrackerServer] Reset recieved from " + recieve.getSocketAddress() + ": " + reason); if(connection == null) break; - tracker = connection.tracker; + tracker = connection.sensors.get(0); tracker.setStatus(TrackerStatus.ERROR); break; case 15: // PACKET_SENSOR_INFO @@ -362,15 +337,15 @@ public void run() { bb.getLong(); sensorId = bb.get() & 0xFF; int sensorStatus = bb.get() & 0xFF; - if(sensorId == 1 && sensorStatus == 1 && connection.secondTracker == null) { - setUpAuxilarySensor(connection); + if(sensorId > 0 && sensorStatus == 1 && !connection.sensors.containsKey(sensorId)) { + setUpAuxilarySensor(connection, sensorId); } bb.rewind(); bb.putInt(15); bb.put((byte) sensorId); bb.put((byte) sensorStatus); socket.send(new DatagramPacket(rcvBuffer, bb.position(), connection.address)); - System.out.println("[TrackerServer] Sensor info for " + connection.tracker.getName() + "/" + sensorId + ": " + sensorStatus); + System.out.println("[TrackerServer] Sensor info for " + connection.sensors.get(0).getName() + "/" + sensorId + ": " + sensorStatus); break; default: System.out.println("[TrackerServer] Unknown data received: " + packetId + " from " + recieve.getSocketAddress()); @@ -385,18 +360,20 @@ public void run() { synchronized(trackers) { for(int i = 0; i < trackers.size(); ++i) { TrackerConnection conn = trackers.get(i); - IMUTracker tracker = conn.tracker; + IMUTracker tracker = conn.sensors.get(0); socket.send(new DatagramPacket(KEEPUP_BUFFER, KEEPUP_BUFFER.length, conn.address)); if(conn.lastPacket + 1000 < System.currentTimeMillis()) { if(tracker.getStatus() != TrackerStatus.DISCONNECTED) { tracker.setStatus(TrackerStatus.DISCONNECTED); - if(conn.secondTracker != null) - conn.secondTracker.setStatus(TrackerStatus.DISCONNECTED); + Iterator iterator = conn.sensors.values().iterator(); + while(iterator.hasNext()) + iterator.next().setStatus(TrackerStatus.DISCONNECTED); } } else if(tracker.getStatus() != TrackerStatus.ERROR && tracker.getStatus() != TrackerStatus.BUSY) { tracker.setStatus(TrackerStatus.OK); - if(conn.secondTracker != null) - conn.secondTracker.setStatus(TrackerStatus.OK); + Iterator iterator = conn.sensors.values().iterator(); + while(iterator.hasNext()) + iterator.next().setStatus(TrackerStatus.OK); } if(tracker.serialBuffer.length() > 0) { if(tracker.lastSerialUpdate + 500L < System.currentTimeMillis()) { @@ -427,8 +404,7 @@ public void run() { private class TrackerConnection { - IMUTracker tracker; - IMUTracker secondTracker; + Map sensors = new HashMap<>(); SocketAddress address; public long lastPacket = System.currentTimeMillis(); public int lastPingPacketId = -1; @@ -436,7 +412,7 @@ private class TrackerConnection { public boolean isOwoTrack = false; public TrackerConnection(IMUTracker tracker, SocketAddress address) { - this.tracker = tracker; + this.sensors.put(0, tracker); this.address = address; } } diff --git a/src/main/java/io/eiren/vr/trackers/SteamVRTracker.java b/src/main/java/io/eiren/vr/trackers/VRTracker.java similarity index 53% rename from src/main/java/io/eiren/vr/trackers/SteamVRTracker.java rename to src/main/java/io/eiren/vr/trackers/VRTracker.java index 9fa4a1050d..ce54fee64f 100644 --- a/src/main/java/io/eiren/vr/trackers/SteamVRTracker.java +++ b/src/main/java/io/eiren/vr/trackers/VRTracker.java @@ -2,14 +2,16 @@ import io.eiren.util.BufferedTimer; -public class SteamVRTracker extends ComputedTracker implements TrackerWithTPS { +public class VRTracker extends ComputedTracker { - public final int id; protected BufferedTimer timer = new BufferedTimer(1f); - public SteamVRTracker(int id, String name, boolean hasRotation, boolean hasPosition) { - super(name, hasRotation, hasPosition); - this.id = id; + public VRTracker(int id, String serial, String name, boolean hasRotation, boolean hasPosition) { + super(id, serial, name, hasRotation, hasPosition); + } + + public VRTracker(int id, String name, boolean hasRotation, boolean hasPosition) { + super(id, name, name, hasRotation, hasPosition); } @Override diff --git a/src/test/java/io/eiren/unit/ReferenceAdjustmentsTests.java b/src/test/java/io/eiren/unit/ReferenceAdjustmentsTests.java index aa2679fcc2..0f3c6bd80c 100644 --- a/src/test/java/io/eiren/unit/ReferenceAdjustmentsTests.java +++ b/src/test/java/io/eiren/unit/ReferenceAdjustmentsTests.java @@ -8,6 +8,7 @@ import io.eiren.vr.processor.TransformNode; import io.eiren.vr.trackers.ComputedTracker; import io.eiren.vr.trackers.ReferenceAdjustedTracker; +import io.eiren.vr.trackers.Tracker; import static org.junit.jupiter.api.Assertions.*; import static org.junit.jupiter.api.DynamicTest.dynamicTest; @@ -67,7 +68,7 @@ Stream getTestsForRotation() { public void checkReferenceAdjustmentFull(Quaternion trackerQuat, int refPitch, int refYaw, int refRoll) { Quaternion referenceQuat = q(refPitch, refYaw, refRoll); - ComputedTracker tracker = new ComputedTracker("test", true, false); + ComputedTracker tracker = new ComputedTracker(Tracker.getNextLocalTrackerId(), "test", true, false); tracker.rotation.set(trackerQuat); ReferenceAdjustedTracker adj = new ReferenceAdjustedTracker<>(tracker); adj.resetFull(referenceQuat); @@ -86,7 +87,7 @@ public void checkReferenceAdjustmentFull(Quaternion trackerQuat, int refPitch, i public void checkReferenceAdjustmentYaw(Quaternion trackerQuat, int refPitch, int refYaw, int refRoll) { Quaternion referenceQuat = q(refPitch, refYaw, refRoll); - ComputedTracker tracker = new ComputedTracker("test", true, false); + ComputedTracker tracker = new ComputedTracker(Tracker.getNextLocalTrackerId(), "test", true, false); tracker.rotation.set(trackerQuat); ReferenceAdjustedTracker adj = new ReferenceAdjustedTracker<>(tracker); adj.resetYaw(referenceQuat); @@ -98,7 +99,7 @@ public void checkReferenceAdjustmentYaw(Quaternion trackerQuat, int refPitch, in private void testAdjustedTrackerRotation(Quaternion trackerQuat, int refPitch, int refYaw, int refRoll) { Quaternion referenceQuat = q(refPitch, refYaw, refRoll); - ComputedTracker tracker = new ComputedTracker("test", true, false); + ComputedTracker tracker = new ComputedTracker(Tracker.getNextLocalTrackerId(), "test", true, false); tracker.rotation.set(trackerQuat); ReferenceAdjustedTracker adj = new ReferenceAdjustedTracker<>(tracker); adj.resetFull(referenceQuat);