diff --git a/Orbis Suite 3.0.sln b/Orbis Suite 3.0.sln
index 76229b0..16d46e5 100644
--- a/Orbis Suite 3.0.sln
+++ b/Orbis Suite 3.0.sln
@@ -18,18 +18,12 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Misc", "Misc", "{DBCE3AAD-3
EndProjectSection
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrbisNeighborHood", "Windows\OrbisNeighborHood\OrbisNeighborHood.csproj", "{81B068F7-776C-429F-BB7B-5563F75F1A39}"
- ProjectSection(ProjectDependencies) = postProject
- {6AE42BFE-1833-4804-96EB-38D323B6C28E} = {6AE42BFE-1833-4804-96EB-38D323B6C28E}
- EndProjectSection
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Installer", "Installer", "{6046C772-BE17-4BC8-A362-AD8C77F9178E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrbisLib", "Windows\Libraries\OrbisLib\OrbisLib.csproj", "{6AE42BFE-1833-4804-96EB-38D323B6C28E}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "OrbisSuiteService", "Windows\OrbisSuiteService\OrbisSuiteService.csproj", "{D7CFB2D5-FAC2-42D5-ABA7-81CE762575EF}"
- ProjectSection(ProjectDependencies) = postProject
- {6AE42BFE-1833-4804-96EB-38D323B6C28E} = {6AE42BFE-1833-4804-96EB-38D323B6C28E}
- EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OrbisSuite", "Playstation\OrbisSuite\OrbisSuite.vcxproj", "{228AA300-11F5-49B1-A6B5-4986635C6D0B}"
EndProject
@@ -37,15 +31,15 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "OrbisToolbox-2.0", "Playsta
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "BootstrapperSetup", "Windows\Installer\BootstrapperSetup\BootstrapperSetup.wixproj", "{0978D0B2-FFA5-42B2-81AC-0CFD85DE9184}"
ProjectSection(ProjectDependencies) = postProject
- {A37095E9-80BD-4A6B-AF8B-33D278CF92F3} = {A37095E9-80BD-4A6B-AF8B-33D278CF92F3}
{33C378F9-36C5-4C2C-8350-FD1C8DD5AB66} = {33C378F9-36C5-4C2C-8350-FD1C8DD5AB66}
+ {A37095E9-80BD-4A6B-AF8B-33D278CF92F3} = {A37095E9-80BD-4A6B-AF8B-33D278CF92F3}
EndProjectSection
EndProject
Project("{930C7802-8A8C-48F9-8165-68863BCCD9DD}") = "DummyInstaller", "Windows\Installer\DummyInstaller\DummyInstaller.wixproj", "{A37095E9-80BD-4A6B-AF8B-33D278CF92F3}"
ProjectSection(ProjectDependencies) = postProject
- {D7CFB2D5-FAC2-42D5-ABA7-81CE762575EF} = {D7CFB2D5-FAC2-42D5-ABA7-81CE762575EF}
- {81B068F7-776C-429F-BB7B-5563F75F1A39} = {81B068F7-776C-429F-BB7B-5563F75F1A39}
{6AE42BFE-1833-4804-96EB-38D323B6C28E} = {6AE42BFE-1833-4804-96EB-38D323B6C28E}
+ {81B068F7-776C-429F-BB7B-5563F75F1A39} = {81B068F7-776C-429F-BB7B-5563F75F1A39}
+ {D7CFB2D5-FAC2-42D5-ABA7-81CE762575EF} = {D7CFB2D5-FAC2-42D5-ABA7-81CE762575EF}
EndProjectSection
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SetupBA", "Windows\Installer\SetupBA\SetupBA.csproj", "{33C378F9-36C5-4C2C-8350-FD1C8DD5AB66}"
diff --git a/Playstation/OrbisLibAPI/SocketListener.cpp b/Playstation/OrbisLibAPI/SocketListener.cpp
index cfe621a..e057f1b 100644
--- a/Playstation/OrbisLibAPI/SocketListener.cpp
+++ b/Playstation/OrbisLibAPI/SocketListener.cpp
@@ -96,7 +96,7 @@ void* SocketListener::DoWork()
int optval = 1;
sceNetSetsockopt(ClientSocket, ORBIS_NET_SOL_SOCKET, ORBIS_NET_SO_NOSIGPIPE, &optval, sizeof(optval));
- int sock_timeout = 2000000;
+ int sock_timeout = 3000000;
sceNetSetsockopt(ClientSocket, ORBIS_NET_SOL_SOCKET, ORBIS_NET_SO_SNDTIMEO, &sock_timeout, sizeof(sock_timeout));
sceNetSetsockopt(ClientSocket, ORBIS_NET_SOL_SOCKET, ORBIS_NET_SO_RCVTIMEO, &sock_timeout, sizeof(sock_timeout));
diff --git a/Playstation/OrbisLibAPI/Target.cpp b/Playstation/OrbisLibAPI/Target.cpp
index 0b2f48d..dc4ddb8 100644
--- a/Playstation/OrbisLibAPI/Target.cpp
+++ b/Playstation/OrbisLibAPI/Target.cpp
@@ -22,23 +22,17 @@ void Target::HandleAPI(OrbisNetId Sock, APIPacket* Packet)
ChangeSystemState(SystemState::Suspend);
- SendStatus(Sock, APIResults::API_OK);
-
break;
case APICommands::API_TARGET_SHUTDOWN:
ChangeSystemState(SystemState::Shutdown);
- SendStatus(Sock, APIResults::API_OK);
-
break;
case APICommands::API_TARGET_REBOOT:
- ChangeSystemState(SystemState::Reboot);
-
- SendStatus(Sock, APIResults::API_OK);
+ ChangeSystemState(SystemState::Reboot);;
break;
@@ -52,16 +46,12 @@ void Target::HandleAPI(OrbisNetId Sock, APIPacket* Packet)
RingBuzzer((BuzzerType)RecieveInt(Sock));
- SendStatus(Sock, APIResults::API_OK);
-
break;
case APICommands::API_TARGET_SET_LED:
SetConsoleLED((ConsoleLEDColours)RecieveInt(Sock));
- SendStatus(Sock, APIResults::API_OK);
-
break;
case APICommands::API_TARGET_DUMP_PROC:
@@ -142,8 +132,8 @@ void Target::DoNotify(OrbisNetId Sock)
{
auto Packet = new TargetNotifyPacket();
- sceNetRecv(Sock, Packet, sizeof(TargetNotifyPacket), 0);
-
+ auto res = sceNetRecv(Sock, Packet, sizeof(TargetNotifyPacket), 0);
+ klog("%llX\n", res);
if (!strcmp(Packet->IconURI, ""))
Notify(Packet->Message);
else
diff --git a/Playstation/OrbisLibAPI/Version.h b/Playstation/OrbisLibAPI/Version.h
index 8b13be9..59894a0 100644
--- a/Playstation/OrbisLibAPI/Version.h
+++ b/Playstation/OrbisLibAPI/Version.h
@@ -1,11 +1,11 @@
-#pragma once
-#define ORBISLIB_MAJOR 3
-#define ORBISLIB_MINOR 0
-#define ORBISLIB_BUILDVERSION 664
-#define stringify(a) stringify_(a)
-#define stringify_(a) #a
-#if defined(_DEBUG)
-#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Dev Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
-#else
-#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
-#endif
+#pragma once
+#define ORBISLIB_MAJOR 3
+#define ORBISLIB_MINOR 0
+#define ORBISLIB_BUILDVERSION 668
+#define stringify(a) stringify_(a)
+#define stringify_(a) #a
+#if defined(_DEBUG)
+#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Dev Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
+#else
+#define ORBISLIB_BUILDSTRING ("[OrbisLib Daemon " stringify(ORBISLIB_MAJOR) "." stringify(ORBISLIB_MINOR) "] Build " stringify(ORBISLIB_BUILDVERSION) " " __DATE__ " " __TIME__)
+#endif
diff --git a/Windows/Libraries/OrbisLib/Classes/DispatcherClient.cs b/Windows/Libraries/OrbisLib/Classes/DispatcherClient.cs
index cb64631..a877c07 100644
--- a/Windows/Libraries/OrbisLib/Classes/DispatcherClient.cs
+++ b/Windows/Libraries/OrbisLib/Classes/DispatcherClient.cs
@@ -2,230 +2,102 @@
using OrbisSuite.Common.Dispatcher;
using System.Net.Sockets;
using System.Text;
+using TinyIpc.Messaging;
namespace OrbisSuite
{
public class DispatcherClient
{
private OrbisLib PS4;
- private Listener? _EventListener;
- private int _Port = -1;
- private Task _HeartbeatTask;
- private CancellationToken _HeartbeatCancellationToken;
+ private TinyMessageBus _ServiceMessageBus;
public DispatcherClient(OrbisLib PS4)
{
this.PS4 = PS4;
- _HeartbeatTask = Task.Run(() => DoHeartbeat());
+ _ServiceMessageBus = new TinyMessageBus("OrbisSuite");
+ _ServiceMessageBus.MessageReceived += _ServiceMessageBus_MessageReceived; ;
}
- private void _EventListener_SocketAccepted(Socket e)
+ private void _ServiceMessageBus_MessageReceived(object? sender, TinyMessageReceivedEventArgs e)
{
- try
+ var Packet = (ForwardPacket)Helpers.ByteArrayToObject(e.Message.ToArray());
+
+ switch (Packet.Type)
{
- var Packet = (ForwardPacket)e.RecvObject();
-
- switch (Packet.Type)
- {
- default:
- Console.WriteLine("Invalid Packet...");
- break;
-
- // Debugging
- case ForwardPacket.PacketType.Print:
- PS4.DefaultTarget.Events.RaiseProcPrintEvent(Packet.SenderIPAddress, Packet.Print.Sender, Packet.Print.Data);
- PS4.SelectedTarget.Events.RaiseProcPrintEvent(Packet.SenderIPAddress, Packet.Print.Sender, Packet.Print.Data);
- break;
-
- case ForwardPacket.PacketType.SerialCom:
- Console.Write(Encoding.UTF8.GetString(Packet.SerialCom.Data));
- break;
-
- case ForwardPacket.PacketType.Intercept:
- PS4.DefaultTarget.Events.RaiseProcInterceptEvent(Packet.SenderIPAddress);
- PS4.SelectedTarget.Events.RaiseProcInterceptEvent(Packet.SenderIPAddress);
- break;
-
- case ForwardPacket.PacketType.Continue:
- PS4.DefaultTarget.Events.RaiseProcContinueEvent(Packet.SenderIPAddress);
- PS4.SelectedTarget.Events.RaiseProcContinueEvent(Packet.SenderIPAddress);
- break;
-
- // Process States
- case ForwardPacket.PacketType.ProcessDie:
- PS4.DefaultTarget.Events.RaiseProcDieEvent(Packet.SenderIPAddress);
- PS4.SelectedTarget.Events.RaiseProcDieEvent(Packet.SenderIPAddress);
- break;
-
- case ForwardPacket.PacketType.ProcessAttach:
- PS4.DefaultTarget.Events.RaiseProcAttachEvent(Packet.SenderIPAddress, Packet.ProcessName);
- PS4.SelectedTarget.Events.RaiseProcAttachEvent(Packet.SenderIPAddress, Packet.ProcessName);
- break;
-
- case ForwardPacket.PacketType.ProcessDetach:
- PS4.DefaultTarget.Events.RaiseProcDetachEvent(Packet.SenderIPAddress);
- PS4.SelectedTarget.Events.RaiseProcDetachEvent(Packet.SenderIPAddress);
- break;
-
- // Target State
- case ForwardPacket.PacketType.TargetSuspend:
- PS4.DefaultTarget.Events.RaiseTargetSuspendEvent(Packet.SenderIPAddress);
- PS4.SelectedTarget.Events.RaiseTargetSuspendEvent(Packet.SenderIPAddress);
- break;
-
- case ForwardPacket.PacketType.TargetResume:
- PS4.DefaultTarget.Events.RaiseTargetResumeEvent(Packet.SenderIPAddress);
- PS4.SelectedTarget.Events.RaiseTargetResumeEvent(Packet.SenderIPAddress);
- break;
-
- case ForwardPacket.PacketType.TargetShutdown:
- PS4.DefaultTarget.Events.RaiseTargetShutdownEvent(Packet.SenderIPAddress);
- PS4.SelectedTarget.Events.RaiseTargetShutdownEvent(Packet.SenderIPAddress);
- break;
-
- case ForwardPacket.PacketType.TargetNewTitle:
- PS4.DefaultTarget.Events.RaiseTargetNewTitleEvent(Packet.SenderIPAddress, Packet.TitleChange.TitleID);
- PS4.SelectedTarget.Events.RaiseTargetNewTitleEvent(Packet.SenderIPAddress, Packet.TitleChange.TitleID);
- break;
-
- case ForwardPacket.PacketType.TargetAvailability:
- PS4.Events.FireTargetAvailability(Packet.TargetAvailability.Available, Packet.TargetAvailability.Name);
- break;
-
- case ForwardPacket.PacketType.TargetAPIAvailability:
- PS4.Events.FireTargetAPIAvailability(Packet.TargetAvailability.Available, Packet.TargetAvailability.Name);
- break;
-
- // Misc
- case ForwardPacket.PacketType.DBTouched:
- PS4.Events.FireDBTouched();
- break;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod()?.Name}] Error: {ex.Message}");
- }
- }
-
- ///
- /// Attempts to connect to the Dispatcher.
- ///
- /// Returns true if the connection was successful.
- private bool Connect()
- {
- try
- {
- if (_Port != -1)
- {
- Console.WriteLine("[Connect] Already Connected!");
-
- return true;
- }
-
- var Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- if (Sock.EasyConnect("127.0.0.1", Config.DispatcherPort, 1000))
- {
- Sock.SendObject(new DispatcherClientPacket(DispatcherClientPacket.PacketType.NewClient, System.Diagnostics.Process.GetCurrentProcess().ProcessName, -1));
-
- _Port = Sock.RecvInt32();
- Sock.Close();
-
- if (_Port != -1)
- {
- Console.WriteLine($"Starting up _EventListener on port { _Port }");
- _EventListener = new Listener(_Port);
- _EventListener.Start();
- _EventListener.SocketAccepted += _EventListener_SocketAccepted;
-
- return true;
- }
- else
- return false;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod()?.Name}] Error: {ex.Message}");
- }
-
- return false;
- }
-
- ///
- /// Sends a Heart beat Packet.
- ///
- /// Returns true if the packet was sent successfully.
- private bool DoHeartBeat()
- {
- try
- {
- if (_Port == -1)
- {
- Console.WriteLine("[DoHeartBeat] Not Connected!");
-
- return false;
- }
-
- var Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- if (Sock.EasyConnect("127.0.0.1", Config.DispatcherPort, 1000))
- {
- Sock.SendObject(new DispatcherClientPacket(DispatcherClientPacket.PacketType.HeartBeat, System.Diagnostics.Process.GetCurrentProcess().ProcessName, _Port));
-
- var Result = Sock.RecvInt32();
- Sock.Close();
-
- return (Result == 1);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod()?.Name}] Error: {ex.Message}");
- }
-
- return false;
- }
-
- ///
- /// Task will Send heartbeat packets to the Service. This will also ensure that we are always connected to the service.
- ///
- ///
- private async Task DoHeartbeat()
- {
- while (!Connect())
- {
- await Task.Delay(500, _HeartbeatCancellationToken);
-
- if (_HeartbeatCancellationToken.IsCancellationRequested)
- break;
- }
-
- if (_Port != -1)
- Console.WriteLine("[DispatcherClient] Connection Sucessful!");
-
- while (true)
- {
- await Task.Delay(5000, _HeartbeatCancellationToken);
-
- if (_HeartbeatCancellationToken.IsCancellationRequested)
+ default:
+ Console.WriteLine("Invalid Packet...");
break;
- if (!DoHeartBeat())
- {
- _Port = -1;
+ // Debugging
+ case ForwardPacket.PacketType.Print:
+ PS4.DefaultTarget.Events.RaiseProcPrintEvent(Packet.SenderIPAddress, Packet.Print.Sender, Packet.Print.Data);
+ PS4.SelectedTarget.Events.RaiseProcPrintEvent(Packet.SenderIPAddress, Packet.Print.Sender, Packet.Print.Data);
+ break;
- while (!Connect())
- {
- await Task.Delay(500, _HeartbeatCancellationToken);
+ case ForwardPacket.PacketType.SerialCom:
+ Console.Write(Encoding.UTF8.GetString(Packet.SerialCom.Data));
+ break;
- if (_HeartbeatCancellationToken.IsCancellationRequested)
- break;
- }
+ case ForwardPacket.PacketType.Intercept:
+ PS4.DefaultTarget.Events.RaiseProcInterceptEvent(Packet.SenderIPAddress);
+ PS4.SelectedTarget.Events.RaiseProcInterceptEvent(Packet.SenderIPAddress);
+ break;
- if (_Port != -1)
- Console.WriteLine("[DispatcherClient] Reconnection Sucessful!");
- }
+ case ForwardPacket.PacketType.Continue:
+ PS4.DefaultTarget.Events.RaiseProcContinueEvent(Packet.SenderIPAddress);
+ PS4.SelectedTarget.Events.RaiseProcContinueEvent(Packet.SenderIPAddress);
+ break;
+
+ // Process States
+ case ForwardPacket.PacketType.ProcessDie:
+ PS4.DefaultTarget.Events.RaiseProcDieEvent(Packet.SenderIPAddress);
+ PS4.SelectedTarget.Events.RaiseProcDieEvent(Packet.SenderIPAddress);
+ break;
+
+ case ForwardPacket.PacketType.ProcessAttach:
+ PS4.DefaultTarget.Events.RaiseProcAttachEvent(Packet.SenderIPAddress, Packet.ProcessName);
+ PS4.SelectedTarget.Events.RaiseProcAttachEvent(Packet.SenderIPAddress, Packet.ProcessName);
+ break;
+
+ case ForwardPacket.PacketType.ProcessDetach:
+ PS4.DefaultTarget.Events.RaiseProcDetachEvent(Packet.SenderIPAddress);
+ PS4.SelectedTarget.Events.RaiseProcDetachEvent(Packet.SenderIPAddress);
+ break;
+
+ // Target State
+ case ForwardPacket.PacketType.TargetSuspend:
+ PS4.DefaultTarget.Events.RaiseTargetSuspendEvent(Packet.SenderIPAddress);
+ PS4.SelectedTarget.Events.RaiseTargetSuspendEvent(Packet.SenderIPAddress);
+ break;
+
+ case ForwardPacket.PacketType.TargetResume:
+ PS4.DefaultTarget.Events.RaiseTargetResumeEvent(Packet.SenderIPAddress);
+ PS4.SelectedTarget.Events.RaiseTargetResumeEvent(Packet.SenderIPAddress);
+ break;
+
+ case ForwardPacket.PacketType.TargetShutdown:
+ PS4.DefaultTarget.Events.RaiseTargetShutdownEvent(Packet.SenderIPAddress);
+ PS4.SelectedTarget.Events.RaiseTargetShutdownEvent(Packet.SenderIPAddress);
+ break;
+
+ case ForwardPacket.PacketType.TargetNewTitle:
+ PS4.DefaultTarget.Events.RaiseTargetNewTitleEvent(Packet.SenderIPAddress, Packet.TitleChange.TitleID);
+ PS4.SelectedTarget.Events.RaiseTargetNewTitleEvent(Packet.SenderIPAddress, Packet.TitleChange.TitleID);
+ break;
+
+ case ForwardPacket.PacketType.TargetAvailability:
+ PS4.Events.FireTargetAvailability(Packet.TargetAvailability.Available, Packet.TargetAvailability.Name);
+ break;
+
+ case ForwardPacket.PacketType.TargetAPIAvailability:
+ PS4.Events.FireTargetAPIAvailability(Packet.TargetAvailability.Available, Packet.TargetAvailability.Name);
+ break;
+
+ // Misc
+ case ForwardPacket.PacketType.DBTouched:
+ PS4.Events.FireDBTouched();
+ break;
}
}
}
diff --git a/Windows/Libraries/OrbisLib/OrbisLib.csproj b/Windows/Libraries/OrbisLib/OrbisLib.csproj
index a6b544a..ff7020d 100644
--- a/Windows/Libraries/OrbisLib/OrbisLib.csproj
+++ b/Windows/Libraries/OrbisLib/OrbisLib.csproj
@@ -3,7 +3,7 @@
net6.0-windows
enable
- enable
+ annotations
OrbisSuite
{60dc8134-eba5-43b8-bcc9-bb4bc16c2548};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}
true
@@ -18,6 +18,7 @@
+
diff --git a/Windows/Libraries/OrbisLib2/Common/API/API.cs b/Windows/Libraries/OrbisLib2/Common/API/API.cs
index 4b82076..875dd0e 100644
--- a/Windows/Libraries/OrbisLib2/Common/API/API.cs
+++ b/Windows/Libraries/OrbisLib2/Common/API/API.cs
@@ -12,7 +12,7 @@ namespace OrbisLib2.Common.API
///
/// IP Address of the remote target.
/// The port of the remote target.
- /// The time we should wait before timing out.
+ /// The time we should wait before timing out represented as seconds.
/// The socket created when connecting.
/// Returns true if successful.
private static bool Connect(string IPAddress, int Port, int TimeOut, out Socket Sock)
@@ -26,7 +26,7 @@ namespace OrbisLib2.Common.API
/// Makes an API call to the remote target.
///
/// The desired target to recieve the command.
- /// The time the socket should wait before timing out.
+ /// The time the socket should wait before timing out represented as seconds.
/// The command to be run.
/// Optional lambda to send/recv additional data.
/// Returns result of the communications with the API.
@@ -40,10 +40,7 @@ namespace OrbisLib2.Common.API
if (Connect(DesiredTarget.IPAddress, Settings.CreateInstance().APIPort, TimeOut, out Socket Sock))
{
// Send Inital Packet.
- Sock.Send(Helper.StructToBytes(new APIPacket() { PacketVersion = Config.PacketVersion, Command = Command }));
-
- // Get API Response.
- var result = (APIResults)Sock.RecvInt32();
+ var result = SendNextPacket(Sock, new APIPacket() { PacketVersion = Config.PacketVersion, Command = Command });
// Call lambda for additional calls.
if (result == APIResults.API_OK && AdditionalCommunications != null)
diff --git a/Windows/Libraries/OrbisLib2/Common/API/APIPackets.cs b/Windows/Libraries/OrbisLib2/Common/API/APIPackets.cs
index b6f4791..8ecab29 100644
--- a/Windows/Libraries/OrbisLib2/Common/API/APIPackets.cs
+++ b/Windows/Libraries/OrbisLib2/Common/API/APIPackets.cs
@@ -125,7 +125,7 @@ namespace OrbisLib2.Common.API
API_ERROR_DEBUG_TO_ATTACHED,
}
- [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi, Size = 40), Serializable]
+ [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi, Size = 8), Serializable]
public struct APIPacket
{
public int PacketVersion;
@@ -310,7 +310,7 @@ namespace OrbisLib2.Common.API
public MemoryInfo VRam;
}
- [StructLayout(LayoutKind.Sequential, Pack = 4, CharSet = CharSet.Ansi)]
+ [StructLayout(LayoutKind.Sequential, Pack = 4, Size = 2048, CharSet = CharSet.Ansi)]
public struct TargetNotifyPacket
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 1024)]
diff --git a/Windows/Libraries/OrbisLib2/Common/Database/SavedTarget.cs b/Windows/Libraries/OrbisLib2/Common/Database/SavedTarget.cs
index ba2f6ff..267ff3d 100644
--- a/Windows/Libraries/OrbisLib2/Common/Database/SavedTarget.cs
+++ b/Windows/Libraries/OrbisLib2/Common/Database/SavedTarget.cs
@@ -105,6 +105,10 @@ namespace OrbisLib2.Common.Database
return (result > 0);
}
+ ///
+ /// Duplicates this class to a new instance.
+ ///
+ /// Returns the new instance.
public SavedTarget Clone()
{
return (SavedTarget)this.MemberwiseClone();
diff --git a/Windows/Libraries/OrbisLib2/Common/Dispatcher/DispatcherClient.cs b/Windows/Libraries/OrbisLib2/Common/Dispatcher/DispatcherClient.cs
index 11dfa0a..7b290bc 100644
--- a/Windows/Libraries/OrbisLib2/Common/Dispatcher/DispatcherClient.cs
+++ b/Windows/Libraries/OrbisLib2/Common/Dispatcher/DispatcherClient.cs
@@ -7,217 +7,92 @@ using System.Linq;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
+using TinyIpc.Messaging;
namespace OrbisLib2.Common.Dispatcher
{
public class DispatcherClient
{
- private Listener? _EventListener;
- private int _Port = -1;
- private Task _HeartbeatTask;
- private CancellationToken _HeartbeatCancellationToken;
-
- public DispatcherClient()
- {
- _HeartbeatTask = Task.Run(() => DoHeartbeat());
- }
-
- private void _EventListener_SocketAccepted(Socket e)
- {
- try
- {
- var Packet = (ForwardPacket)e.RecvObject();
-
- switch (Packet.Type)
- {
- default:
- Console.WriteLine("Invalid Packet...");
- break;
-
- // Debugging
- case ForwardPacket.PacketType.Print:
- TargetManager.SelectedTarget.Events.RaiseProcPrintEvent(Packet.SenderIPAddress, Packet.Print.Sender, Packet.Print.Data);
- break;
-
- case ForwardPacket.PacketType.SerialCom:
- // TODO:
- break;
-
- case ForwardPacket.PacketType.Intercept:
- TargetManager.SelectedTarget.Events.RaiseProcInterceptEvent(Packet.SenderIPAddress);
- break;
-
- case ForwardPacket.PacketType.Continue:
- TargetManager.SelectedTarget.Events.RaiseProcContinueEvent(Packet.SenderIPAddress);
- break;
-
- // Process States
- case ForwardPacket.PacketType.ProcessDie:
- TargetManager.SelectedTarget.Events.RaiseProcDieEvent(Packet.SenderIPAddress);
- break;
-
- case ForwardPacket.PacketType.ProcessAttach:
- TargetManager.SelectedTarget.Events.RaiseProcAttachEvent(Packet.SenderIPAddress, Packet.ProcessName);
- break;
-
- case ForwardPacket.PacketType.ProcessDetach:
- TargetManager.SelectedTarget.Events.RaiseProcDetachEvent(Packet.SenderIPAddress);
- break;
-
- // Target State
- case ForwardPacket.PacketType.TargetSuspend:
- TargetManager.SelectedTarget.Events.RaiseTargetSuspendEvent(Packet.SenderIPAddress);
- break;
-
- case ForwardPacket.PacketType.TargetResume:
- TargetManager.SelectedTarget.Events.RaiseTargetResumeEvent(Packet.SenderIPAddress);
- break;
-
- case ForwardPacket.PacketType.TargetShutdown:
- TargetManager.SelectedTarget.Events.RaiseTargetShutdownEvent(Packet.SenderIPAddress);
- break;
-
- case ForwardPacket.PacketType.TargetNewTitle:
- TargetManager.SelectedTarget.Events.RaiseTargetNewTitleEvent(Packet.SenderIPAddress, Packet.TitleChange.TitleID);
- break;
-
- case ForwardPacket.PacketType.TargetAvailability:
- Events.FireTargetAvailability(Packet.TargetAvailability.Available, Packet.TargetAvailability.Name);
- break;
-
- case ForwardPacket.PacketType.TargetAPIAvailability:
- Events.FireTargetAPIAvailability(Packet.TargetAvailability.Available, Packet.TargetAvailability.Name);
- break;
-
- // Misc
- case ForwardPacket.PacketType.DBTouched:
- Events.FireDBTouched();
- break;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod()?.Name}] Error: {ex.Message}");
- }
- }
+ private static TinyMessageBus _ServiceMessageBus;
///
- /// Attempts to connect to the Dispatcher.
+ /// Call this to subscribe for events from the windows service.
///
- /// Returns true if the connection was successful.
- private bool Connect()
+ public static void Subscribe()
{
- try
- {
- if (_Port != -1)
- {
- Console.WriteLine("[Connect] Already Connected!");
-
- return true;
- }
-
- var Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- if (Sock.EasyConnect("127.0.0.1", Config.DispatcherPort, 1000))
- {
- Sock.SendObject(new DispatcherClientPacket(DispatcherClientPacket.PacketType.NewClient, System.Diagnostics.Process.GetCurrentProcess().ProcessName, -1));
-
- _Port = Sock.RecvInt32();
- Sock.Close();
-
- if (_Port != -1)
- {
- Console.WriteLine($"Starting up _EventListener on port {_Port}");
- _EventListener = new Listener(_Port);
- _EventListener.Start();
- _EventListener.SocketAccepted += _EventListener_SocketAccepted;
-
- return true;
- }
- else
- return false;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod()?.Name}] Error: {ex.Message}");
- }
-
- return false;
+ _ServiceMessageBus = new TinyMessageBus("OrbisSuite");
+ _ServiceMessageBus.MessageReceived += _ServiceMessageBus_MessageReceived;
}
- ///
- /// Sends a Heart beat Packet.
- ///
- /// Returns true if the packet was sent successfully.
- private bool DoHeartBeat()
+ private static void _ServiceMessageBus_MessageReceived(object? sender, TinyMessageReceivedEventArgs e)
{
- try
+ var Packet = (ForwardPacket)Helper.ByteArrayToObject(e.Message.ToArray());
+
+ switch (Packet.Type)
{
- if (_Port == -1)
- {
- Console.WriteLine("[DoHeartBeat] Not Connected!");
-
- return false;
- }
-
- var Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- if (Sock.EasyConnect("127.0.0.1", Config.DispatcherPort, 1000))
- {
- Sock.SendObject(new DispatcherClientPacket(DispatcherClientPacket.PacketType.HeartBeat, System.Diagnostics.Process.GetCurrentProcess().ProcessName, _Port));
-
- var Result = Sock.RecvInt32();
- Sock.Close();
-
- return (Result == 1);
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod()?.Name}] Error: {ex.Message}");
- }
-
- return false;
- }
-
- ///
- /// Task will Send heartbeat packets to the Service. This will also ensure that we are always connected to the service.
- ///
- ///
- private async Task DoHeartbeat()
- {
- while (!Connect())
- {
- await Task.Delay(500, _HeartbeatCancellationToken);
-
- if (_HeartbeatCancellationToken.IsCancellationRequested)
- break;
- }
-
- if (_Port != -1)
- Console.WriteLine("[DispatcherClient] Connection Sucessful!");
-
- while (true)
- {
- await Task.Delay(5000, _HeartbeatCancellationToken);
-
- if (_HeartbeatCancellationToken.IsCancellationRequested)
+ default:
+ Console.WriteLine("Invalid Packet...");
break;
- if (!DoHeartBeat())
- {
- _Port = -1;
+ // Debugging
+ case ForwardPacket.PacketType.Print:
+ TargetManager.SelectedTarget.Events.RaiseProcPrintEvent(Packet.SenderIPAddress, Packet.Print.Sender, Packet.Print.Data);
+ break;
- while (!Connect())
- {
- await Task.Delay(500, _HeartbeatCancellationToken);
+ case ForwardPacket.PacketType.SerialCom:
+ // TODO:
+ break;
- if (_HeartbeatCancellationToken.IsCancellationRequested)
- break;
- }
+ case ForwardPacket.PacketType.Intercept:
+ TargetManager.SelectedTarget.Events.RaiseProcInterceptEvent(Packet.SenderIPAddress);
+ break;
- if (_Port != -1)
- Console.WriteLine("[DispatcherClient] Reconnection Sucessful!");
- }
+ case ForwardPacket.PacketType.Continue:
+ TargetManager.SelectedTarget.Events.RaiseProcContinueEvent(Packet.SenderIPAddress);
+ break;
+
+ // Process States
+ case ForwardPacket.PacketType.ProcessDie:
+ TargetManager.SelectedTarget.Events.RaiseProcDieEvent(Packet.SenderIPAddress);
+ break;
+
+ case ForwardPacket.PacketType.ProcessAttach:
+ TargetManager.SelectedTarget.Events.RaiseProcAttachEvent(Packet.SenderIPAddress, Packet.ProcessName);
+ break;
+
+ case ForwardPacket.PacketType.ProcessDetach:
+ TargetManager.SelectedTarget.Events.RaiseProcDetachEvent(Packet.SenderIPAddress);
+ break;
+
+ // Target State
+ case ForwardPacket.PacketType.TargetSuspend:
+ TargetManager.SelectedTarget.Events.RaiseTargetSuspendEvent(Packet.SenderIPAddress);
+ break;
+
+ case ForwardPacket.PacketType.TargetResume:
+ TargetManager.SelectedTarget.Events.RaiseTargetResumeEvent(Packet.SenderIPAddress);
+ break;
+
+ case ForwardPacket.PacketType.TargetShutdown:
+ TargetManager.SelectedTarget.Events.RaiseTargetShutdownEvent(Packet.SenderIPAddress);
+ break;
+
+ case ForwardPacket.PacketType.TargetNewTitle:
+ TargetManager.SelectedTarget.Events.RaiseTargetNewTitleEvent(Packet.SenderIPAddress, Packet.TitleChange.TitleID);
+ break;
+
+ case ForwardPacket.PacketType.TargetAvailability:
+ Events.FireTargetAvailability(Packet.TargetAvailability.Available, Packet.TargetAvailability.Name);
+ break;
+
+ case ForwardPacket.PacketType.TargetAPIAvailability:
+ Events.FireTargetAPIAvailability(Packet.TargetAvailability.Available, Packet.TargetAvailability.Name);
+ break;
+
+ // Misc
+ case ForwardPacket.PacketType.DBTouched:
+ Events.FireDBTouched();
+ break;
}
}
}
diff --git a/Windows/Libraries/OrbisLib2/Common/Helpers/Helper.cs b/Windows/Libraries/OrbisLib2/Common/Helpers/Helper.cs
index faa8324..5f40366 100644
--- a/Windows/Libraries/OrbisLib2/Common/Helpers/Helper.cs
+++ b/Windows/Libraries/OrbisLib2/Common/Helpers/Helper.cs
@@ -99,7 +99,7 @@ namespace OrbisLib2.Common.Helpers
///
public static bool EasyConnect(this Socket s, string IPAddress, int Port, int TimeOut)
{
- s.ReceiveTimeout = s.SendTimeout = TimeOut;
+ s.ReceiveTimeout = s.SendTimeout = TimeOut * 1000;
var result = s.BeginConnect(IPAddress, Port, null, null);
result.AsyncWaitHandle.WaitOne(3000, true);
diff --git a/Windows/Libraries/OrbisLib2/GlobalSuppressions.cs b/Windows/Libraries/OrbisLib2/GlobalSuppressions.cs
new file mode 100644
index 0000000..f744dd9
--- /dev/null
+++ b/Windows/Libraries/OrbisLib2/GlobalSuppressions.cs
@@ -0,0 +1,8 @@
+// This file is used by Code Analysis to maintain SuppressMessage
+// attributes that are applied to this project.
+// Project-level suppressions either have no target or are given
+// a specific target and scoped to a namespace, type, member, etc.
+
+using System.Diagnostics.CodeAnalysis;
+
+[assembly: SuppressMessage("Interoperability", "CA1416:Validate platform compatibility", Justification = "", Scope = "member", Target = "~M:OrbisLib2.Common.Dispatcher.DispatcherClient.Subscribe")]
diff --git a/Windows/Libraries/OrbisLib2/OrbisLib2.csproj b/Windows/Libraries/OrbisLib2/OrbisLib2.csproj
index dc4fee4..605013e 100644
--- a/Windows/Libraries/OrbisLib2/OrbisLib2.csproj
+++ b/Windows/Libraries/OrbisLib2/OrbisLib2.csproj
@@ -12,6 +12,7 @@
+
diff --git a/Windows/Libraries/OrbisLib2/Targets/Application.cs b/Windows/Libraries/OrbisLib2/Targets/Application.cs
index ab6188a..1b87403 100644
--- a/Windows/Libraries/OrbisLib2/Targets/Application.cs
+++ b/Windows/Libraries/OrbisLib2/Targets/Application.cs
@@ -23,7 +23,7 @@ namespace OrbisLib2.Targets
{
var AppList = new List();
- var result = API.SendCommand(Target, 5000, APICommands.API_APPS_GET_LIST, (Socket Sock, APIResults Result) =>
+ var result = API.SendCommand(Target, 5, APICommands.API_APPS_GET_LIST, (Socket Sock, APIResults Result) =>
{
// Get the number of apps installed.
int Count = Sock.RecvInt32();
@@ -71,7 +71,7 @@ namespace OrbisLib2.Targets
}
var resultBuffer = new byte[200];
- var result = API.SendCommand(Target, 5000, APICommands.API_APPS_GET_INFO_STR, (Socket Sock, APIResults Result) =>
+ var result = API.SendCommand(Target, 5, APICommands.API_APPS_GET_INFO_STR, (Socket Sock, APIResults Result) =>
{
// Send the titleId of the app.
Sock.Send(Encoding.ASCII.GetBytes(TitleId.PadRight(10, '\0')).Take(10).ToArray());
@@ -94,7 +94,7 @@ namespace OrbisLib2.Targets
}
AppState result = AppState.STATE_ERROR;
- API.SendCommand(Target, 5000, APICommands.API_APPS_STATUS, (Socket Sock, APIResults Result) =>
+ API.SendCommand(Target, 5, APICommands.API_APPS_STATUS, (Socket Sock, APIResults Result) =>
{
// Send the titleId of the app.
var bytes = Encoding.ASCII.GetBytes(TitleId.PadRight(10, '\0')).Take(10).ToArray();
@@ -116,7 +116,7 @@ namespace OrbisLib2.Targets
}
int result = 0;
- API.SendCommand(Target, 5000, APICommands.APP_START, (Socket Sock, APIResults Result) =>
+ API.SendCommand(Target, 5, APICommands.API_APPS_START, (Socket Sock, APIResults Result) =>
{
// Send the titleId of the app.
var bytes = Encoding.ASCII.GetBytes(TitleId.PadRight(10, '\0')).Take(10).ToArray();
@@ -138,7 +138,7 @@ namespace OrbisLib2.Targets
}
int result = 0;
- API.SendCommand(Target, 5000, APICommands.API_APPS_STOP, (Socket Sock, APIResults Result) =>
+ API.SendCommand(Target, 5, APICommands.API_APPS_STOP, (Socket Sock, APIResults Result) =>
{
// Send the titleId of the app.
var bytes = Encoding.ASCII.GetBytes(TitleId.PadRight(10, '\0')).Take(10).ToArray();
@@ -160,7 +160,7 @@ namespace OrbisLib2.Targets
}
int result = 0;
- API.SendCommand(Target, 5000, APICommands.API_APPS_SUSPEND, (Socket Sock, APIResults Result) =>
+ API.SendCommand(Target, 5, APICommands.API_APPS_SUSPEND, (Socket Sock, APIResults Result) =>
{
// Send the titleId of the app.
var bytes = Encoding.ASCII.GetBytes(TitleId.PadRight(10, '\0')).Take(10).ToArray();
@@ -182,7 +182,7 @@ namespace OrbisLib2.Targets
}
int result = 0;
- API.SendCommand(Target, 5000, APICommands.API_APPS_RESUME, (Socket Sock, APIResults Result) =>
+ API.SendCommand(Target, 5, APICommands.API_APPS_RESUME, (Socket Sock, APIResults Result) =>
{
// Send the titleId of the app.
var bytes = Encoding.ASCII.GetBytes(TitleId.PadRight(10, '\0')).Take(10).ToArray();
diff --git a/Windows/Libraries/OrbisLib2/Targets/Target.cs b/Windows/Libraries/OrbisLib2/Targets/Target.cs
index a67236f..de7d1af 100644
--- a/Windows/Libraries/OrbisLib2/Targets/Target.cs
+++ b/Windows/Libraries/OrbisLib2/Targets/Target.cs
@@ -12,7 +12,20 @@ namespace OrbisLib2.Targets
{
public class Target
{
- private SavedTarget _SavedTarget;
+ private int _SavedTargetId = 0;
+
+ public SavedTarget SavedTarget
+ {
+ get
+ {
+ var savedTarget = SavedTarget.FindTarget(x => x.Id == _SavedTargetId);
+
+ if (savedTarget == null)
+ savedTarget = new SavedTarget();
+
+ return savedTarget;
+ }
+ }
///
/// Weather or not this is our default target to be selected on start up.
@@ -21,12 +34,7 @@ namespace OrbisLib2.Targets
{
get
{
- return _SavedTarget.IsDefault;
- }
- set
- {
- _SavedTarget.IsDefault = value;
- _SavedTarget.Save();
+ return SavedTarget.IsDefault;
}
}
@@ -37,12 +45,7 @@ namespace OrbisLib2.Targets
{
get
{
- return _SavedTarget.Name;
- }
- set
- {
- _SavedTarget.Name = value;
- _SavedTarget.Save();
+ return SavedTarget.Name;
}
}
@@ -53,12 +56,7 @@ namespace OrbisLib2.Targets
{
get
{
- return _SavedTarget.IPAddress;
- }
- set
- {
- _SavedTarget.IPAddress = value;
- _SavedTarget.Save();
+ return SavedTarget.IPAddress;
}
}
@@ -69,20 +67,16 @@ namespace OrbisLib2.Targets
{
get
{
- return _SavedTarget.PayloadPort;
- }
- set
- {
- _SavedTarget.PayloadPort = value;
- _SavedTarget.Save();
+ return SavedTarget.PayloadPort;
}
}
+
public TargetInfo Info
{
get
{
- return _SavedTarget.Info;
+ return SavedTarget.Info;
}
}
@@ -95,7 +89,7 @@ namespace OrbisLib2.Targets
public Target(SavedTarget SavedTarget)
{
- _SavedTarget = SavedTarget;
+ _SavedTargetId = SavedTarget.Id;
Events = new TargetEvents(this);
// Debug = new Debug(this);
@@ -105,25 +99,31 @@ namespace OrbisLib2.Targets
Application = new Application(this);
}
+ public Target Clone()
+ {
+ return new Target(SavedTarget.Clone());
+ }
+
public bool Shutdown()
{
- return API.SendCommand(this, 3000, APICommands.API_TARGET_SHUTDOWN) == APIResults.API_OK;
+ return API.SendCommand(this, 5, APICommands.API_TARGET_SHUTDOWN) == APIResults.API_OK;
}
public bool Reboot()
{
- return API.SendCommand(this, 3000, APICommands.API_TARGET_REBOOT) == APIResults.API_OK;
+ return API.SendCommand(this, 5, APICommands.API_TARGET_REBOOT) == APIResults.API_OK;
}
public bool Suspend()
{
- return API.SendCommand(this, 3000, APICommands.API_TARGET_RESTMODE) == APIResults.API_OK;
+ return API.SendCommand(this, 5, APICommands.API_TARGET_RESTMODE) == APIResults.API_OK;
}
public bool Notify(string Message)
{
- var result = API.SendCommand(this, 3000, APICommands.API_TARGET_NOTIFY, (Socket Sock, APIResults Result) =>
+ var result = API.SendCommand(this, 5, APICommands.API_TARGET_NOTIFY, (Socket Sock, APIResults Result) =>
{
+ Console.WriteLine($"Message: {Message}");
Result = API.SendNextPacket(Sock, new TargetNotifyPacket() { Message = Message });
});
@@ -132,7 +132,7 @@ namespace OrbisLib2.Targets
public bool Notify(string IconURI, string Message)
{
- var result = API.SendCommand(this, 3000, APICommands.API_TARGET_NOTIFY, (Socket Sock, APIResults Result) =>
+ var result = API.SendCommand(this, 5, APICommands.API_TARGET_NOTIFY, (Socket Sock, APIResults Result) =>
{
Result = API.SendNextPacket(Sock, new TargetNotifyPacket() { IconURI = IconURI, Message = Message });
});
@@ -142,7 +142,7 @@ namespace OrbisLib2.Targets
public bool Buzzer(BuzzerType Type)
{
- var result = API.SendCommand(this, 3000, APICommands.API_TARGET_BUZZER, (Socket Sock, APIResults Result) =>
+ var result = API.SendCommand(this, 5, APICommands.API_TARGET_BUZZER, (Socket Sock, APIResults Result) =>
{
Result = API.SendInt32(Sock, (int)Type);
});
@@ -152,7 +152,7 @@ namespace OrbisLib2.Targets
public bool SetLED(ConsoleLEDColours Colour)
{
- var result = API.SendCommand(this, 3000, APICommands.API_TARGET_SET_LED, (Socket Sock, APIResults Result) =>
+ var result = API.SendCommand(this, 5, APICommands.API_TARGET_SET_LED, (Socket Sock, APIResults Result) =>
{
Result = API.SendInt32(Sock, (int)Colour);
});
@@ -162,7 +162,7 @@ namespace OrbisLib2.Targets
public bool SetSettings(bool ShowDebugTitleIdLabel, bool ShowDevkitPanel, bool ShowDebugSettings, bool ShowAppHome)
{
- var result = API.SendCommand(this, 3000, APICommands.API_TARGET_SET_SETTINGS, (Socket Sock, APIResults Result) =>
+ var result = API.SendCommand(this, 5, APICommands.API_TARGET_SET_SETTINGS, (Socket Sock, APIResults Result) =>
{
Result = API.SendNextPacket(Sock, new TargetSettingsPacket()
{
diff --git a/Windows/Libraries/OrbisLib2/Targets/TargetManager.cs b/Windows/Libraries/OrbisLib2/Targets/TargetManager.cs
index c4df7b1..5023315 100644
--- a/Windows/Libraries/OrbisLib2/Targets/TargetManager.cs
+++ b/Windows/Libraries/OrbisLib2/Targets/TargetManager.cs
@@ -43,7 +43,7 @@ namespace OrbisLib2.Targets
get
{
// Set initially as the default target.
- if (SelectedTarget == null)
+ if (_SelectedTarget == null)
{
var defaultTarget = SavedTarget.FindDefaultTarget();
@@ -103,19 +103,19 @@ namespace OrbisLib2.Targets
///
/// Updates extended information about the Target. *Requires the Target to be on and the API running.
///
- /// The name of the target to update.
+ /// The identifier of the target to update.
/// Returns weather or not the action was successful or not.
- public static bool UpdateTargetInfo(string TargetName)
+ public static bool UpdateTargetInfo(SavedTarget savedTarget)
{
- Target? Target = GetTarget(TargetName);
+ var Target = GetTarget(savedTarget.Name);
if (Target == null)
{
- Console.WriteLine($"Couldn't Find Target \"{TargetName}\".");
+ Console.WriteLine($"Couldn't Find Target \"{savedTarget.Name}\".");
return false;
}
bool labdaReult = false;
- var result = API.SendCommand(Target, 3000, APICommands.API_TARGET_INFO, (Sock, Result) =>
+ var result = API.SendCommand(Target, 5, APICommands.API_TARGET_INFO, (Sock, Result) =>
{
var Packet = new TargetInfoPacket();
var RawPacket = new byte[Marshal.SizeOf(Packet)];
@@ -131,45 +131,45 @@ namespace OrbisLib2.Targets
if (Packet.ConsoleName == null || Packet.ConsoleName == string.Empty)
return;
- Target.Info.SDKVersion = $"{(Packet.SDKVersion >> 24 & 0xFF).ToString("X1")}.{(Packet.SDKVersion >> 12 & 0xFFF).ToString("X3")}.{(Packet.SDKVersion & 0xFFF).ToString("X3")}";
- Target.Info.SoftwareVersion = $"{(Packet.SoftwareVersion >> 24 & 0xFF).ToString("X1")}.{(Packet.SoftwareVersion >> 16 & 0xFF).ToString("X2")}";
- Target.Info.FactorySoftwareVersion = $"{(Packet.FactorySoftwareVersion >> 24 & 0xFF).ToString("X1")}.{(Packet.FactorySoftwareVersion >> 12 & 0xFFF).ToString("X3")}.{(Packet.FactorySoftwareVersion & 0xFFF).ToString("X3")}";
- Target.Info.CurrentTitleID = Packet.CurrentTitleID;
- Target.Info.ConsoleName = Packet.ConsoleName;
- Target.Info.MotherboardSerial = Packet.MotherboardSerial;
- Target.Info.Serial = Packet.Serial;
- Target.Info.Model = Packet.Model;
- Target.Info.MACAddressLAN = Packet.MACAddressLAN.ToUpper();
- Target.Info.MACAddressWIFI = Packet.MACAddressWIFI.ToUpper();
- Target.Info.UART = Packet.UART > 0;
- Target.Info.IDUMode = Packet.IDUMode > 0;
- Target.Info.IDPS = BitConverter.ToString(Packet.IDPS).Replace("-", string.Empty);
- Target.Info.PSID = BitConverter.ToString(Packet.PSID).Replace("-", string.Empty);
- Target.Info.ConsoleType = (ConsoleType)Packet.ConsoleType;
+ savedTarget.Info.SDKVersion = $"{(Packet.SDKVersion >> 24 & 0xFF).ToString("X1")}.{(Packet.SDKVersion >> 12 & 0xFFF).ToString("X3")}.{(Packet.SDKVersion & 0xFFF).ToString("X3")}";
+ savedTarget.Info.SoftwareVersion = $"{(Packet.SoftwareVersion >> 24 & 0xFF).ToString("X1")}.{(Packet.SoftwareVersion >> 16 & 0xFF).ToString("X2")}";
+ savedTarget.Info.FactorySoftwareVersion = $"{(Packet.FactorySoftwareVersion >> 24 & 0xFF).ToString("X1")}.{(Packet.FactorySoftwareVersion >> 12 & 0xFFF).ToString("X3")}.{(Packet.FactorySoftwareVersion & 0xFFF).ToString("X3")}";
+ savedTarget.Info.CurrentTitleID = Packet.CurrentTitleID;
+ savedTarget.Info.ConsoleName = Packet.ConsoleName;
+ savedTarget.Info.MotherboardSerial = Packet.MotherboardSerial;
+ savedTarget.Info.Serial = Packet.Serial;
+ savedTarget.Info.Model = Packet.Model;
+ savedTarget.Info.MACAddressLAN = Packet.MACAddressLAN.ToUpper();
+ savedTarget.Info.MACAddressWIFI = Packet.MACAddressWIFI.ToUpper();
+ savedTarget.Info.UART = Packet.UART > 0;
+ savedTarget.Info.IDUMode = Packet.IDUMode > 0;
+ savedTarget.Info.IDPS = BitConverter.ToString(Packet.IDPS).Replace("-", string.Empty);
+ savedTarget.Info.PSID = BitConverter.ToString(Packet.PSID).Replace("-", string.Empty);
+ savedTarget.Info.ConsoleType = (ConsoleType)Packet.ConsoleType;
// Debugging.
- Target.Info.IsAttached = Packet.Attached > 0;
+ savedTarget.Info.IsAttached = Packet.Attached > 0;
// TODO: Implement this into the API.
- Target.Info.CurrentProcessId = 0;// TODO: Update this to process Id Packet.CurrentProc;
+ savedTarget.Info.CurrentProcessId = 0;// TODO: Update this to process Id Packet.CurrentProc;
// Storage.
- Target.Info.HDDUsedSpace = (long)(Packet.TotalSpace - Packet.FreeSpace);
- Target.Info.HDDFreeSpace = (long)Packet.FreeSpace;
- Target.Info.HDDTotalSpace = (long)Packet.TotalSpace;
+ savedTarget.Info.HDDUsedSpace = (long)(Packet.TotalSpace - Packet.FreeSpace);
+ savedTarget.Info.HDDFreeSpace = (long)Packet.FreeSpace;
+ savedTarget.Info.HDDTotalSpace = (long)Packet.TotalSpace;
// Perf Stats.
- Target.Info.CPUTemp = Packet.CPUTemp;
- Target.Info.SOCTemp = Packet.SOCTemp;
- Target.Info.ThreadCount = Packet.ThreadCount;
- Target.Info.AverageCPUUsage = Packet.AverageCPUUsage;
- Target.Info.BusyCore = Packet.BusyCore;
- Target.Info.RamUsage = Packet.Ram.Used;
- Target.Info.VRamUsage = Packet.VRam.Used;
+ savedTarget.Info.CPUTemp = Packet.CPUTemp;
+ savedTarget.Info.SOCTemp = Packet.SOCTemp;
+ savedTarget.Info.ThreadCount = Packet.ThreadCount;
+ savedTarget.Info.AverageCPUUsage = Packet.AverageCPUUsage;
+ savedTarget.Info.BusyCore = Packet.BusyCore;
+ savedTarget.Info.RamUsage = Packet.Ram.Used;
+ savedTarget.Info.VRamUsage = Packet.VRam.Used;
labdaReult = true;
});
- return result == APIResults.API_OK && labdaReult && Target.Info.Save();
+ return result == APIResults.API_OK && labdaReult && savedTarget.Info.Save();
}
}
}
diff --git a/Windows/OrbisNeighborHood/Controls/AppPanel.xaml.cs b/Windows/OrbisNeighborHood/Controls/AppPanel.xaml.cs
index 7d26ac3..4a6161b 100644
--- a/Windows/OrbisNeighborHood/Controls/AppPanel.xaml.cs
+++ b/Windows/OrbisNeighborHood/Controls/AppPanel.xaml.cs
@@ -1,5 +1,6 @@
-using OrbisSuite;
-using OrbisSuite.Common;
+using OrbisLib2.Common.API;
+using OrbisLib2.General;
+using OrbisLib2.Targets;
using System;
using System.IO;
using System.Threading;
@@ -72,7 +73,7 @@ namespace OrbisNeighborHood.Controls
{
while (true)
{
- var currentTarget = OrbisLib.Instance.SelectedTarget;
+ var currentTarget = TargetManager.SelectedTarget;
// Get Current App status.
var newAppState = currentTarget.Application.GetAppState(App.TitleId);
@@ -133,7 +134,7 @@ namespace OrbisNeighborHood.Controls
{
Task.Run(() =>
{
- var currentTarget = OrbisLib.Instance.SelectedTarget;
+ var currentTarget = TargetManager.SelectedTarget;
if (AppState == AppState.STATE_RUNNING || AppState == AppState.STATE_SUSPENDED)
{
currentTarget.Application.Stop(App.TitleId);
@@ -149,7 +150,7 @@ namespace OrbisNeighborHood.Controls
{
Task.Run(() =>
{
- var currentTarget = OrbisLib.Instance.SelectedTarget;
+ var currentTarget = TargetManager.SelectedTarget;
if (AppState == AppState.STATE_SUSPENDED)
{
currentTarget.Application.Resume(App.TitleId);
diff --git a/Windows/OrbisNeighborHood/Controls/CurrentTargetDisplay.xaml.cs b/Windows/OrbisNeighborHood/Controls/CurrentTargetDisplay.xaml.cs
index 7e890bb..cc9bc90 100644
--- a/Windows/OrbisNeighborHood/Controls/CurrentTargetDisplay.xaml.cs
+++ b/Windows/OrbisNeighborHood/Controls/CurrentTargetDisplay.xaml.cs
@@ -1,21 +1,14 @@
-using OrbisSuite;
-using OrbisSuite.Common.Database;
+using OrbisLib2.Common.Database.Types;
+using OrbisLib2.General;
+using OrbisLib2.Targets;
using System;
-using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
-using System.Text;
using System.Text.RegularExpressions;
-using System.Threading.Tasks;
-using System.Windows;
using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
namespace OrbisNeighborHood.Controls
{
@@ -28,8 +21,8 @@ namespace OrbisNeighborHood.Controls
{
InitializeComponent();
- OrbisLib.Instance.Events.DBTouched += Events_DBTouched;
- OrbisLib.Instance.Events.TargetStateChanged += Events_TargetStateChanged;
+ Events.DBTouched += Events_DBTouched;
+ Events.TargetStateChanged += Events_TargetStateChanged;
RefreshTarget();
}
@@ -45,11 +38,11 @@ namespace OrbisNeighborHood.Controls
private void RefreshTarget()
{
- var CurrentTarget = OrbisLib.Instance.SelectedTarget.Info;
+ var CurrentTarget = TargetManager.SelectedTarget;
if (CurrentTarget != null)
{
- switch (CurrentTarget.Details.Status)
+ switch (CurrentTarget.Info.Status)
{
case TargetStatusType.Offline:
CurrentTargetState.Fill = new SolidColorBrush(Color.FromRgb(255, 0, 0));
@@ -74,7 +67,7 @@ namespace OrbisNeighborHood.Controls
CurrentTargetName.Text = CurrentTarget.IsDefault ? $"★{CurrentTarget.Name}" : CurrentTarget.Name;
- if (CurrentTarget.Details.CurrentTitleID == null || !Regex.IsMatch(CurrentTarget.Details.CurrentTitleID, @"CUSA\d{5}"))
+ if (CurrentTarget.Info.CurrentTitleID == null || !Regex.IsMatch(CurrentTarget.Info.CurrentTitleID, @"CUSA\d{5}"))
{
CurrentTargetTitleName.Text = "Unknown Title";
CurrentTargetTitleId.Text = "-";
@@ -82,7 +75,7 @@ namespace OrbisNeighborHood.Controls
}
else
{
- var Title = new TMDB(CurrentTarget.Details.CurrentTitleID);
+ var Title = new TMDB(CurrentTarget.Info.CurrentTitleID);
Regex rgx = new Regex(@"[^0-9a-zA-Z +.:']");
CurrentTargetTitleName.Text = Title.Names.First();
CurrentTargetTitleId.Text = Title.NPTitleID;
@@ -94,11 +87,11 @@ namespace OrbisNeighborHood.Controls
private void CurrentTargetTitleImage_MouseDown(object sender, MouseButtonEventArgs e)
{
- var CurrentTarget = OrbisLib.Instance.SelectedTarget.Info;
+ var CurrentTarget = TargetManager.SelectedTarget;
- if (CurrentTarget != null && CurrentTarget.Details.CurrentTitleID != null && Regex.IsMatch(CurrentTarget.Details.CurrentTitleID, @"CUSA\d{5}"))
+ if (CurrentTarget != null && CurrentTarget.Info.CurrentTitleID != null && Regex.IsMatch(CurrentTarget.Info.CurrentTitleID, @"CUSA\d{5}"))
{
- var Title = new TMDB(CurrentTarget.Details.CurrentTitleID);
+ var Title = new TMDB(CurrentTarget.Info.CurrentTitleID);
var url = $"https://store.playstation.com/product/{Title.ContentID}/";
System.Diagnostics.Process.Start(new ProcessStartInfo
diff --git a/Windows/OrbisNeighborHood/Controls/NewTargetPanel.xaml.cs b/Windows/OrbisNeighborHood/Controls/NewTargetPanel.xaml.cs
index 10c2fe6..6db03e7 100644
--- a/Windows/OrbisNeighborHood/Controls/NewTargetPanel.xaml.cs
+++ b/Windows/OrbisNeighborHood/Controls/NewTargetPanel.xaml.cs
@@ -1,20 +1,8 @@
using OrbisNeighborHood.MVVM.ViewModel;
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
-using OrbisSuite;
-using OrbisSuite.Dialog;
namespace OrbisNeighborHood.Controls
{
diff --git a/Windows/OrbisNeighborHood/Controls/TargetPanel.xaml.cs b/Windows/OrbisNeighborHood/Controls/TargetPanel.xaml.cs
index 7f8c2f8..577da4a 100644
--- a/Windows/OrbisNeighborHood/Controls/TargetPanel.xaml.cs
+++ b/Windows/OrbisNeighborHood/Controls/TargetPanel.xaml.cs
@@ -1,24 +1,18 @@
using System;
using System.IO;
using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Text.RegularExpressions;
-using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
using Microsoft.Win32;
using OrbisNeighborHood.MVVM.ViewModel;
-using OrbisSuite;
-using OrbisSuite.Common.Database;
using SimpleUI.Controls;
+using OrbisLib2.Common.Database.Types;
+using OrbisLib2.Common.API;
+using OrbisLib2.Targets;
+using OrbisLib2.Common.Database;
namespace OrbisNeighborHood.Controls
{
@@ -36,24 +30,31 @@ namespace OrbisNeighborHood.Controls
{
InitializeComponent();
- _thisTarget = OrbisLib.Instance.Targets[TargetName];
- _thisTargetInfo = _thisTarget.Info;
+ _thisTarget = TargetManager.GetTarget(TargetName);
+ if(_thisTarget != null )
+ {
+ _thisTargetInfo = _thisTarget.Info;
- this.TargetName = _thisTarget.Info.Name;
- TargetStatus = _thisTarget.Info.Details.Status;
- ConsoleModel = _thisTarget.Info.Details.ModelType;
- IsDefault = _thisTarget.Info.IsDefault;
- FirmwareVersion = _thisTarget.Info.Details.SoftwareVersion;
- SDKVersion = _thisTarget.Info.Details.SDKVersion;
- IPAddress = _thisTarget.Info.IPAddress;
- ConsoleName = _thisTarget.Info.Details.ConsoleName;
- PayloadPort = _thisTarget.Info.PayloadPort.ToString();
+ this.TargetName = _thisTarget.Name;
+ TargetStatus = _thisTarget.Info.Status;
+ ConsoleModel = _thisTarget.Info.ModelType;
+ IsDefault = _thisTarget.IsDefault;
+ FirmwareVersion = _thisTarget.Info.SoftwareVersion;
+ SDKVersion = _thisTarget.Info.SDKVersion;
+ IPAddress = _thisTarget.IPAddress;
+ ConsoleName = _thisTarget.Info.ConsoleName;
+ PayloadPort = _thisTarget.PayloadPort.ToString();
- LocateTarget.IsEnabled = _thisTarget.Info.Details.IsAPIAvailable;
- SendPayload.IsEnabled = _thisTarget.Info.Details.IsAvailable;
- RestartTarget.IsEnabled = _thisTarget.Info.Details.IsAPIAvailable;
- ShutdownTarget.IsEnabled = _thisTarget.Info.Details.IsAPIAvailable;
- SuspendTarget.IsEnabled = _thisTarget.Info.Details.IsAPIAvailable;
+ LocateTarget.IsEnabled = _thisTarget.Info.IsAPIAvailable;
+ SendPayload.IsEnabled = _thisTarget.Info.IsAvailable;
+ RestartTarget.IsEnabled = _thisTarget.Info.IsAPIAvailable;
+ ShutdownTarget.IsEnabled = _thisTarget.Info.IsAPIAvailable;
+ SuspendTarget.IsEnabled = _thisTarget.Info.IsAPIAvailable;
+ }
+ else
+ {
+ throw new Exception("TargetPanel(): Target not found when it should have been!");
+ }
}
#region Properties
@@ -211,7 +212,7 @@ namespace OrbisNeighborHood.Controls
var result = SimpleMessageBox.ShowWarning(Window.GetWindow(this), "Are you sure you want to delete this target?", "Delete this Target?", SimpleUI.SimpleMessageBoxButton.YesNo);
if(result == SimpleUI.SimpleMessageBoxResult.Yes)
{
- _thisTargetInfo.Remove();
+ TargetManager.DeleteTarget(_thisTarget.Name);
TargetChanged?.Invoke(this, e);
}
}
@@ -222,7 +223,7 @@ namespace OrbisNeighborHood.Controls
{
var editTargetViewModel = MainViewModel.Instance.EditTargetVM;
editTargetViewModel.TargetChanged += EditTargetVM_TargetChanged;
- editTargetViewModel.CurrentTarget = _thisTargetInfo.Clone();
+ editTargetViewModel.CurrentTarget = _thisTarget.SavedTarget.Clone();
editTargetViewModel.CallingVM = MainViewModel.Instance.TargetVM;
MainViewModel.Instance.CurrentView = editTargetViewModel;
}
@@ -235,17 +236,18 @@ namespace OrbisNeighborHood.Controls
private void DefaultTargetElement_MouseDown(object sender, MouseButtonEventArgs e)
{
- if (!_thisTargetInfo.IsDefault)
+ var savedTarget = _thisTarget.SavedTarget;
+ if (!savedTarget.IsDefault)
{
- _thisTargetInfo.IsDefault = true;
- _thisTargetInfo.Save();
+ savedTarget.IsDefault = true;
+ savedTarget.Save();
TargetChanged?.Invoke(this, e);
}
}
private void LocateTarget_Click(object sender, RoutedEventArgs e)
{
- _thisTarget.Buzzer(OrbisSuite.Common.BuzzerType.RingThree);
+ _thisTarget.Buzzer(BuzzerType.RingThree);
}
private void SendPayload_Click(object sender, RoutedEventArgs e)
diff --git a/Windows/OrbisNeighborHood/MVVM/View/AppListView.xaml.cs b/Windows/OrbisNeighborHood/MVVM/View/AppListView.xaml.cs
index 7a3fac2..db5ed77 100644
--- a/Windows/OrbisNeighborHood/MVVM/View/AppListView.xaml.cs
+++ b/Windows/OrbisNeighborHood/MVVM/View/AppListView.xaml.cs
@@ -1,5 +1,4 @@
using OrbisNeighborHood.Controls;
-using OrbisSuite;
using System;
using System.Text.RegularExpressions;
using System.Windows;
@@ -7,8 +6,9 @@ using System.Windows.Controls;
using System.IO;
using System.Threading.Tasks;
using System.Collections.Generic;
-using System.Threading;
using System.Linq;
+using OrbisLib2.Targets;
+using OrbisLib2.General;
namespace OrbisNeighborHood.MVVM.View
{
@@ -50,8 +50,8 @@ namespace OrbisNeighborHood.MVVM.View
{
InitializeComponent();
- OrbisLib.Instance.Events.DBTouched += Events_DBTouched;
- OrbisLib.Instance.Events.TargetStateChanged += Events_TargetStateChanged;
+ Events.DBTouched += Events_DBTouched;
+ Events.TargetStateChanged += Events_TargetStateChanged;
// Refresh the info about the current target.
RefreshTargetInfo();
@@ -96,7 +96,7 @@ namespace OrbisNeighborHood.MVVM.View
private void RefreshTargetInfo()
{
- var CurrentTarget = OrbisLib.Instance.SelectedTarget.Info;
+ var CurrentTarget = TargetManager.SelectedTarget;
if (CurrentTarget != null)
{
@@ -112,7 +112,7 @@ namespace OrbisNeighborHood.MVVM.View
public void AddApp(string appCachePath, AppInfo App)
{
- var currentTarget = OrbisLib.Instance.SelectedTarget;
+ var currentTarget = TargetManager.SelectedTarget;
// Make sure the titleId format is correct. Helps weed out bad entries and folders.
if (!Regex.IsMatch(App.TitleId, @"[a-zA-Z]{4}\d{5}"))
@@ -144,7 +144,7 @@ namespace OrbisNeighborHood.MVVM.View
}
// Cache icon0.png for app if we have not already.
- if (!File.Exists(Path.Combine(currentAppPath, "icon0.png")) && !string.IsNullOrEmpty(App.MetaDataPath) && currentTarget.Info.Details.IsAvailable) //TODO: Maybe add a isFTPAvailable.
+ if (!File.Exists(Path.Combine(currentAppPath, "icon0.png")) && !string.IsNullOrEmpty(App.MetaDataPath) && currentTarget.Info.IsAvailable) //TODO: Maybe add a isFTPAvailable.
{
currentTarget.FTP.DownloadFile($"{App.MetaDataPath}/icon0.png", Path.Combine(currentAppPath, "icon0.png"));
}
@@ -173,11 +173,11 @@ namespace OrbisNeighborHood.MVVM.View
Dispatcher.Invoke(() => AppList.Items.Clear());
// Make sure we have a target we can pull the db from.
- if (OrbisLib.Instance.TargetManagement.TargetList == null)
+ if (TargetManager.Targets.Count <= 0)
return;
// Make sure the Target is online so we can pull the db.
- var currentTarget = OrbisLib.Instance.SelectedTarget;
+ var currentTarget = TargetManager.SelectedTarget;
if (currentTarget == null)
{
Console.WriteLine("No current target we can use to load apps.");
@@ -206,12 +206,12 @@ namespace OrbisNeighborHood.MVVM.View
try
{
// Make sure we have a target we can pull the db from.
- if (OrbisLib.Instance.TargetManagement.TargetList == null)
+ if (TargetManager.Targets.Count <= 0)
continue;
// Make sure the Target is online so we can pull the db.
- var currentTarget = OrbisLib.Instance.SelectedTarget;
- if (currentTarget == null || !currentTarget.Info.Details.IsAvailable)
+ var currentTarget = TargetManager.SelectedTarget;
+ if (currentTarget == null || !currentTarget.Info.IsAvailable)
{
continue;
}
diff --git a/Windows/OrbisNeighborHood/MVVM/View/DashboardView.xaml.cs b/Windows/OrbisNeighborHood/MVVM/View/DashboardView.xaml.cs
index 0b17526..7798dca 100644
--- a/Windows/OrbisNeighborHood/MVVM/View/DashboardView.xaml.cs
+++ b/Windows/OrbisNeighborHood/MVVM/View/DashboardView.xaml.cs
@@ -1,23 +1,14 @@
-using OrbisNeighborHood.MVVM.ViewModel;
-using OrbisSuite;
-using OrbisSuite.Common.Database;
+using OrbisLib2.Common.Database.Types;
+using OrbisLib2.General;
+using OrbisLib2.Targets;
+using OrbisNeighborHood.MVVM.ViewModel;
using System;
-using System.Collections.Generic;
-using System.IO;
using System.Linq;
-using System.Reflection;
-using System.Text;
using System.Text.RegularExpressions;
-using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
namespace OrbisNeighborHood.MVVM.View
{
@@ -32,8 +23,8 @@ namespace OrbisNeighborHood.MVVM.View
{
InitializeComponent();
- OrbisLib.Instance.Events.DBTouched += Events_DBTouched;
- OrbisLib.Instance.Events.TargetStateChanged += Events_TargetStateChanged;
+ Events.DBTouched += Events_DBTouched;
+ Events.TargetStateChanged += Events_TargetStateChanged;
RefreshTargetInfo();
}
@@ -196,39 +187,39 @@ namespace OrbisNeighborHood.MVVM.View
private void RefreshTargetInfo()
{
- var CurrentTarget = OrbisLib.Instance.SelectedTarget.Info;
+ var CurrentTarget = TargetManager.SelectedTarget;
if (CurrentTarget != null)
{
TitleString = CurrentTarget.IsDefault ? $"★{CurrentTarget.Name}" : CurrentTarget.Name;
TargetName = CurrentTarget.IsDefault ? $"★{CurrentTarget.Name}" : CurrentTarget.Name;
- TargetStatus = CurrentTarget.Details.Status;
- FirmwareVersion = CurrentTarget.Details.SoftwareVersion;
- SDKVersion = CurrentTarget.Details.SDKVersion;
+ TargetStatus = CurrentTarget.Info.Status;
+ FirmwareVersion = CurrentTarget.Info.SoftwareVersion;
+ SDKVersion = CurrentTarget.Info.SDKVersion;
IPAddress = CurrentTarget.IPAddress;
- ConsoleName = CurrentTarget.Details.ConsoleName;
+ ConsoleName = CurrentTarget.Info.ConsoleName;
PayloadPort = CurrentTarget.PayloadPort.ToString();
// Storage Stats.
- HDDFreeSpace = Utilities.BytesToString(CurrentTarget.Details.HDDFreeSpace);
- HDDUsedSpace = Utilities.BytesToString(CurrentTarget.Details.HDDUsedSpace);
- HDDTotalSpace = Utilities.BytesToString(CurrentTarget.Details.HDDTotalSpace);
+ HDDFreeSpace = Utilities.BytesToString(CurrentTarget.Info.HDDFreeSpace);
+ HDDUsedSpace = Utilities.BytesToString(CurrentTarget.Info.HDDUsedSpace);
+ HDDTotalSpace = Utilities.BytesToString(CurrentTarget.Info.HDDTotalSpace);
- if (CurrentTarget.Details.HDDTotalSpace != 0)
- StorageUsagePercentage = (int)(((double)CurrentTarget.Details.HDDUsedSpace / (double)CurrentTarget.Details.HDDTotalSpace) * 100.0);
+ if (CurrentTarget.Info.HDDTotalSpace != 0)
+ StorageUsagePercentage = (int)(((double)CurrentTarget.Info.HDDUsedSpace / (double)CurrentTarget.Info.HDDTotalSpace) * 100.0);
else
StorageUsagePercentage = 0;
// System Stats.
- CPUTemp = $"{CurrentTarget.Details.CPUTemp} °C";
- SOCTemp = $"{CurrentTarget.Details.SOCTemp} °C";
- ThreadCount = CurrentTarget.Details.ThreadCount;
- AverageCPUUsage = CurrentTarget.Details.AverageCPUUsage;
- TopCore = $"Core {CurrentTarget.Details.BusyCore}";
- RamUsage = $"{CurrentTarget.Details.RamUsage} MB";
- VRamUsage = $"{CurrentTarget.Details.VRamUsage} MB";
+ CPUTemp = $"{CurrentTarget.Info.CPUTemp} °C";
+ SOCTemp = $"{CurrentTarget.Info.SOCTemp} °C";
+ ThreadCount = CurrentTarget.Info.ThreadCount;
+ AverageCPUUsage = CurrentTarget.Info.AverageCPUUsage;
+ TopCore = $"Core {CurrentTarget.Info.BusyCore}";
+ RamUsage = $"{CurrentTarget.Info.RamUsage} MB";
+ VRamUsage = $"{CurrentTarget.Info.VRamUsage} MB";
- if (CurrentTarget.Details.CurrentTitleID == null || !Regex.IsMatch(CurrentTarget.Details.CurrentTitleID, @"CUSA\d{5}"))
+ if (CurrentTarget.Info.CurrentTitleID == null || !Regex.IsMatch(CurrentTarget.Info.CurrentTitleID, @"CUSA\d{5}"))
{
TitleName = "Unknown Title";
TitleId = "-";
@@ -237,7 +228,7 @@ namespace OrbisNeighborHood.MVVM.View
}
else
{
- var Title = new TMDB(CurrentTarget.Details.CurrentTitleID);
+ var Title = new TMDB(CurrentTarget.Info.CurrentTitleID);
Regex rgx = new Regex(@"[^0-9a-zA-Z +.:']");
TitleName = Title.Names.First();
TitleId = Title.NPTitleID;
@@ -254,12 +245,12 @@ namespace OrbisNeighborHood.MVVM.View
private void EditButton_Click(object sender, RoutedEventArgs e)
{
- var CurrentTarget = OrbisLib.Instance.SelectedTarget.Info;
+ var CurrentTarget = TargetManager.SelectedTarget;
if (MainViewModel.Instance != null)
{
var editTargetViewModel = MainViewModel.Instance.EditTargetVM;
- editTargetViewModel.CurrentTarget = CurrentTarget.Clone();
+ editTargetViewModel.CurrentTarget = CurrentTarget.SavedTarget.Clone();
editTargetViewModel.CallingVM = MainViewModel.Instance.DashboardHomeVM;
MainViewModel.Instance.CurrentView = editTargetViewModel;
}
diff --git a/Windows/OrbisNeighborHood/MVVM/View/SettingsView.xaml.cs b/Windows/OrbisNeighborHood/MVVM/View/SettingsView.xaml.cs
index c6d985d..d57b857 100644
--- a/Windows/OrbisNeighborHood/MVVM/View/SettingsView.xaml.cs
+++ b/Windows/OrbisNeighborHood/MVVM/View/SettingsView.xaml.cs
@@ -1,15 +1,12 @@
-using OrbisSuite.Common.Database;
-using SimpleUI.Skins;
+using SimpleUI.Skins;
using System;
-using System.Collections.Generic;
using System.IO;
-using System.Linq;
using System.Reflection;
-using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Text.RegularExpressions;
+using OrbisLib2.Common.Database;
namespace OrbisNeighborHood.MVVM.View
{
diff --git a/Windows/OrbisNeighborHood/MVVM/View/SubView/AddTargetView.xaml.cs b/Windows/OrbisNeighborHood/MVVM/View/SubView/AddTargetView.xaml.cs
index 1292aae..77fd8d6 100644
--- a/Windows/OrbisNeighborHood/MVVM/View/SubView/AddTargetView.xaml.cs
+++ b/Windows/OrbisNeighborHood/MVVM/View/SubView/AddTargetView.xaml.cs
@@ -1,23 +1,11 @@
-using OrbisNeighborHood.MVVM.ViewModel;
+using OrbisLib2.Common.Database;
+using OrbisNeighborHood.MVVM.ViewModel;
using OrbisNeighborHood.MVVM.ViewModel.SubView;
-using OrbisSuite.Common.Database;
using SimpleUI.Controls;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
using System.Text.RegularExpressions;
-using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Animation;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
namespace OrbisNeighborHood.MVVM.View.SubView
{
@@ -26,7 +14,7 @@ namespace OrbisNeighborHood.MVVM.View.SubView
///
public partial class AddTargetView : UserControl
{
- private TargetInfo _newTarget;
+ private SavedTarget _newTarget;
#region Constructor
@@ -34,7 +22,7 @@ namespace OrbisNeighborHood.MVVM.View.SubView
{
InitializeComponent();
- _newTarget = new TargetInfo();
+ _newTarget = new SavedTarget();
}
#endregion
@@ -103,50 +91,50 @@ namespace OrbisNeighborHood.MVVM.View.SubView
private void ShowTitleIdLabels_Loaded(object sender, RoutedEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- Switch.IsToggled = _newTarget.Details.ShowTitleId;
+ Switch.IsToggled = _newTarget.Info.ShowTitleId;
}
private void ShowTitleIdLabels_MouseDown(object sender, MouseButtonEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- _newTarget.Details.ShowTitleId = Switch.IsToggled;
+ _newTarget.Info.ShowTitleId = Switch.IsToggled;
}
private void ShowDevkitPanel_Loaded(object sender, RoutedEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- Switch.IsToggled = _newTarget.Details.ShowDevkitPanel;
+ Switch.IsToggled = _newTarget.Info.ShowDevkitPanel;
}
private void ShowDevkitPanel_MouseDown(object sender, MouseButtonEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- _newTarget.Details.ShowDevkitPanel = Switch.IsToggled;
+ _newTarget.Info.ShowDevkitPanel = Switch.IsToggled;
}
private void ShowToolboxShortcut_Loaded(object sender, RoutedEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- Switch.IsToggled = _newTarget.Details.ShowToolboxShortcut;
+ Switch.IsToggled = _newTarget.Info.ShowToolboxShortcut;
}
private void ShowToolboxShortcut_MouseDown(object sender, MouseButtonEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- _newTarget.Details.ShowToolboxShortcut = Switch.IsToggled;
+ _newTarget.Info.ShowToolboxShortcut = Switch.IsToggled;
}
private void ShowAppHome_Loaded(object sender, RoutedEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- Switch.IsToggled = _newTarget.Details.ShowAppHome;
+ Switch.IsToggled = _newTarget.Info.ShowAppHome;
}
private void ShowAppHome_MouseDown(object sender, MouseButtonEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- _newTarget.Details.ShowAppHome = Switch.IsToggled;
+ _newTarget.Info.ShowAppHome = Switch.IsToggled;
}
#endregion
diff --git a/Windows/OrbisNeighborHood/MVVM/View/SubView/EditTargetView.xaml.cs b/Windows/OrbisNeighborHood/MVVM/View/SubView/EditTargetView.xaml.cs
index fb72c65..73f94e5 100644
--- a/Windows/OrbisNeighborHood/MVVM/View/SubView/EditTargetView.xaml.cs
+++ b/Windows/OrbisNeighborHood/MVVM/View/SubView/EditTargetView.xaml.cs
@@ -1,23 +1,12 @@
-using OrbisNeighborHood.MVVM.ViewModel;
+using OrbisLib2.Common.Database;
+using OrbisLib2.Targets;
+using OrbisNeighborHood.MVVM.ViewModel;
using OrbisNeighborHood.MVVM.ViewModel.SubView;
-using OrbisSuite;
-using OrbisSuite.Common.Database;
using SimpleUI.Controls;
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
using System.Text.RegularExpressions;
-using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
namespace OrbisNeighborHood.MVVM.View.SubView
{
@@ -26,11 +15,10 @@ namespace OrbisNeighborHood.MVVM.View.SubView
///
public partial class EditTargetView : UserControl
{
- private TargetInfo _thisTarget;
+ private SavedTarget _thisTarget;
public EditTargetView()
{
InitializeComponent();
- _thisTarget = new TargetInfo();
}
#region Target Info
@@ -97,62 +85,74 @@ namespace OrbisNeighborHood.MVVM.View.SubView
private void ShowTitleIdLabels_Loaded(object sender, RoutedEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- Switch.IsToggled = _thisTarget.Details.ShowTitleId;
+ Switch.IsToggled = _thisTarget.Info.ShowTitleId;
}
private void ShowTitleIdLabels_MouseDown(object sender, MouseButtonEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- _thisTarget.Details.ShowTitleId = Switch.IsToggled;
+ _thisTarget.Info.ShowTitleId = Switch.IsToggled;
- var currentTarget = OrbisLib.Instance.Targets[_thisTarget.Name];
- currentTarget.SetSettings(_thisTarget.Details.ShowTitleId, _thisTarget.Details.ShowDevkitPanel, _thisTarget.Details.ShowToolboxShortcut, _thisTarget.Details.ShowAppHome);
+ var currentTarget = TargetManager.GetTarget(_thisTarget.Name);
+ if(currentTarget != null)
+ {
+ currentTarget.SetSettings(_thisTarget.Info.ShowTitleId, _thisTarget.Info.ShowDevkitPanel, _thisTarget.Info.ShowToolboxShortcut, _thisTarget.Info.ShowAppHome);
+ }
}
private void ShowDevkitPanel_Loaded(object sender, RoutedEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- Switch.IsToggled = _thisTarget.Details.ShowDevkitPanel;
+ Switch.IsToggled = _thisTarget.Info.ShowDevkitPanel;
}
private void ShowDevkitPanel_MouseDown(object sender, MouseButtonEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- _thisTarget.Details.ShowDevkitPanel = Switch.IsToggled;
+ _thisTarget.Info.ShowDevkitPanel = Switch.IsToggled;
- var currentTarget = OrbisLib.Instance.Targets[_thisTarget.Name];
- currentTarget.SetSettings(_thisTarget.Details.ShowTitleId, _thisTarget.Details.ShowDevkitPanel, _thisTarget.Details.ShowToolboxShortcut, _thisTarget.Details.ShowAppHome);
+ var currentTarget = TargetManager.GetTarget(_thisTarget.Name);
+ if (currentTarget != null)
+ {
+ currentTarget.SetSettings(_thisTarget.Info.ShowTitleId, _thisTarget.Info.ShowDevkitPanel, _thisTarget.Info.ShowToolboxShortcut, _thisTarget.Info.ShowAppHome);
+ }
}
private void ShowToolboxShortcut_Loaded(object sender, RoutedEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- Switch.IsToggled = _thisTarget.Details.ShowToolboxShortcut;
+ Switch.IsToggled = _thisTarget.Info.ShowToolboxShortcut;
}
private void ShowToolboxShortcut_MouseDown(object sender, MouseButtonEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- _thisTarget.Details.ShowToolboxShortcut = Switch.IsToggled;
+ _thisTarget.Info.ShowToolboxShortcut = Switch.IsToggled;
- var currentTarget = OrbisLib.Instance.Targets[_thisTarget.Name];
- currentTarget.SetSettings(_thisTarget.Details.ShowTitleId, _thisTarget.Details.ShowDevkitPanel, _thisTarget.Details.ShowToolboxShortcut, _thisTarget.Details.ShowAppHome);
+ var currentTarget = TargetManager.GetTarget(_thisTarget.Name);
+ if (currentTarget != null)
+ {
+ currentTarget.SetSettings(_thisTarget.Info.ShowTitleId, _thisTarget.Info.ShowDevkitPanel, _thisTarget.Info.ShowToolboxShortcut, _thisTarget.Info.ShowAppHome);
+ }
}
private void ShowAppHome_Loaded(object sender, RoutedEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- Switch.IsToggled = _thisTarget.Details.ShowAppHome;
+ Switch.IsToggled = _thisTarget.Info.ShowAppHome;
}
private void ShowAppHome_MouseDown(object sender, MouseButtonEventArgs e)
{
var Switch = (SimpleSwitch)sender;
- _thisTarget.Details.ShowAppHome = Switch.IsToggled;
+ _thisTarget.Info.ShowAppHome = Switch.IsToggled;
- var currentTarget = OrbisLib.Instance.Targets[_thisTarget.Name];
- currentTarget.SetSettings(_thisTarget.Details.ShowTitleId, _thisTarget.Details.ShowDevkitPanel, _thisTarget.Details.ShowToolboxShortcut, _thisTarget.Details.ShowAppHome);
+ var currentTarget = TargetManager.GetTarget(_thisTarget.Name);
+ if (currentTarget != null)
+ {
+ currentTarget.SetSettings(_thisTarget.Info.ShowTitleId, _thisTarget.Info.ShowDevkitPanel, _thisTarget.Info.ShowToolboxShortcut, _thisTarget.Info.ShowAppHome);
+ }
}
#endregion
@@ -220,7 +220,8 @@ namespace OrbisNeighborHood.MVVM.View.SubView
var dc = ((EditTargetViewModel)DataContext);
if (dc == null || dc.CurrentTarget == null)
{
- _thisTarget = new TargetInfo();
+ // Abort
+ MainViewModel.Instance.CurrentView = MainViewModel.Instance.DashboardHomeVM;
}
else
{
diff --git a/Windows/OrbisNeighborHood/MVVM/View/TargetView.xaml.cs b/Windows/OrbisNeighborHood/MVVM/View/TargetView.xaml.cs
index 2486b75..89b5bf3 100644
--- a/Windows/OrbisNeighborHood/MVVM/View/TargetView.xaml.cs
+++ b/Windows/OrbisNeighborHood/MVVM/View/TargetView.xaml.cs
@@ -1,7 +1,7 @@
using OrbisNeighborHood.Controls;
using System.Windows.Controls;
-using OrbisSuite;
-using System;
+using OrbisLib2.General;
+using OrbisLib2.Targets;
namespace OrbisNeighborHood.MVVM.View
{
@@ -17,8 +17,8 @@ namespace OrbisNeighborHood.MVVM.View
InitializeComponent();
RefreshTargets();
- OrbisLib.Instance.Events.DBTouched += Events_DBTouched;
- OrbisLib.Instance.Events.TargetStateChanged += Events_TargetStateChanged;
+ Events.DBTouched += Events_DBTouched;
+ Events.TargetStateChanged += Events_TargetStateChanged;
}
#endregion
@@ -46,15 +46,16 @@ namespace OrbisNeighborHood.MVVM.View
{
TargetList.Items.Clear();
- if (OrbisLib.Instance.TargetManagement.TargetList == null)
- return;
-
- foreach (var Target in OrbisLib.Instance.TargetManagement.TargetList)
+ if (TargetManager.Targets.Count > 0)
{
- var targetView = new TargetPanel(Target.Name);
- targetView.TargetChanged += Target_TargetChanged;
- TargetList.Items.Add(targetView);
+ foreach (var Target in TargetManager.Targets)
+ {
+ var targetView = new TargetPanel(Target.Name);
+ targetView.TargetChanged += Target_TargetChanged;
+ TargetList.Items.Add(targetView);
+ }
}
+
var newTargetView = new NewTargetPanel();
newTargetView.TargetChanged += Target_TargetChanged;
TargetList.Items.Add(newTargetView);
diff --git a/Windows/OrbisNeighborHood/MVVM/ViewModel/SubView/EditTargetViewModel.cs b/Windows/OrbisNeighborHood/MVVM/ViewModel/SubView/EditTargetViewModel.cs
index 18df1fe..107799a 100644
--- a/Windows/OrbisNeighborHood/MVVM/ViewModel/SubView/EditTargetViewModel.cs
+++ b/Windows/OrbisNeighborHood/MVVM/ViewModel/SubView/EditTargetViewModel.cs
@@ -1,10 +1,6 @@
-using OrbisNeighborHood.MVVM.View.SubView;
-using OrbisSuite.Common.Database;
+using OrbisLib2.Common.Database;
+using OrbisLib2.Targets;
using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
using System.Windows;
namespace OrbisNeighborHood.MVVM.ViewModel.SubView
@@ -29,7 +25,7 @@ namespace OrbisNeighborHood.MVVM.ViewModel.SubView
#region Dependency Properties
- public TargetInfo? CurrentTarget { get; set; }
+ public SavedTarget CurrentTarget { get; set; }
public object CallingVM { get; set; }
diff --git a/Windows/OrbisNeighborHood/NeighborHood.xaml.cs b/Windows/OrbisNeighborHood/NeighborHood.xaml.cs
index c4ec235..0b719af 100644
--- a/Windows/OrbisNeighborHood/NeighborHood.xaml.cs
+++ b/Windows/OrbisNeighborHood/NeighborHood.xaml.cs
@@ -1,22 +1,5 @@
-using OrbisSuite;
+using OrbisLib2.Common.Dispatcher;
using SimpleUI.Controls;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows;
-using System.Windows.Controls;
-using System.Windows.Data;
-using System.Windows.Documents;
-using System.Windows.Input;
-using System.Windows.Media;
-using System.Windows.Media.Imaging;
-using System.Windows.Navigation;
-using System.Windows.Shapes;
-using OrbisSuite.Common.Database;
namespace OrbisNeighborHood
{
@@ -28,6 +11,7 @@ namespace OrbisNeighborHood
public NeighborHood()
{
InitializeComponent();
+ DispatcherClient.Subscribe();
}
}
}
diff --git a/Windows/OrbisNeighborHood/OrbisNeighborHood.csproj b/Windows/OrbisNeighborHood/OrbisNeighborHood.csproj
index 1433a9e..31677f1 100644
--- a/Windows/OrbisNeighborHood/OrbisNeighborHood.csproj
+++ b/Windows/OrbisNeighborHood/OrbisNeighborHood.csproj
@@ -173,7 +173,7 @@
-
+
diff --git a/Windows/OrbisNeighborHood/Resources/BuildNumber.txt b/Windows/OrbisNeighborHood/Resources/BuildNumber.txt
index b2a5d94..b6ac305 100644
--- a/Windows/OrbisNeighborHood/Resources/BuildNumber.txt
+++ b/Windows/OrbisNeighborHood/Resources/BuildNumber.txt
@@ -1 +1 @@
-1991
+2047
diff --git a/Windows/OrbisNeighborHood/Resources/BuildString.txt b/Windows/OrbisNeighborHood/Resources/BuildString.txt
index 4dba243..f585909 100644
--- a/Windows/OrbisNeighborHood/Resources/BuildString.txt
+++ b/Windows/OrbisNeighborHood/Resources/BuildString.txt
@@ -1 +1 @@
-Version 3.0.1991 Debug Build Thursday December 22 2022 9:17 PM
+Version 3.0.2047 Debug Build Friday December 23 2022 10:35 AM
diff --git a/Windows/OrbisSuiteService/OrbisSuiteService.csproj b/Windows/OrbisSuiteService/OrbisSuiteService.csproj
index 88fefc5..0072810 100644
--- a/Windows/OrbisSuiteService/OrbisSuiteService.csproj
+++ b/Windows/OrbisSuiteService/OrbisSuiteService.csproj
@@ -4,7 +4,7 @@
Exe
net6.0-windows
enable
- enable
+ annotations
OrbisTaskbarApp.ico
@@ -14,10 +14,11 @@
+
-
+
diff --git a/Windows/OrbisSuiteService/Service/ClientInstance.cs b/Windows/OrbisSuiteService/Service/ClientInstance.cs
deleted file mode 100644
index 9896370..0000000
--- a/Windows/OrbisSuiteService/Service/ClientInstance.cs
+++ /dev/null
@@ -1,71 +0,0 @@
-using OrbisSuite.Common;
-using System.Net.Sockets;
-
-namespace OrbisSuiteService.Service
-{
- class ClientInstance
- {
- ///
- /// The port used to communicate with the client.
- ///
- public int Port
- {
- get;
- private set;
- }
-
- ///
- /// The last known name of the client.
- ///
- public string Name
- {
- get;
- private set;
- }
-
- ///
- /// The last time the client sent a heartbeat packet.
- ///
- public int LastUpdate { get; set; }
-
- ///
- ///
- ///
- /// Port of the client.
- /// Name of the client
- /// Set the last time we got a packet from the client.
- public ClientInstance(int Port, string Name, int LastUpdate)
- {
- this.Port = Port;
- this.Name = Name;
- this.LastUpdate = LastUpdate;
- }
-
- ///
- /// Sends a seralizable object to the client.
- ///
- /// A serializable object we would like to send.
- /// Returns if the data was sent or not.
- public bool SendObject(object obj)
- {
- try
- {
- var Sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
- if (Sock.EasyConnect("127.0.0.1", Port, 1000))
- {
- Sock.SendObject(obj);
-
- Sock.Close();
-
- return true;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod()?.Name}] Error: {ex.Message}");
- }
-
- return false;
- }
- }
-}
diff --git a/Windows/OrbisSuiteService/Service/DBWatcher.cs b/Windows/OrbisSuiteService/Service/DBWatcher.cs
index 29f1d0d..3f65eb6 100644
--- a/Windows/OrbisSuiteService/Service/DBWatcher.cs
+++ b/Windows/OrbisSuiteService/Service/DBWatcher.cs
@@ -1,4 +1,4 @@
-using OrbisSuite.Common;
+using OrbisLib2.Common;
namespace OrbisSuiteService.Service
{
diff --git a/Windows/OrbisSuiteService/Service/Dispatcher.cs b/Windows/OrbisSuiteService/Service/Dispatcher.cs
index b2d23b8..aa697c4 100644
--- a/Windows/OrbisSuiteService/Service/Dispatcher.cs
+++ b/Windows/OrbisSuiteService/Service/Dispatcher.cs
@@ -1,21 +1,13 @@
-using OrbisSuite.Common;
-using OrbisSuite.Common.Dispatcher;
-using OrbisSuite.Common.Database;
-using System.Net.Sockets;
+using TinyIpc.Messaging;
+using OrbisLib2.Common.Database;
+using OrbisLib2.Common.Dispatcher;
+using OrbisLib2.Common.Helpers;
namespace OrbisSuiteService.Service
{
public class Dispatcher
{
- private static readonly int _maxClients = 20;
- private readonly int _clientMax = Config.DispatcherClientPort + _maxClients;
- private List _clients = new List();
-
- private Listener _DispatcherListener = new Listener(Config.DispatcherPort);
- private Listener _EventListener = new Listener(Config.EventPort);
-
- private Task _HeartbeatTask;
- private CancellationToken _HeartbeatCancellationToken;
+ private TinyMessageBus _ServiceMessageBus;
private DBWatcher _DBWatcher = new DBWatcher();
private Settings _Settings = Settings.CreateInstance();
@@ -25,33 +17,18 @@ namespace OrbisSuiteService.Service
public Dispatcher()
{
- try
- {
- //Sets up dispatcher listener that will handle Client => Service requests.
- _DispatcherListener.SocketAccepted += _DispatcherListener_SocketAccepted;
- _DispatcherListener.Start();
+ _ServiceMessageBus = new TinyMessageBus("OrbisSuite");
- //Sets up Event Listener that will handle events from the Target Console => Service => All Clients.
- _EventListener.SocketAccepted += _EventListener_SocketAccepted;
- _EventListener.Start();
-
- //Starts up heartbeat task that will check for clients that have not gracefully shutdown and time them out.
- _HeartbeatTask = Task.Run(() => DoHeartbeat());
-
- //Helpers
- _DBWatcher.DBChanged += _DBWatcher_DBChanged;
- /*_SerialMonitor.NewSerialDataRecieved += _SerialMonitor_NewSerialDataRecieved;
- _SerialMonitor.Settings.PortName = "";
- _SerialMonitor.StartListening();*/
- _TargetWatcher = new TargetWatcher(this);
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod().Name}] Error: {ex.Message}");
- }
+ //Helpers
+ _DBWatcher.DBChanged += _DBWatcher_DBChanged;
+ /*_SerialMonitor.NewSerialDataRecieved += _SerialMonitor_NewSerialDataRecieved;
+ _SerialMonitor.Settings.PortName = "";
+ _SerialMonitor.StartListening();*/
+ _TargetWatcher = new TargetWatcher(this);
}
private byte[] _SerialDataBuffer = new byte[0];
+
private void _SerialMonitor_NewSerialDataRecieved(object sender, SerialDataEventArgs e)
{
_SerialDataBuffer = _SerialDataBuffer.Concat(e.Data).ToArray();
@@ -61,7 +38,7 @@ namespace OrbisSuiteService.Service
{
var Packet = new ForwardPacket(ForwardPacket.PacketType.SerialCom, "");
Packet.SerialCom.Data = _SerialDataBuffer;
- ForwardPacketAll(Packet);
+ PublishEvent(Packet);
//Clear buffer for next print.
_SerialDataBuffer = new byte[0];
@@ -70,163 +47,12 @@ namespace OrbisSuiteService.Service
private void _DBWatcher_DBChanged()
{
- ForwardPacketAll(new ForwardPacket(ForwardPacket.PacketType.DBTouched, ""));
+ PublishEvent(new ForwardPacket(ForwardPacket.PacketType.DBTouched, ""));
}
- private void _EventListener_SocketAccepted(Socket e)
+ public void PublishEvent(ForwardPacket Packet)
{
- //This will be coming fromt the console which is c++ so we will have to marshal this when I figure out the packet structure.
- throw new NotImplementedException();
- }
-
- private void _DispatcherListener_SocketAccepted(Socket e)
- {
- try
- {
- var Packet = (DispatcherClientPacket)e.RecvObject();
-
- switch (Packet.Type)
- {
- default:
- Console.WriteLine("Invalid Packet...");
- break;
-
- case DispatcherClientPacket.PacketType.NewClient:
- e.SendInt32(AddClient(Packet.ClientName));
- break;
-
- case DispatcherClientPacket.PacketType.RemoveClient:
- RemoveClient(Packet.Port);
- break;
-
- case DispatcherClientPacket.PacketType.HeartBeat:
- if (_clients.Any(p => p.Port == Packet.Port))
- {
- var Client = _clients.Where(p => p.Port == Packet.Port).First();
- var CurrentTick = (Environment.TickCount & Int32.MaxValue);
-
- Console.WriteLine($"[HeartBeat] in {(CurrentTick - Client.LastUpdate).ToString()}ms from {Packet.ClientName}({Packet.Port.ToString()})");
-
- // Update last time we got a heart beat.
- Client.LastUpdate = CurrentTick;
-
- // Send Success.
- e.SendInt32(1);
- }
- else // Send Failure.
- e.SendInt32(0);
-
-
- break;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod()?.Name}] Error: {ex.Message}");
- }
- }
-
- ///
- /// Adds a client to the '_clients'.
- ///
- /// The text name of the client. Should be the other programs name.
- /// Returns the port the Dispatcher will send the data on.
- public int AddClient(string Name)
- {
- try
- {
- int Port = Config.DispatcherClientPort;
- while (Port < _clientMax)
- {
- if (!_clients.Any(p => p.Port == Port))
- break;
-
- Port++;
-
- if (Port == _clientMax)
- {
- Console.WriteLine("Client List Full.");
-
- return -1;
- }
- }
-
- Console.WriteLine($"New Client: {Name} {Port.ToString()}.");
-
- _clients.Add(new ClientInstance(Port, Name, Environment.TickCount & Int32.MaxValue));
-
- return Port;
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod()?.Name}] Error: {ex.Message}");
- }
-
- return -1;
- }
-
- ///
- /// Removes the client specified from the '_clients'.
- ///
- /// The port of the client you want to remove.
- public void RemoveClient(int Port)
- {
- if (_clients.Any(p => p.Port == Port))
- {
- var Client = _clients.Where(p => p.Port == Port);
- _clients.Remove(Client.First());
- }
- }
-
- ///
- /// Forwards a packet to all the clients in the '_clients'.
- ///
- /// The packet data that should be sent.
- public void ForwardPacketAll(ForwardPacket Packet)
- {
- try
- {
- foreach (ClientInstance Client in _clients)
- Task.Factory.StartNew(() => Client.SendObject(Packet));
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod()?.Name}] Error: {ex.Message}");
- }
- }
-
- ///
- /// This task will check for client time outs. This way it keeps the client list fresh and keeps from unneeded thread hold ups.
- ///
- ///
- private async Task DoHeartbeat()
- {
- try
- {
- while (true)
- {
- var CurrentTick = (Environment.TickCount & Int32.MaxValue);
-
- foreach (var Client in _clients)
- {
- if (CurrentTick - Client.LastUpdate > 10000)
- {
- Console.WriteLine($"[Dispatcher] No response from client {Client.Name}({Client.Port.ToString()}) in more than 10000 ms. Last update was {(CurrentTick - Client.LastUpdate).ToString()} ms Timing Out!");
-
- RemoveClient(Client.Port);
- }
- }
-
- await Task.Delay(2000, _HeartbeatCancellationToken);
-
- if (_HeartbeatCancellationToken.IsCancellationRequested)
- break;
- }
- }
- catch (Exception ex)
- {
- Console.WriteLine($"[{System.Reflection.MethodBase.GetCurrentMethod()?.Name}] Error: {ex.Message}");
- }
+ _ServiceMessageBus.PublishAsync(Helper.ObjectToByteArray(Packet));
}
}
}
diff --git a/Windows/OrbisSuiteService/Service/TargetWatcher.cs b/Windows/OrbisSuiteService/Service/TargetWatcher.cs
index 4c0ba73..cc8334c 100644
--- a/Windows/OrbisSuiteService/Service/TargetWatcher.cs
+++ b/Windows/OrbisSuiteService/Service/TargetWatcher.cs
@@ -1,6 +1,7 @@
-using OrbisSuite.Common;
-using OrbisSuite.Common.Database;
-using OrbisSuite.Common.Dispatcher;
+using OrbisLib2.Common.Database;
+using OrbisLib2.Common.Dispatcher;
+using OrbisLib2.Common.Helpers;
+using OrbisLib2.Targets;
namespace OrbisSuiteService.Service
{
@@ -15,57 +16,61 @@ namespace OrbisSuiteService.Service
_dispatcher = dispatcher;
_TargetWatcherTask = Task.Run(() => DoTargetWatcher());
}
-
private async Task DoTargetWatcher()
{
while (true)
{
- Parallel.ForEach(SavedTargets.Targets, Target =>
+ if(TargetManager.Targets.Count <= 0)
{
- var oldAvailable = Target.Details.IsAvailable;
- var OldAPIAvailable = Target.Details.IsAPIAvailable;
+ await Task.Delay(1000, _TargetWatcherCancellationToken);
+ }
- if(Helpers.PingHost(Target.IPAddress))
+ Parallel.ForEach(SavedTarget.GetTargetList(), Target =>
+ {
+ var oldAvailable = Target.Info.IsAvailable;
+ var OldAPIAvailable = Target.Info.IsAPIAvailable;
+
+ if(Helper.PingHost(Target.IPAddress))
{
- var detail = Target.Details;
+ var detail = Target.Info;
detail.IsAvailable = true;
}
- Target.Details.IsAvailable = Helpers.PingHost(Target.IPAddress);
- Target.Details.IsAPIAvailable = Helpers.TestTcpConnection(Target.IPAddress, Settings.CreateInstance().APIPort);
- Target.Details.Save();
+ Target.Info.IsAvailable = Helper.PingHost(Target.IPAddress);
+ Target.Info.IsAPIAvailable = Helper.TestTcpConnection(Target.IPAddress, Settings.CreateInstance().APIPort);
+ Target.Info.Save();
- if (Target.Details.IsAPIAvailable)
- SavedTargets.UpdateTargetInfo(Target.Name);
+ if (Target.Info.IsAPIAvailable)
+ TargetManager.UpdateTargetInfo(Target);
else
{
- Target.Details.CPUTemp = 0;
- Target.Details.SOCTemp = 0;
- Target.Details.ThreadCount = 0;
- Target.Details.AverageCPUUsage = 0;
- Target.Details.BusyCore = 0;
- Target.Details.RamUsage = 0;
- Target.Details.VRamUsage = 0;
- Target.Details.CurrentTitleID = "-";
- Target.Details.Save();
+ Target.Info.CPUTemp = 0;
+ Target.Info.SOCTemp = 0;
+ Target.Info.ThreadCount = 0;
+ Target.Info.AverageCPUUsage = 0;
+ Target.Info.BusyCore = 0;
+ Target.Info.RamUsage = 0;
+ Target.Info.VRamUsage = 0;
+ Target.Info.CurrentTitleID = "-";
+ Target.Info.Save();
}
// Forward Target Availability.
- if (oldAvailable != Target.Details.IsAvailable)
+ if (oldAvailable != Target.Info.IsAvailable)
{
var Packet = new ForwardPacket(ForwardPacket.PacketType.TargetAvailability, Target.IPAddress);
- Packet.TargetAvailability.Available = Target.Details.IsAvailable;
+ Packet.TargetAvailability.Available = Target.Info.IsAvailable;
Packet.TargetAvailability.Name = Target.Name;
- _dispatcher.ForwardPacketAll(Packet);
+ _dispatcher.PublishEvent(Packet);
}
// Forward API Availability.
- if (OldAPIAvailable != Target.Details.IsAPIAvailable)
+ if (OldAPIAvailable != Target.Info.IsAPIAvailable)
{
var Packet = new ForwardPacket(ForwardPacket.PacketType.TargetAPIAvailability, Target.IPAddress);
- Packet.TargetAPIAvailability.Available = Target.Details.IsAvailable;
+ Packet.TargetAPIAvailability.Available = Target.Info.IsAvailable;
Packet.TargetAPIAvailability.Name = Target.Name;
- _dispatcher.ForwardPacketAll(Packet);
+ _dispatcher.PublishEvent(Packet);
}
});