added project install status and re-added connection check

main
Justin Barnett 2025-04-09 07:43:01 -04:00
parent b2f65f2ffc
commit 52c75f9521
1 changed files with 80 additions and 8 deletions

View File

@ -1,6 +1,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Linq;
using System.Net;
using System.Net.NetworkInformation;
using System.Net.Sockets; using System.Net.Sockets;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
@ -18,13 +21,14 @@ namespace UnityMcpBridge.Editor.Windows
{ {
private bool isUnityBridgeRunning = false; private bool isUnityBridgeRunning = false;
private Vector2 scrollPosition; private Vector2 scrollPosition;
private string claudeConfigStatus = "Not configured"; private string pythonServerInstallationStatus = "Not Installed";
private string cursorConfigStatus = "Not configured"; private Color pythonServerInstallationStatusColor = Color.red;
private string pythonServerStatus = "Not Connected"; private string pythonServerConnectionStatus = "Not Connected";
private Color pythonServerStatusColor = Color.red; private Color pythonServerConnectionStatusColor = Color.red;
private DateTime lastConnectionCheck;
private const int unityPort = 6400; // Hardcoded Unity port private const int unityPort = 6400; // Hardcoded Unity port
private const int mcpPort = 6500; // Hardcoded MCP port private const int mcpPort = 6500; // Hardcoded MCP port
private McpClients mcpClients = new(); private readonly McpClients mcpClients = new();
[MenuItem("Window/Unity MCP")] [MenuItem("Window/Unity MCP")]
public static void ShowWindow() public static void ShowWindow()
@ -34,7 +38,9 @@ namespace UnityMcpBridge.Editor.Windows
private void OnEnable() private void OnEnable()
{ {
// Check initial states UpdatePythonServerInstallationStatus();
UpdatePythonServerConnectionStatus();
isUnityBridgeRunning = UnityMcpBridge.IsRunning; isUnityBridgeRunning = UnityMcpBridge.IsRunning;
foreach (McpClient mcpClient in mcpClients.clients) foreach (McpClient mcpClient in mcpClients.clients)
{ {
@ -42,6 +48,16 @@ namespace UnityMcpBridge.Editor.Windows
} }
} }
private void Update()
{
if (lastConnectionCheck.AddSeconds(2) < DateTime.Now)
{
UpdatePythonServerConnectionStatus();
lastConnectionCheck = DateTime.Now;
}
}
private Color GetStatusColor(McpStatus status) private Color GetStatusColor(McpStatus status)
{ {
// Return appropriate color based on the status enum // Return appropriate color based on the status enum
@ -57,6 +73,62 @@ namespace UnityMcpBridge.Editor.Windows
}; };
} }
private void UpdatePythonServerInstallationStatus()
{
string serverPath = ServerInstaller.GetServerPath();
if (File.Exists(Path.Combine(serverPath, "server.py")))
{
string installedVersion = ServerInstaller.GetInstalledVersion();
string latestVersion = ServerInstaller.GetLatestVersion();
if (ServerInstaller.IsNewerVersion(latestVersion, installedVersion))
{
pythonServerInstallationStatus = "Up to Date";
pythonServerInstallationStatusColor = Color.green;
}
else
{
pythonServerInstallationStatus = "Newer Version Available";
pythonServerInstallationStatusColor = Color.yellow;
}
}
else
{
pythonServerInstallationStatus = "Not Installed";
pythonServerInstallationStatusColor = Color.red;
}
}
private void UpdatePythonServerConnectionStatus()
{
IPGlobalProperties ipGlobalProperties = IPGlobalProperties.GetIPGlobalProperties();
TcpConnectionInformation[] tcpConnections =
ipGlobalProperties.GetActiveTcpConnections();
IPEndPoint[] tcpListeners = ipGlobalProperties.GetActiveTcpListeners();
// Check if the port is in use by any active listener
bool isListenerActive = tcpListeners.Any(static endpoint => endpoint.Port == mcpPort);
// Optionally, check if the port is in use by any active connection
bool isConnectionActive = tcpConnections.Any(static connection =>
connection.LocalEndPoint.Port == mcpPort
|| connection.RemoteEndPoint.Port == mcpPort
);
// Return true if either a listener or connection is using the port
if (isListenerActive || isConnectionActive)
{
pythonServerConnectionStatus = "Connected";
pythonServerConnectionStatusColor = Color.green;
}
else
{
pythonServerConnectionStatus = "Not Connected";
pythonServerConnectionStatusColor = Color.red;
}
}
private void ConfigurationSection(McpClient mcpClient) private void ConfigurationSection(McpClient mcpClient)
{ {
// Calculate if we should use half-width layout // Calculate if we should use half-width layout
@ -197,8 +269,8 @@ namespace UnityMcpBridge.Editor.Windows
// Status indicator with colored dot // Status indicator with colored dot
var statusRect = EditorGUILayout.BeginHorizontal(GUILayout.Height(20)); var statusRect = EditorGUILayout.BeginHorizontal(GUILayout.Height(20));
DrawStatusDot(statusRect, pythonServerStatusColor); DrawStatusDot(statusRect, pythonServerInstallationStatusColor);
EditorGUILayout.LabelField(" " + pythonServerStatus); EditorGUILayout.LabelField(" " + pythonServerInstallationStatus);
EditorGUILayout.EndHorizontal(); EditorGUILayout.EndHorizontal();
EditorGUILayout.LabelField($"Unity Port: {unityPort}"); EditorGUILayout.LabelField($"Unity Port: {unityPort}");