Skip to content

Commit 6f3cb82

Browse files
committed
Move parsing type to separate function, prepare for mapping messages to expressions
1 parent 7ffe799 commit 6f3cb82

4 files changed

Lines changed: 49 additions & 22 deletions

File tree

ETVRTrackingModule.cs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ namespace ETVRTrackingModule
77
public class ETVRTrackingModule : ExtTrackingModule
88
{
99
private OSCManager? _OSCManager;
10+
private ExpressionsMapper? _expressionMapper;
1011

1112
public override (bool SupportsEye, bool SupportsExpression) Supported => (true, false);
1213
public override (bool eyeSuccess, bool expressionSuccess) Initialize(bool eyeAvailable, bool expressionAvailable)
1314
{
15+
_expressionMapper = new ExpressionsMapper();
16+
_OSCManager = new OSCManager(Logger, _expressionMapper);
1417

15-
_OSCManager = new OSCManager(Logger);
1618
if (_OSCManager.State != OSCState.CONNECTED) {
1719
Logger.LogError("ETVR Module could not connect to the specified port.");
1820
return (false, false);
@@ -32,6 +34,7 @@ public override void Teardown()
3234

3335
public override void Update()
3436
{
37+
_expressionMapper?.UpdateVRCFTDict();
3538
Thread.Sleep(10);
3639
}
3740
}

ExpressionsMapper.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+

2+
namespace ETVRTrackingModule
3+
{
4+
public class ExpressionsMapper
5+
{
6+
public void MapMessage(OSCMessage msg) { }
7+
public void UpdateVRCFTDict() { }
8+
}
9+
}

OSCManager.cs

Lines changed: 27 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,10 @@ public enum OSCState
1111
ERROR,
1212
}
1313

14-
struct OSCMessage
15-
{
16-
public string address;
17-
public float value;
18-
public bool success;
19-
}
20-
2114
public class OSCManager
2215
{
2316
private Socket _receiver;
24-
private Socket _sender;
17+
//private Socket _sender;
2518

2619
private ILogger _logger;
2720

@@ -30,12 +23,15 @@ public class OSCManager
3023

3124
public OSCState State { get; private set; } = OSCState.IDLE;
3225

26+
private ExpressionsMapper _expressionMapper;
27+
3328
private int _receivingPort;
3429
private const int _defaultPort = 8889;
3530
private const int connectionTimeout = 10000;
3631

37-
public OSCManager(ILogger iLogger, int? port = null) {
32+
public OSCManager(ILogger iLogger, ExpressionsMapper expressionsMapper, int? port = null) {
3833
_logger = iLogger;
34+
_expressionMapper = expressionsMapper;
3935
_receivingPort = port ?? _defaultPort;
4036
_receiver = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
4137

@@ -68,7 +64,7 @@ private void OSCListen()
6864
{
6965
var length = _receiver.Receive(buffer);
7066
OSCMessage msg = ParseOSCMessage(buffer, length);
71-
// map the message
67+
_expressionMapper.MapMessage(msg);
7268
}
7369
}
7470
catch (Exception){}
@@ -99,17 +95,9 @@ OSCMessage ParseOSCMessage(byte[] buffer, int length)
9995
return msg;
10096
// skipping , char
10197
currentStep++;
102-
// now, let's skip the types section
103-
for (int i=currentStep; i < length; i++)
104-
{
105-
if (buffer[i] == 0)
106-
{
107-
currentStep = i + 1;
108-
// we've reached the end of this segment, let's normalize it to 4 bytes and skip ahead
109-
if (currentStep % 4 != 0) { currentStep += 4 - (currentStep % 4); }
110-
break;
111-
}
112-
}
98+
99+
ParseOSCTypes(buffer, length, ref currentStep); // we purposefully ignore the types, for now
100+
113101
float value = ParseOSCFloat(buffer, length, ref currentStep);
114102

115103
msg.value = value;
@@ -142,6 +130,24 @@ string ParseOSCAddress(byte[] buffer, int length, ref int step)
142130
return oscAddress;
143131
}
144132

133+
string ParseOSCTypes(byte[] buffer, int length, ref int step)
134+
{
135+
string types = "";
136+
// now, let's skip the types section
137+
for (int i = step; i < length; i++)
138+
{
139+
if (buffer[i] == 0)
140+
{
141+
step = i + 1;
142+
// we've reached the end of this segment, let's normalize it to 4 bytes and skip ahead
143+
if (step % 4 != 0) { step += 4 - (step % 4); }
144+
break;
145+
}
146+
types += (char)buffer[i];
147+
}
148+
return types;
149+
}
150+
145151
float ParseOSCFloat(byte[] buffer, int length, ref int step)
146152
{
147153
var valueSection = buffer[step..length];

models.cs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
namespace ETVRTrackingModule
2+
{
3+
public struct OSCMessage
4+
{
5+
public string address;
6+
public float value;
7+
public bool success;
8+
}
9+
}

0 commit comments

Comments
 (0)