Exemplo n.º 1
0
        protected override async Task <Result> InitializeInternal()
        {
            try
            {
                if (!this.websocket.IsOpen())
                {
                    if (!await this.ConnectWebSocket())
                    {
                        return(new Result(MixItUp.Base.Resources.VTubeStudioConnectionFailed));
                    }
                }

                JObject data = new JObject();
                data["pluginName"]          = websocketPluginName;
                data["pluginDeveloper"]     = websocketPluginDeveloper;
                data["authenticationToken"] = this.token?.accessToken;

                VTubeStudioWebSocketResponsePacket response = await this.websocket.SendAndReceive(new VTubeStudioWebSocketRequestPacket("AuthenticationRequest", data));

                if (response != null && response.data != null && response.data.TryGetValue("authenticated", out JToken authenticated) && authenticated.Value <bool>() == true)
                {
                    this.WebSocketConnected              = true;
                    this.websocket.OnDisconnectOccurred += Websocket_OnDisconnectOccurred;
                    return(new Result());
                }
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
            }
            return(new Result(MixItUp.Base.Resources.VTubeStudioConnectionFailed));
        }
Exemplo n.º 2
0
        public async Task <IEnumerable <VTubeStudioHotKey> > GetHotKeys(string modelID = null)
        {
            List <VTubeStudioHotKey> results = new List <VTubeStudioHotKey>();

            VTubeStudioWebSocketRequestPacket packet = new VTubeStudioWebSocketRequestPacket("HotkeysInCurrentModelRequest");

            if (!string.IsNullOrEmpty(modelID))
            {
                packet.data            = new JObject();
                packet.data["modelID"] = modelID;
            }

            VTubeStudioWebSocketResponsePacket response = await this.websocket.SendAndReceive(packet);

            if (response != null && response.data != null && response.data.TryGetValue("availableHotkeys", out JToken hotKeys) && hotKeys is JArray)
            {
                foreach (VTubeStudioHotKey hotKey in ((JArray)hotKeys).ToTypedArray <VTubeStudioHotKey>())
                {
                    if (hotKey != null)
                    {
                        results.Add(hotKey);
                    }
                }
            }

            return(results);
        }
Exemplo n.º 3
0
        public async Task <bool> MoveModel(double timeInSeconds, bool relative, double?x, double?y, double?rotation, double?size)
        {
            JObject data = new JObject();

            data["timeInSeconds"]            = timeInSeconds;
            data["valuesAreRelativeToModel"] = relative;
            if (x.HasValue)
            {
                data["positionX"] = x;
            }
            if (y.HasValue)
            {
                data["positionY"] = y;
            }
            if (rotation.HasValue)
            {
                data["rotation"] = rotation;
            }
            if (size.HasValue)
            {
                data["size"] = size;
            }

            VTubeStudioWebSocketResponsePacket response = await this.websocket.SendAndReceive(new VTubeStudioWebSocketRequestPacket("MoveModelRequest", data));

            if (response != null && response.data != null)
            {
                return(true);
            }
            return(false);
        }
Exemplo n.º 4
0
        public async Task <bool> RunHotKey(string hotKeyID)
        {
            JObject data = new JObject();

            data["hotkeyID"] = hotKeyID;

            VTubeStudioWebSocketResponsePacket response = await this.websocket.SendAndReceive(new VTubeStudioWebSocketRequestPacket("HotkeyTriggerRequest", data));

            if (response != null && response.data != null && response.data.ContainsKey("hotkeyID"))
            {
                return(true);
            }
            return(false);
        }
Exemplo n.º 5
0
        public async Task <bool> LoadModel(string modelID)
        {
            JObject data = new JObject();

            data["modelID"] = modelID;

            VTubeStudioWebSocketResponsePacket response = await this.websocket.SendAndReceive(new VTubeStudioWebSocketRequestPacket("ModelLoadRequest", data));

            if (response != null && response.data != null && response.data.ContainsKey("modelID"))
            {
                return(true);
            }
            return(false);
        }
Exemplo n.º 6
0
        public async Task <VTubeStudioModel> GetCurrentModel()
        {
            VTubeStudioWebSocketResponsePacket response = await this.websocket.SendAndReceive(new VTubeStudioWebSocketRequestPacket("CurrentModelRequest"));

            if (response != null && response.data != null)
            {
                VTubeStudioModel result = response.data.ToObject <VTubeStudioModel>();
                if (result != null && result.modelLoaded)
                {
                    return(result);
                }
            }
            return(null);
        }
Exemplo n.º 7
0
        protected override Task ProcessReceivedPacket(string packet)
        {
            try
            {
                Logger.Log(LogLevel.Debug, "VTube Studio Packet Received - " + packet);

                VTubeStudioWebSocketResponsePacket response = JSONSerializerHelper.DeserializeFromString <VTubeStudioWebSocketResponsePacket>(packet);
                if (response != null && !string.IsNullOrEmpty(response.requestID))
                {
                    this.responses[response.requestID] = response;
                }
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
            }
            return(Task.FromResult(0));
        }
Exemplo n.º 8
0
        public async Task <IEnumerable <VTubeStudioModel> > GetAllModels()
        {
            List <VTubeStudioModel> results = new List <VTubeStudioModel>();

            VTubeStudioWebSocketResponsePacket response = await this.websocket.SendAndReceive(new VTubeStudioWebSocketRequestPacket("AvailableModelsRequest"));

            if (response != null && response.data != null && response.data.TryGetValue("availableModels", out JToken models) && models is JArray)
            {
                foreach (VTubeStudioModel model in ((JArray)models).ToTypedArray <VTubeStudioModel>())
                {
                    if (model != null)
                    {
                        results.Add(model);
                    }
                }
            }

            return(results);
        }
Exemplo n.º 9
0
        public override async Task <Result> Connect(OAuthTokenModel token)
        {
            try
            {
                this.token = token;
                if (await this.ConnectWebSocket())
                {
                    VTubeStudioWebSocketResponsePacket response = await this.websocket.SendAndReceive(new VTubeStudioWebSocketRequestPacket("APIStateRequest"));

                    if (response != null && response.data != null && response.data.ContainsKey("active"))
                    {
                        return(await this.InitializeInternal());
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
            }
            return(new Result(MixItUp.Base.Resources.VTubeStudioConnectionFailed));
        }
Exemplo n.º 10
0
        public override async Task <Result> Connect()
        {
            try
            {
                this.token = null;
                if (await this.ConnectWebSocket())
                {
                    VTubeStudioWebSocketResponsePacket response = await this.websocket.SendAndReceive(new VTubeStudioWebSocketRequestPacket("APIStateRequest"));

                    if (response != null && response.data != null && response.data.ContainsKey("active"))
                    {
                        JObject data = new JObject();
                        data["pluginName"]      = websocketPluginName;
                        data["pluginDeveloper"] = websocketPluginDeveloper;
                        data["pluginIcon"]      = websocketPluginIcon;

                        response = await this.websocket.SendAndReceive(new VTubeStudioWebSocketRequestPacket("AuthenticationTokenRequest", data), 60);

                        if (response != null && response.data != null && response.data.ContainsKey("authenticationToken"))
                        {
                            this.token = new OAuthTokenModel()
                            {
                                accessToken = response.data["authenticationToken"].ToString()
                            };

                            return(await this.InitializeInternal());
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.Log(ex);
            }
            return(new Result(MixItUp.Base.Resources.VTubeStudioConnectionFailed));
        }