mirror of
https://github.com/MrUnknownDE/VRCX.git
synced 2026-05-06 22:46:06 +02:00
Companion 1.1.0 update
This commit is contained in:
@@ -403,14 +403,6 @@ namespace VRCX
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
public string DeserializeVrcEvent(string base64Data)
|
|
||||||
{
|
|
||||||
byte[] bytes = Convert.FromBase64String(base64Data);
|
|
||||||
var deserialization = new VRCEventDeserialization();
|
|
||||||
var eventData = deserialization.DeserializeData(bytes);
|
|
||||||
return System.Text.Json.JsonSerializer.Serialize<VRCEventDeserialization.EventEntry>(eventData);
|
|
||||||
}
|
|
||||||
|
|
||||||
public string CustomCssPath()
|
public string CustomCssPath()
|
||||||
{
|
{
|
||||||
var output = String.Empty;
|
var output = String.Empty;
|
||||||
|
|||||||
@@ -17,10 +17,7 @@ namespace VRCX
|
|||||||
{
|
{
|
||||||
private NamedPipeServerStream _ipcServer;
|
private NamedPipeServerStream _ipcServer;
|
||||||
private byte[] _recvBuffer = new byte[1024 * 8];
|
private byte[] _recvBuffer = new byte[1024 * 8];
|
||||||
|
|
||||||
private string _currentPacket;
|
private string _currentPacket;
|
||||||
private VRCEventDeserialization.EventEntry _eventEntry;
|
|
||||||
private readonly VRCEventDeserialization eventDeserialization = new VRCEventDeserialization();
|
|
||||||
|
|
||||||
public IPCClient(NamedPipeServerStream ipcServer)
|
public IPCClient(NamedPipeServerStream ipcServer)
|
||||||
{
|
{
|
||||||
@@ -55,34 +52,6 @@ namespace VRCX
|
|||||||
if (string.IsNullOrEmpty(packet))
|
if (string.IsNullOrEmpty(packet))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
var eventData = System.Text.Json.JsonSerializer.Deserialize<VRCEventDeserialization.EventData>(packet);
|
|
||||||
if (eventData.type == "OnEvent" && eventData.OnEventData.Code == 6)
|
|
||||||
{
|
|
||||||
var byteArray = Convert.FromBase64String(eventData.OnEventData.Parameters[245].ToString());
|
|
||||||
_eventEntry = eventDeserialization.DeserializeData(byteArray);
|
|
||||||
if (VRCEventDeserialization.ignoreEvents.Contains(_eventEntry.EventType))
|
|
||||||
continue;
|
|
||||||
|
|
||||||
_eventEntry.type = "VRCEvent";
|
|
||||||
_eventEntry.dt = eventData.dt;
|
|
||||||
_eventEntry.senderId = eventData.OnEventData.Sender;
|
|
||||||
var jsonData = System.Text.Json.JsonSerializer.Serialize(_eventEntry);
|
|
||||||
MainForm.Instance.Browser.ExecuteScriptAsync("$app.ipcEvent", jsonData);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
else if (eventData.type == "OnEvent" && eventData.OnEventData.Code == 7)
|
|
||||||
{
|
|
||||||
_eventEntry = new VRCEventDeserialization.EventEntry
|
|
||||||
{
|
|
||||||
type = "Event7",
|
|
||||||
dt = eventData.dt,
|
|
||||||
senderId = eventData.OnEventData.Sender
|
|
||||||
};
|
|
||||||
var jsonData = System.Text.Json.JsonSerializer.Serialize(_eventEntry);
|
|
||||||
MainForm.Instance.Browser.ExecuteScriptAsync("$app.ipcEvent", jsonData);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
MainForm.Instance.Browser.ExecuteScriptAsync("$app.ipcEvent", packet);
|
MainForm.Instance.Browser.ExecuteScriptAsync("$app.ipcEvent", packet);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,269 +0,0 @@
|
|||||||
using System;
|
|
||||||
using System.Collections;
|
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Numerics;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace VRCX
|
|
||||||
{
|
|
||||||
internal class VRCEventDeserialization
|
|
||||||
{
|
|
||||||
private byte[] byteData;
|
|
||||||
private int byteOffset;
|
|
||||||
|
|
||||||
private static readonly Dictionary<int, Type> DataType = new Dictionary<int, Type> {
|
|
||||||
{2, typeof(byte)},
|
|
||||||
{3, typeof(double)},
|
|
||||||
{4, typeof(float)},
|
|
||||||
{5, typeof(int)},
|
|
||||||
{6, typeof(short)},
|
|
||||||
{7, typeof(long)},
|
|
||||||
{8, typeof(bool)},
|
|
||||||
{9, typeof(string)},
|
|
||||||
{10, typeof(object[])},
|
|
||||||
{11, typeof(IList)},
|
|
||||||
{100, typeof(Vector2)},
|
|
||||||
{101, typeof(Vector3)},
|
|
||||||
{102, typeof(Vector4)},
|
|
||||||
{103, typeof(Quaternion)}
|
|
||||||
};
|
|
||||||
|
|
||||||
public class EventEntry
|
|
||||||
{
|
|
||||||
public string type { get; set; }
|
|
||||||
public string dt { get; set; }
|
|
||||||
public int senderId { get; set; }
|
|
||||||
|
|
||||||
|
|
||||||
public int Type { get; set; }
|
|
||||||
public string EventType { get; set; }
|
|
||||||
public object Data { get; set; }
|
|
||||||
}
|
|
||||||
public class EventData
|
|
||||||
{
|
|
||||||
public string dt { get; set; }
|
|
||||||
public string type { get; set; }
|
|
||||||
public EventDataContainer OnEventData { get; set; }
|
|
||||||
public OperationContainer OnOperationResponseData { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public class EventDataContainer
|
|
||||||
{
|
|
||||||
public byte Code { get; set; }
|
|
||||||
public int Sender { get; set; }
|
|
||||||
public Dictionary<byte, object> Parameters { get; set; }
|
|
||||||
public byte SenderKey { get; set; }
|
|
||||||
public byte CustomDataKey { get; set; }
|
|
||||||
}
|
|
||||||
public class OperationContainer
|
|
||||||
{
|
|
||||||
public byte OperationCode { get; set; }
|
|
||||||
public short ReturnCode { get; set; }
|
|
||||||
public string DebugMessage { get; set; }
|
|
||||||
public Dictionary<byte, object> Parameters { get; set; }
|
|
||||||
}
|
|
||||||
|
|
||||||
public static readonly List<string> ignoreEvents = new List<string>
|
|
||||||
{
|
|
||||||
"ReceiveVoiceStatsSyncRPC",
|
|
||||||
"initUSpeakSenderRPC",
|
|
||||||
"SanityCheck",
|
|
||||||
"UdonSyncRunProgramAsRPC",
|
|
||||||
"InformOfBadConnection",
|
|
||||||
"SetTimerRPC",
|
|
||||||
"IncrementPortalPlayerCountRPC",
|
|
||||||
"PlayEffect",
|
|
||||||
"PlayEmoteRPC",
|
|
||||||
"CancelRPC",
|
|
||||||
"_SendOnSpawn",
|
|
||||||
"RefreshAvatar",
|
|
||||||
"InternalApplyOverrideRPC"
|
|
||||||
};
|
|
||||||
|
|
||||||
private byte DeserializeByte()
|
|
||||||
{
|
|
||||||
return byteData[byteOffset++];
|
|
||||||
}
|
|
||||||
|
|
||||||
private int DeserializeInt()
|
|
||||||
{
|
|
||||||
int output = BitConverter.ToInt32(byteData, byteOffset);
|
|
||||||
byteOffset += 4;
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
private short DeserializeShort()
|
|
||||||
{
|
|
||||||
short output = BitConverter.ToInt16(byteData, byteOffset);
|
|
||||||
byteOffset += 2;
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
private string DeserializeString()
|
|
||||||
{
|
|
||||||
short stringLength = DeserializeShort();
|
|
||||||
string output = Encoding.UTF8.GetString(byteData, byteOffset, stringLength);
|
|
||||||
byteOffset += stringLength;
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
private bool DeserializeBool()
|
|
||||||
{
|
|
||||||
bool output = BitConverter.ToBoolean(byteData, byteOffset);
|
|
||||||
byteOffset++;
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
private float DeserializeFloat()
|
|
||||||
{
|
|
||||||
float output = BitConverter.ToSingle(byteData, byteOffset);
|
|
||||||
byteOffset += 4;
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
private double DeserializeDouble()
|
|
||||||
{
|
|
||||||
double output = BitConverter.ToDouble(byteData, byteOffset);
|
|
||||||
byteOffset += 8;
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
private object DeserializeTypeArray()
|
|
||||||
{
|
|
||||||
short length = DeserializeShort();
|
|
||||||
byte typeCode = DeserializeByte();
|
|
||||||
var output = Array.CreateInstance(DataType[typeCode], length);
|
|
||||||
for (var i = 0; i < length; i++)
|
|
||||||
{
|
|
||||||
output.SetValue(DeserializeBytes(typeCode), i);
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
private object[] DeserializeObjectArray()
|
|
||||||
{
|
|
||||||
short length = DeserializeShort();
|
|
||||||
object[] output = new object[length];
|
|
||||||
for (var i = 0; i < output.Length; i++)
|
|
||||||
{
|
|
||||||
output[i] = DeserializeBytes();
|
|
||||||
}
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
private long DeserializeInt64()
|
|
||||||
{
|
|
||||||
long output = BitConverter.ToInt64(byteData, byteOffset);
|
|
||||||
byteOffset += 8;
|
|
||||||
return output;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Vector2 DeserializeVector2()
|
|
||||||
{
|
|
||||||
return new Vector2(DeserializeFloat(), DeserializeFloat());
|
|
||||||
}
|
|
||||||
|
|
||||||
private Vector3 DeserializeVector3()
|
|
||||||
{
|
|
||||||
return new Vector3(DeserializeFloat(), DeserializeFloat(), DeserializeFloat());
|
|
||||||
}
|
|
||||||
|
|
||||||
private Vector4 DeserializeVector4()
|
|
||||||
{
|
|
||||||
return new Vector4(DeserializeFloat(), DeserializeFloat(), DeserializeFloat(), DeserializeFloat());
|
|
||||||
}
|
|
||||||
|
|
||||||
private Quaternion DeserializeQuaternion()
|
|
||||||
{
|
|
||||||
return new Quaternion(DeserializeFloat(), DeserializeFloat(), DeserializeFloat(), DeserializeFloat());
|
|
||||||
}
|
|
||||||
|
|
||||||
private object DeserializeBytes(byte type = 0)
|
|
||||||
{
|
|
||||||
if (type == 0)
|
|
||||||
{
|
|
||||||
type = DeserializeByte();
|
|
||||||
}
|
|
||||||
switch (type)
|
|
||||||
{
|
|
||||||
case 1:
|
|
||||||
return null;
|
|
||||||
|
|
||||||
case 2:
|
|
||||||
return DeserializeByte();
|
|
||||||
|
|
||||||
case 3:
|
|
||||||
return DeserializeDouble();
|
|
||||||
|
|
||||||
case 4:
|
|
||||||
return DeserializeFloat();
|
|
||||||
|
|
||||||
case 5:
|
|
||||||
return DeserializeInt();
|
|
||||||
|
|
||||||
case 6:
|
|
||||||
return DeserializeShort();
|
|
||||||
|
|
||||||
case 7:
|
|
||||||
return DeserializeInt64();
|
|
||||||
|
|
||||||
case 8:
|
|
||||||
return DeserializeBool();
|
|
||||||
|
|
||||||
case 9:
|
|
||||||
return DeserializeString();
|
|
||||||
|
|
||||||
case 10:
|
|
||||||
return DeserializeObjectArray();
|
|
||||||
|
|
||||||
case 11:
|
|
||||||
return DeserializeTypeArray();
|
|
||||||
|
|
||||||
case 100:
|
|
||||||
return DeserializeVector2();
|
|
||||||
|
|
||||||
case 101:
|
|
||||||
return DeserializeVector3();
|
|
||||||
|
|
||||||
case 102:
|
|
||||||
return DeserializeVector4();
|
|
||||||
|
|
||||||
case 103:
|
|
||||||
return DeserializeQuaternion();
|
|
||||||
|
|
||||||
default:
|
|
||||||
throw new Exception("Ignoring data type: " + type);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public EventEntry DeserializeData(byte[] bytes)
|
|
||||||
{
|
|
||||||
EventEntry eventEntry = new EventEntry();
|
|
||||||
byteOffset = 0;
|
|
||||||
byteData = bytes;
|
|
||||||
byte type = DeserializeByte();
|
|
||||||
if (type == 106)
|
|
||||||
{
|
|
||||||
byteOffset += 8;
|
|
||||||
int length = DeserializeShort();
|
|
||||||
byteOffset += length;
|
|
||||||
eventEntry.Type = DeserializeByte();
|
|
||||||
byteOffset += 10;
|
|
||||||
eventEntry.EventType = DeserializeString();
|
|
||||||
byteOffset += 5;
|
|
||||||
eventEntry.Data = null;
|
|
||||||
if (byteData.Length > byteOffset + 3)
|
|
||||||
{
|
|
||||||
byteData = (byte[])DeserializeTypeArray();
|
|
||||||
byteOffset = 0;
|
|
||||||
eventEntry.Data = DeserializeBytes();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
throw new Exception("Unexpected type: " + type);
|
|
||||||
}
|
|
||||||
return eventEntry;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -87,7 +87,6 @@
|
|||||||
<Compile Include="AssetBundleCacher.cs" />
|
<Compile Include="AssetBundleCacher.cs" />
|
||||||
<Compile Include="CefCustomMenuHandler.cs" />
|
<Compile Include="CefCustomMenuHandler.cs" />
|
||||||
<Compile Include="ImageCache.cs" />
|
<Compile Include="ImageCache.cs" />
|
||||||
<Compile Include="VRCEventDeserialization.cs" />
|
|
||||||
<Compile Include="IPCClient.cs" />
|
<Compile Include="IPCClient.cs" />
|
||||||
<Compile Include="IPCServer.cs" />
|
<Compile Include="IPCServer.cs" />
|
||||||
<Compile Include="StartupArgs.cs" />
|
<Compile Include="StartupArgs.cs" />
|
||||||
|
|||||||
+46
-26
@@ -8727,9 +8727,7 @@ speechSynthesis.getVoices();
|
|||||||
};
|
};
|
||||||
|
|
||||||
$app.methods.parsePhotonEvent = function (data, gameLogDate) {
|
$app.methods.parsePhotonEvent = function (data, gameLogDate) {
|
||||||
if (data.Code === 226) {
|
if (data.Code === 253) {
|
||||||
// nothing
|
|
||||||
} else if (data.Code === 253) {
|
|
||||||
// SetUserProperties
|
// SetUserProperties
|
||||||
this.parsePhotonUser(
|
this.parsePhotonUser(
|
||||||
data.Parameters[253],
|
data.Parameters[253],
|
||||||
@@ -8922,21 +8920,22 @@ speechSynthesis.getVoices();
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
$app.methods.parseVRCEvent = function (eventData) {
|
$app.methods.parseVRCEvent = function (json) {
|
||||||
// VRC Event
|
// VRC Event
|
||||||
var senderId = eventData.senderId;
|
var datetime = json.dt;
|
||||||
var datetime = eventData.dt;
|
var eventData = json.VRCEventData;
|
||||||
|
var senderId = eventData.Sender;
|
||||||
if (this.debugPhotonLogging) {
|
if (this.debugPhotonLogging) {
|
||||||
console.log('VrcEvent:', eventData);
|
console.log('VrcEvent:', json);
|
||||||
}
|
}
|
||||||
if (
|
if (
|
||||||
eventData.EventType === '_InstantiateObject' &&
|
eventData.EventName === '_InstantiateObject' &&
|
||||||
eventData.Data[0] === 'Portals/PortalInternalDynamic'
|
eventData.Data[0] === 'Portals/PortalInternalDynamic'
|
||||||
) {
|
) {
|
||||||
this.lastPortalId = eventData.Data[3];
|
this.lastPortalId = eventData.Data[3];
|
||||||
return;
|
return;
|
||||||
} else if (
|
} else if (
|
||||||
eventData.EventType === '_DestroyObject' &&
|
eventData.EventName === '_DestroyObject' &&
|
||||||
this.lastPortalList.has(eventData.Data[0])
|
this.lastPortalList.has(eventData.Data[0])
|
||||||
) {
|
) {
|
||||||
var portalId = eventData.Data[0];
|
var portalId = eventData.Data[0];
|
||||||
@@ -8949,7 +8948,7 @@ speechSynthesis.getVoices();
|
|||||||
created_at: datetime
|
created_at: datetime
|
||||||
});
|
});
|
||||||
return;
|
return;
|
||||||
} else if (eventData.EventType === 'ConfigurePortal') {
|
} else if (eventData.EventName === 'ConfigurePortal') {
|
||||||
var instanceId = `${eventData.Data[0]}:${eventData.Data[1]}`;
|
var instanceId = `${eventData.Data[0]}:${eventData.Data[1]}`;
|
||||||
if (this.lastPortalId) {
|
if (this.lastPortalId) {
|
||||||
this.lastPortalList.set(
|
this.lastPortalList.set(
|
||||||
@@ -8967,24 +8966,24 @@ speechSynthesis.getVoices();
|
|||||||
this.parsePhotonPortalSpawn(datetime, instanceId, ref1);
|
this.parsePhotonPortalSpawn(datetime, instanceId, ref1);
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
} else if (eventData.Type > 34) {
|
} else if (eventData.EventType > 34) {
|
||||||
var entry = {
|
var entry = {
|
||||||
created_at: datetime,
|
created_at: datetime,
|
||||||
type: 'Event',
|
type: 'Event',
|
||||||
data: `${displayName} called non existent RPC ${eventData.Type}`
|
data: `${displayName} called non existent RPC ${eventData.EventType}`
|
||||||
};
|
};
|
||||||
this.addPhotonEventToGameLog(entry);
|
this.addPhotonEventToGameLog(entry);
|
||||||
}
|
}
|
||||||
if (eventData.Type === 14) {
|
if (eventData.EventType === 14) {
|
||||||
if (eventData.EventType === 'ChangeVisibility') {
|
if (eventData.EventName === 'ChangeVisibility') {
|
||||||
if (eventData.Data[0] === true) {
|
if (eventData.Data[0] === true) {
|
||||||
var text = 'EnableCamera';
|
var text = 'EnableCamera';
|
||||||
} else if (eventData.Data[0] === false) {
|
} else if (eventData.Data[0] === false) {
|
||||||
var text = 'DisableCamera';
|
var text = 'DisableCamera';
|
||||||
}
|
}
|
||||||
} else if (eventData.EventType === 'ReloadAvatarNetworkedRPC') {
|
} else if (eventData.EventName === 'ReloadAvatarNetworkedRPC') {
|
||||||
var text = 'AvatarReset';
|
var text = 'AvatarReset';
|
||||||
} else if (eventData.EventType === 'SpawnEmojiRPC') {
|
} else if (eventData.EventName === 'SpawnEmojiRPC') {
|
||||||
var text = `SpawnEmoji ${this.photonEmojis[eventData.Data]}`;
|
var text = `SpawnEmoji ${this.photonEmojis[eventData.Data]}`;
|
||||||
} else {
|
} else {
|
||||||
var eventVrc = '';
|
var eventVrc = '';
|
||||||
@@ -8994,7 +8993,7 @@ speechSynthesis.getVoices();
|
|||||||
'$1:'
|
'$1:'
|
||||||
)}`;
|
)}`;
|
||||||
}
|
}
|
||||||
var text = `${eventData.EventType}${eventVrc}`;
|
var text = `${eventData.EventName}${eventVrc}`;
|
||||||
}
|
}
|
||||||
this.addEntryPhotonEvent({
|
this.addEntryPhotonEvent({
|
||||||
photonId: senderId,
|
photonId: senderId,
|
||||||
@@ -9003,9 +9002,9 @@ speechSynthesis.getVoices();
|
|||||||
created_at: datetime
|
created_at: datetime
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
var eventType = '';
|
var eventName = '';
|
||||||
if (eventData.EventType) {
|
if (eventData.EventName) {
|
||||||
eventType = ` ${JSON.stringify(eventData.EventType).replace(
|
eventName = ` ${JSON.stringify(eventData.EventName).replace(
|
||||||
/"([^(")"]+)":/g,
|
/"([^(")"]+)":/g,
|
||||||
'$1:'
|
'$1:'
|
||||||
)}`;
|
)}`;
|
||||||
@@ -9013,8 +9012,8 @@ speechSynthesis.getVoices();
|
|||||||
if (this.debugPhotonLogging) {
|
if (this.debugPhotonLogging) {
|
||||||
var displayName = this.getDisplayNameFromPhotonId(senderId);
|
var displayName = this.getDisplayNameFromPhotonId(senderId);
|
||||||
var feed = `RPC ${displayName} ${
|
var feed = `RPC ${displayName} ${
|
||||||
this.photonEventType[eventData.Type]
|
this.photonEventType[eventData.EventType]
|
||||||
}${eventType}`;
|
}${eventName}`;
|
||||||
console.log('VrcRpc:', feed);
|
console.log('VrcRpc:', feed);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -18842,6 +18841,9 @@ speechSynthesis.getVoices();
|
|||||||
|
|
||||||
$app.data.ipcEnabled = false;
|
$app.data.ipcEnabled = false;
|
||||||
$app.methods.ipcEvent = function (json) {
|
$app.methods.ipcEvent = function (json) {
|
||||||
|
if (!this.friendLogInitStatus) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
try {
|
try {
|
||||||
var data = JSON.parse(json);
|
var data = JSON.parse(json);
|
||||||
} catch {
|
} catch {
|
||||||
@@ -18856,8 +18858,8 @@ speechSynthesis.getVoices();
|
|||||||
data.OnEventData
|
data.OnEventData
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
this.photonEventPulse();
|
|
||||||
this.parsePhotonEvent(data.OnEventData, data.dt);
|
this.parsePhotonEvent(data.OnEventData, data.dt);
|
||||||
|
this.photonEventPulse();
|
||||||
break;
|
break;
|
||||||
case 'OnOperationResponse':
|
case 'OnOperationResponse':
|
||||||
if (this.debugPhotonLogging) {
|
if (this.debugPhotonLogging) {
|
||||||
@@ -18874,17 +18876,23 @@ speechSynthesis.getVoices();
|
|||||||
this.photonEventPulse();
|
this.photonEventPulse();
|
||||||
break;
|
break;
|
||||||
case 'VRCEvent':
|
case 'VRCEvent':
|
||||||
this.photonEventPulse();
|
|
||||||
this.parseVRCEvent(data);
|
this.parseVRCEvent(data);
|
||||||
|
this.photonEventPulse();
|
||||||
break;
|
break;
|
||||||
case 'Event7':
|
case 'Event7List':
|
||||||
this.photonEvent7List.set(data.senderId, data.dt);
|
for (var [id, dt] of Object.entries(data.Event7List)) {
|
||||||
|
this.photonEvent7List.set(parseInt(id, 10), dt);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case 'Ping':
|
case 'Ping':
|
||||||
if (!this.photonLoggingEnabled) {
|
if (!this.photonLoggingEnabled) {
|
||||||
this.photonLoggingEnabled = true;
|
this.photonLoggingEnabled = true;
|
||||||
configRepository.setBool('VRCX_photonLoggingEnabled', true);
|
configRepository.setBool('VRCX_photonLoggingEnabled', true);
|
||||||
}
|
}
|
||||||
|
if (!this.companionUpdateReminder && data.version < '1.1.0') {
|
||||||
|
// check version
|
||||||
|
this.promptCompanionUpdateReminder();
|
||||||
|
}
|
||||||
this.ipcEnabled = true;
|
this.ipcEnabled = true;
|
||||||
this.ipcTimeout = 60; // 30secs
|
this.ipcTimeout = 60; // 30secs
|
||||||
break;
|
break;
|
||||||
@@ -18892,9 +18900,21 @@ speechSynthesis.getVoices();
|
|||||||
AppApi.FocusWindow();
|
AppApi.FocusWindow();
|
||||||
this.eventLaunchCommand(data.command);
|
this.eventLaunchCommand(data.command);
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
console.log('IPC:', data);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
$app.data.companionUpdateReminder = false;
|
||||||
|
|
||||||
|
$app.methods.promptCompanionUpdateReminder = function () {
|
||||||
|
this.$alert(
|
||||||
|
'An update is required for it to function properly.',
|
||||||
|
'VRCX Companion mod is out of date'
|
||||||
|
);
|
||||||
|
this.companionUpdateReminder = true;
|
||||||
|
};
|
||||||
|
|
||||||
$app.data.photonEventCount = 0;
|
$app.data.photonEventCount = 0;
|
||||||
$app.data.photonEventIcon = false;
|
$app.data.photonEventIcon = false;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user