Skip to content

Commit 4dc427b

Browse files
committed
chore: Divide messages into their own files
Finally.
1 parent 41a6e23 commit 4dc427b

18 files changed

+469
-960
lines changed

Buttplug/Buttplug.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
<Version>4.0.0</Version>
88
<Summary>Buttplug Sex Toy Control Library - Client Implementation</Summary>
99
<Description>Buttplug Sex Toy Control Library. Contains Core (messages, errors, etc), Client, and Websocket Connector components</Description>
10-
<TargetFrameworks>netstandard2.0;netstandard2.1;net462;net47</TargetFrameworks>
10+
<TargetFrameworks>netstandard2.0;netstandard2.1;net46;net462;net47</TargetFrameworks>
1111
<GeneratePackageOnBuild>True</GeneratePackageOnBuild>
1212
<RepositoryUrl>https://github.com/buttplugio/buttplug-csharp</RepositoryUrl>
1313
<PackageProjectUrl>https://buttplug.io</PackageProjectUrl>

Buttplug/Client/ButtplugClientDevice.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -263,10 +263,10 @@ public async Task<double> BatteryAsync()
263263
throw new ButtplugDeviceException($"Device {Name} does not have battery capabilities.");
264264
}
265265

266-
var result = await _handler.SendMessageAsync(new SensorReadCmd(Index, SensorReadAttributes(SensorType.Battery).ElementAt(0).Index, SensorType.Battery)).ConfigureAwait(false);
266+
var result = await _handler.SendMessageAsync(new InputCmd(Index, SensorReadAttributes(SensorType.Battery).ElementAt(0).Index, SensorType.Battery)).ConfigureAwait(false);
267267
switch (result)
268268
{
269-
case SensorReading response:
269+
case InputReading response:
270270
return response.data[0] / 100.0;
271271
case Error err:
272272
throw ButtplugException.FromError(err);
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Buttplug.Core.Messages
4+
{
5+
/// <summary>
6+
/// List of devices connected to the server.
7+
/// </summary>
8+
[ButtplugMessageMetadata("DeviceList")]
9+
public class DeviceList : ButtplugMessage, IButtplugMessageOutgoingOnly
10+
{
11+
/// <summary>
12+
/// List of devices currently connected.
13+
/// </summary>
14+
[JsonProperty(Required = Required.Always, NullValueHandling = NullValueHandling.Ignore)]
15+
public readonly DeviceMessageInfo[] Devices = new DeviceMessageInfo[0];
16+
17+
/// <summary>
18+
/// Initializes a new instance of the <see cref="DeviceList"/> class.
19+
/// </summary>
20+
/// <param name="deviceList">List of devices currently connected.</param>
21+
/// <param name="id">Message ID.</param>
22+
public DeviceList(DeviceMessageInfo[] deviceList, uint id)
23+
: base(id)
24+
{
25+
Devices = deviceList;
26+
}
27+
28+
/// <inheritdoc />
29+
internal DeviceList()
30+
: base(0)
31+
{
32+
}
33+
}
34+
}
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Buttplug.Core.Messages
4+
{
5+
/// <summary>
6+
/// Container class for describing a device.
7+
/// </summary>
8+
public class DeviceMessageInfo : IButtplugDeviceInfoMessage
9+
{
10+
/// <summary>
11+
/// Name of the device.
12+
/// </summary>
13+
[JsonProperty(Required = Required.Always)]
14+
public readonly string DeviceName;
15+
16+
/// <summary>
17+
/// Device index.
18+
/// </summary>
19+
[JsonProperty(Required = Required.Always)]
20+
public readonly uint DeviceIndex;
21+
22+
/// <summary>
23+
/// Device display name, set up by the user.
24+
/// </summary>
25+
public readonly string DeviceDisplayName;
26+
27+
/// <summary>
28+
/// Recommended amount of time between commands, in milliseconds.
29+
/// </summary>
30+
[JsonProperty(Required = Required.Default)]
31+
public readonly uint DeviceMessageTimingGap;
32+
33+
/// <summary>
34+
/// List of messages that a device supports, with additional attribute data.
35+
/// </summary>
36+
[JsonProperty(Required = Required.Always)]
37+
public readonly DeviceMessageAttributes DeviceMessages;
38+
39+
/// <summary>
40+
/// Initializes a new instance of the <see cref="DeviceMessageInfo"/> class.
41+
/// </summary>
42+
/// <param name="index">Device index.</param>
43+
/// <param name="name">Device name.</param>
44+
/// <param name="messages">List of device messages/attributes supported.</param>
45+
public DeviceMessageInfo(uint index, string name,
46+
DeviceMessageAttributes messages)
47+
{
48+
DeviceName = name;
49+
DeviceIndex = index;
50+
DeviceMessages = messages;
51+
}
52+
53+
// Implementation details for IButtplugDeviceInfoMessage interface
54+
string IButtplugDeviceInfoMessage.DeviceName => DeviceName;
55+
56+
uint IButtplugDeviceInfoMessage.DeviceIndex => DeviceIndex;
57+
58+
DeviceMessageAttributes IButtplugDeviceInfoMessage.DeviceMessages => DeviceMessages;
59+
60+
string IButtplugDeviceInfoMessage.DeviceDisplayName => DeviceDisplayName;
61+
62+
uint IButtplugDeviceInfoMessage.DeviceMessageTimingGap => DeviceMessageTimingGap;
63+
}
64+
}

Buttplug/Core/Messages/Error.cs

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Buttplug.Core.Messages
4+
{
5+
/// <summary>
6+
/// Indicator that there has been an error in the system, either due to the last message/query
7+
/// sent, or due to an internal error.
8+
/// </summary>
9+
[ButtplugMessageMetadata("Error")]
10+
public class Error : ButtplugMessage, IButtplugMessageOutgoingOnly
11+
{
12+
/// <summary>
13+
/// Types of errors described by the message.
14+
/// </summary>
15+
public enum ErrorClass
16+
{
17+
/// <summary>
18+
/// Error was caused by unknown factors.
19+
/// </summary>
20+
ERROR_UNKNOWN,
21+
22+
/// <summary>
23+
/// Error was caused during connection handshake.
24+
/// </summary>
25+
ERROR_INIT,
26+
27+
/// <summary>
28+
/// Max ping timeout has been exceeded.
29+
/// </summary>
30+
ERROR_PING,
31+
32+
/// <summary>
33+
/// Error parsing messages.
34+
/// </summary>
35+
ERROR_MSG,
36+
37+
/// <summary>
38+
/// Error at the device manager level (device doesn't exist/disconnected, etc...)
39+
/// </summary>
40+
ERROR_DEVICE,
41+
}
42+
43+
/// <summary>
44+
/// Specific error type this message describes.
45+
/// </summary>
46+
[JsonProperty(Required = Required.Always)]
47+
public ErrorClass ErrorCode;
48+
49+
/// <summary>
50+
/// Human-readable error description.
51+
/// </summary>
52+
[JsonProperty(Required = Required.Always)]
53+
public string ErrorMessage;
54+
55+
/// <summary>
56+
/// Initializes a new instance of the <see cref="Error"/> class. The message ID may be zero
57+
/// if raised outside of servicing a message from the client, otherwise the message ID must
58+
/// match the message being serviced.
59+
/// </summary>
60+
/// <param name="errorMessage">Human-readable error description.</param>
61+
/// <param name="errorCode">Class of error.</param>
62+
/// <param name="id">Message ID.</param>
63+
public Error(string errorMessage, ErrorClass errorCode, uint id)
64+
: base(id)
65+
{
66+
ErrorMessage = errorMessage;
67+
ErrorCode = errorCode;
68+
}
69+
}
70+
}

Buttplug/Core/Messages/InputCmd.cs

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using Newtonsoft.Json;
2+
3+
namespace Buttplug.Core.Messages
4+
{
5+
/// <summary>
6+
/// Sent to server, generic message that can control any device that takes a single value and staticly
7+
/// sets an actuator to that value (speed, oscillation frequency, instanteous position, etc).
8+
/// </summary>
9+
[ButtplugMessageMetadata("SensorReadCmd")]
10+
public class InputCmd : ButtplugDeviceMessage
11+
{
12+
/// <summary>
13+
/// List of vibrator speeds.
14+
/// </summary>
15+
[JsonProperty(Required = Required.Always)]
16+
public uint SensorIndex;
17+
18+
[JsonProperty(Required = Required.Always)]
19+
public SensorType SensorType;
20+
21+
/// <summary>
22+
/// Initializes a new instance of the <see cref="ScalarCmd"/> class.
23+
/// </summary>
24+
/// <param name="deviceIndex">Device index.</param>
25+
/// <param name="scalars">List of per-actuator scalar commands.</param>
26+
/// <param name="id">Message ID.</param>
27+
[JsonConstructor]
28+
public InputCmd(uint deviceIndex, uint sensorIndex, SensorType sensorType, uint id = ButtplugConsts.DefaultMsgId)
29+
: base(id, deviceIndex)
30+
{
31+
SensorIndex = sensorIndex;
32+
SensorType = sensorType;
33+
}
34+
35+
/// <summary>
36+
/// Initializes a new instance of the <see cref="ScalarCmd"/> class.
37+
/// </summary>
38+
/// <param name="scalars">List of per-actuator scalar commands.</param>
39+
public InputCmd(uint sensorIndex, SensorType sensorType)
40+
: this(uint.MaxValue, sensorIndex, sensorType)
41+
{
42+
}
43+
}
44+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
using System.Collections.Generic;
2+
using Newtonsoft.Json;
3+
4+
namespace Buttplug.Core.Messages
5+
{
6+
/// <summary>
7+
/// Sent to server, generic message that can control any device that takes a single value and staticly
8+
/// sets an actuator to that value (speed, oscillation frequency, instanteous position, etc).
9+
/// </summary>
10+
[ButtplugMessageMetadata("SensorReading")]
11+
public class InputReading : ButtplugDeviceMessage
12+
{
13+
/// <summary>
14+
/// List of vibrator speeds.
15+
/// </summary>
16+
[JsonProperty(Required = Required.Always)]
17+
public readonly uint SensorIndex;
18+
19+
[JsonProperty(Required = Required.Always)]
20+
public readonly SensorType SensorType;
21+
22+
[JsonProperty(Required = Required.Always)]
23+
public readonly List<int> data;
24+
}
25+
}

0 commit comments

Comments
 (0)