From b63343256cdbc7aa7dbdaaf342e3aabd089751e9 Mon Sep 17 00:00:00 2001 From: Cassandra de la Cruz-Munoz Date: Wed, 16 Aug 2023 14:29:28 -0400 Subject: [PATCH] create VmcExtRcv and use it in Marionette --- Marionette.cs | 36 +------------------- VmcMessages/VmcExtRcv.cs | 71 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 72 insertions(+), 35 deletions(-) create mode 100644 VmcMessages/VmcExtRcv.cs diff --git a/Marionette.cs b/Marionette.cs index 9ba9724..812ed38 100644 --- a/Marionette.cs +++ b/Marionette.cs @@ -102,43 +102,9 @@ namespace godotVmcSharp new VmcExtDevicePos(m); break; case "/VMC/Ext/Rcv": - ValidateReceiveEnable(m.Data); + new VmcExtRcv(m); break; } } - private bool ValidateReceiveEnable(List data) - { - var addr = "/VMC/Ext/Rcv"; - switch (data.Count) - { - case 2: - break; - case 3: - if (data[2].Type != 's') - { - GD.Print(InvalidArgumentType.GetErrorString(addr, "IpAddress", 's', data[2].Type)); - return false; - } - break; - default: - return false; - } - if (data[0].Type != 'i') - { - GD.Print(InvalidArgumentType.GetErrorString(addr, "enable", 'i', data[0].Type)); - return false; - } - if (data[1].Type != 'i') - { - GD.Print(InvalidArgumentType.GetErrorString(addr, "port", 'i', data[0].Type)); - return false; - } - if ((int)data[1].Value < 0 || (int)data[1].Value > 65535) - { - GD.Print($"Invalid value for \"port\" argument of {addr}. Expected 0-65535, received {(int)data[1].Value}."); - return false; - } - return true; - } } } diff --git a/VmcMessages/VmcExtRcv.cs b/VmcMessages/VmcExtRcv.cs new file mode 100644 index 0000000..5a86fae --- /dev/null +++ b/VmcMessages/VmcExtRcv.cs @@ -0,0 +1,71 @@ +/* + godotVmcSharp + Copyright (C) 2023 Cassandra de la Cruz-Munoz + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + */ + +using Godot; +using godotOscSharp; + +namespace godotVmcSharp +{ + public class VmcExtRcv : VmcMessage + { + public int enable { get; } + public int port { get; } + public string? ipAddress { get; } + + public VmcExtRcv(godotOscSharp.OscMessage m) : base(m.Address) + { + if (m.Data.Count > 3 || m.Data.Count < 2) + { + GD.Print($"Invalid number of arguments for {addr}. Expecting 2 or 3, received {m.Data.Count}"); + return; + } + if (m.Data[0].Type != 'i') + { + GD.Print(InvalidArgumentType.GetErrorString(addr, "enable", 'i', m.Data[0].Type)); + return; + } + if (m.Data[1].Type != 'i') + { + GD.Print(InvalidArgumentType.GetErrorString(addr, "port", 'i', m.Data[0].Type)); + return; + } + if ((int)m.Data[0].Value < 0 || (int)m.Data[0].Value > 1) + { + GD.Print($"Invalid value for \"enable\" argument of {addr}. Expected 0 or 1, received {(int)m.Data[0].Value}."); + return; + } + if ((int)m.Data[1].Value < 0 || (int)m.Data[1].Value > 65535) + { + GD.Print($"Invalid value for \"port\" argument of {addr}. Expected 0-65535, received {(int)m.Data[1].Value}."); + return; + } + enable = (int)m.Data[0].Value; + port = (int)m.Data[1].Value; + if (m.Data.Count != 3) + { + return; + } + if (m.Data[2].Type != 's') + { + GD.Print(InvalidArgumentType.GetErrorString(addr, "IpAddress", 's', m.Data[2].Type)); + return; + } + ipAddress = (string)m.Data[2].Value; + } + } +} \ No newline at end of file