Refactor a bit
This commit is contained in:
@@ -8,7 +8,7 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Piston
|
namespace Piston
|
||||||
{
|
{
|
||||||
public class ObservableType : INotifyPropertyChanged
|
public class ViewModel : INotifyPropertyChanged
|
||||||
{
|
{
|
||||||
public event PropertyChangedEventHandler PropertyChanged;
|
public event PropertyChangedEventHandler PropertyChanged;
|
||||||
|
|
38
PistonServer/ChatItemInfo.cs
Normal file
38
PistonServer/ChatItemInfo.cs
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Piston.Server
|
||||||
|
{
|
||||||
|
public class ChatItemInfo : ViewModel
|
||||||
|
{
|
||||||
|
private PlayerInfo _sender;
|
||||||
|
private string _message;
|
||||||
|
private DateTime _timestamp;
|
||||||
|
|
||||||
|
public PlayerInfo Sender
|
||||||
|
{
|
||||||
|
get { return _sender; }
|
||||||
|
set { _sender = value; OnPropertyChanged(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Message
|
||||||
|
{
|
||||||
|
get { return _message; }
|
||||||
|
set { _message = value; OnPropertyChanged(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public DateTime Timestamp
|
||||||
|
{
|
||||||
|
get { return _timestamp; }
|
||||||
|
set { _timestamp = value; OnPropertyChanged(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Time => Timestamp.ToShortTimeString();
|
||||||
|
|
||||||
|
public ChatItemInfo(PlayerInfo sender, string message)
|
||||||
|
{
|
||||||
|
_sender = sender;
|
||||||
|
_message = message;
|
||||||
|
_timestamp = DateTime.Now;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
18
PistonServer/ConnectionState.cs
Normal file
18
PistonServer/ConnectionState.cs
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Piston.Server
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Identifies a player's current connection state.
|
||||||
|
/// </summary>
|
||||||
|
[Flags]
|
||||||
|
public enum ConnectionState
|
||||||
|
{
|
||||||
|
Unknown,
|
||||||
|
Connected = 1,
|
||||||
|
Left = 2,
|
||||||
|
Disconnected = 4,
|
||||||
|
Kicked = 8,
|
||||||
|
Banned = 16,
|
||||||
|
}
|
||||||
|
}
|
@@ -12,10 +12,10 @@ namespace Piston.Server
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public static class PistonServer
|
public static class PistonServer
|
||||||
{
|
{
|
||||||
public static MainWindow UI;
|
public static ServerManager Server { get; private set; }
|
||||||
public static ServerManager Server;
|
public static MultiplayerManager Multiplayer { get; private set; }
|
||||||
public static MultiplayerManager Multiplayer;
|
public static PluginManager Plugins { get; private set; }
|
||||||
public static PluginManager Plugins;
|
public static PistonUI UI { get; private set; }
|
||||||
|
|
||||||
private static bool _init;
|
private static bool _init;
|
||||||
|
|
||||||
@@ -28,16 +28,20 @@ namespace Piston.Server
|
|||||||
Server = new ServerManager();
|
Server = new ServerManager();
|
||||||
Multiplayer = new MultiplayerManager(Server);
|
Multiplayer = new MultiplayerManager(Server);
|
||||||
Plugins = new PluginManager();
|
Plugins = new PluginManager();
|
||||||
UI = new MainWindow();
|
UI = new PistonUI();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void Reset()
|
public static void Reset()
|
||||||
{
|
{
|
||||||
Logger.Write("Resetting Piston");
|
Logger.Write("Resetting Piston");
|
||||||
|
Server.Dispose();
|
||||||
|
UI.Close();
|
||||||
|
|
||||||
Server = null;
|
Server = null;
|
||||||
Multiplayer = null;
|
Multiplayer = null;
|
||||||
Plugins = null;
|
Plugins = null;
|
||||||
|
UI = null;
|
||||||
_init = false;
|
_init = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -20,22 +20,22 @@ using System.Windows.Shapes;
|
|||||||
namespace Piston.Server
|
namespace Piston.Server
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Interaction logic for MainWindow.xaml
|
/// Interaction logic for PistonUI.xaml
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public partial class MainWindow : Window
|
public partial class PistonUI : Window
|
||||||
{
|
{
|
||||||
private DateTime startTime;
|
private DateTime _startTime;
|
||||||
private Timer uiUpdate = new Timer
|
private readonly Timer _uiUpdate = new Timer
|
||||||
{
|
{
|
||||||
Interval = 1000,
|
Interval = 1000,
|
||||||
AutoReset = true,
|
AutoReset = true,
|
||||||
};
|
};
|
||||||
|
|
||||||
public MainWindow()
|
public PistonUI()
|
||||||
{
|
{
|
||||||
InitializeComponent();
|
InitializeComponent();
|
||||||
startTime = DateTime.Now;
|
_startTime = DateTime.Now;
|
||||||
uiUpdate.Elapsed += UiUpdate_Elapsed;
|
_uiUpdate.Elapsed += UiUpdate_Elapsed;
|
||||||
|
|
||||||
TabControl.Items.Add(new TabItem());
|
TabControl.Items.Add(new TabItem());
|
||||||
}
|
}
|
||||||
@@ -48,19 +48,19 @@ namespace Piston.Server
|
|||||||
private void UpdateUptime()
|
private void UpdateUptime()
|
||||||
{
|
{
|
||||||
var currentTime = DateTime.Now;
|
var currentTime = DateTime.Now;
|
||||||
var uptime = currentTime - startTime;
|
var uptime = currentTime - _startTime;
|
||||||
|
|
||||||
Dispatcher.Invoke(() => LabelUptime.Content = $"Uptime: {uptime.Days}d {uptime.Hours}h {uptime.Minutes}m");
|
Dispatcher.Invoke(() => LabelUptime.Content = $"Uptime: {uptime.Days}d {uptime.Hours}h {uptime.Minutes}m");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void BtnStart_Click(object sender, RoutedEventArgs e)
|
private void BtnStart_Click(object sender, RoutedEventArgs e)
|
||||||
{
|
{
|
||||||
startTime = DateTime.Now;
|
_startTime = DateTime.Now;
|
||||||
Chat.IsEnabled = true;
|
Chat.IsEnabled = true;
|
||||||
PlayerList.IsEnabled = true;
|
PlayerList.IsEnabled = true;
|
||||||
((Button) sender).IsEnabled = false;
|
((Button) sender).IsEnabled = false;
|
||||||
BtnStop.IsEnabled = true;
|
BtnStop.IsEnabled = true;
|
||||||
uiUpdate.Start();
|
_uiUpdate.Start();
|
||||||
PistonServer.Server.StartServerThread();
|
PistonServer.Server.StartServerThread();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ namespace Piston.Server
|
|||||||
((Button) sender).IsEnabled = false;
|
((Button) sender).IsEnabled = false;
|
||||||
//HACK: Uncomment when restarting is possible.
|
//HACK: Uncomment when restarting is possible.
|
||||||
//BtnStart.IsEnabled = true;
|
//BtnStart.IsEnabled = true;
|
||||||
uiUpdate.Stop();
|
_uiUpdate.Stop();
|
||||||
PistonServer.Server.StopServer();
|
PistonServer.Server.StopServer();
|
||||||
}
|
}
|
||||||
|
|
39
PistonServer/PlayerInfo.cs
Normal file
39
PistonServer/PlayerInfo.cs
Normal file
@@ -0,0 +1,39 @@
|
|||||||
|
using Sandbox.Engine.Multiplayer;
|
||||||
|
|
||||||
|
namespace Piston.Server
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Stores player information in an observable format.
|
||||||
|
/// </summary>
|
||||||
|
public class PlayerInfo : ViewModel
|
||||||
|
{
|
||||||
|
private ulong _steamId;
|
||||||
|
private string _name;
|
||||||
|
private ConnectionState _state;
|
||||||
|
|
||||||
|
public ulong SteamId
|
||||||
|
{
|
||||||
|
get { return _steamId; }
|
||||||
|
set { _steamId = value; OnPropertyChanged(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public string Name
|
||||||
|
{
|
||||||
|
get { return _name; }
|
||||||
|
set { _name = value; OnPropertyChanged(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public ConnectionState State
|
||||||
|
{
|
||||||
|
get { return _state; }
|
||||||
|
set { _state = value; OnPropertyChanged(); }
|
||||||
|
}
|
||||||
|
|
||||||
|
public PlayerInfo(ulong steamId)
|
||||||
|
{
|
||||||
|
_steamId = steamId;
|
||||||
|
_name = MyMultiplayer.Static.GetMemberName(steamId);
|
||||||
|
_state = ConnectionState.Unknown;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -21,12 +21,11 @@ namespace Piston.Server
|
|||||||
PistonServer.Server.RunArgs = new[] { "-console" };
|
PistonServer.Server.RunArgs = new[] { "-console" };
|
||||||
|
|
||||||
if (args.Contains("-nogui"))
|
if (args.Contains("-nogui"))
|
||||||
|
|
||||||
PistonServer.Server.StartServer();
|
PistonServer.Server.StartServer();
|
||||||
else
|
else
|
||||||
StartUI();
|
StartUI();
|
||||||
|
|
||||||
if (args.Contains("-autostart") && !PistonServer.Server.Running)
|
if (args.Contains("-autostart") && !PistonServer.Server.IsRunning)
|
||||||
PistonServer.Server.StartServerThread();
|
PistonServer.Server.StartServerThread();
|
||||||
|
|
||||||
Dispatcher.Run();
|
Dispatcher.Run();
|
||||||
|
@@ -15,11 +15,11 @@ using VRage.Profiler;
|
|||||||
|
|
||||||
namespace Piston.Server
|
namespace Piston.Server
|
||||||
{
|
{
|
||||||
public class ServerManager
|
public class ServerManager : IDisposable
|
||||||
{
|
{
|
||||||
public Thread ServerThread { get; private set; }
|
public Thread ServerThread { get; private set; }
|
||||||
public string[] RunArgs { get; set; } = new string[0];
|
public string[] RunArgs { get; set; } = new string[0];
|
||||||
public bool Running { get; private set; }
|
public bool IsRunning { get; private set; }
|
||||||
|
|
||||||
public event Action SessionLoading;
|
public event Action SessionLoading;
|
||||||
public event Action SessionLoaded;
|
public event Action SessionLoaded;
|
||||||
@@ -70,7 +70,7 @@ namespace Piston.Server
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
public void StartServer()
|
public void StartServer()
|
||||||
{
|
{
|
||||||
Running = true;
|
IsRunning = true;
|
||||||
Logger.Write("Starting server.");
|
Logger.Write("Starting server.");
|
||||||
|
|
||||||
if (MySandboxGame.Log.LogEnabled)
|
if (MySandboxGame.Log.LogEnabled)
|
||||||
@@ -115,7 +115,7 @@ namespace Piston.Server
|
|||||||
|
|
||||||
Logger.Write("Server stopped.");
|
Logger.Write("Server stopped.");
|
||||||
_stopHandle.Set();
|
_stopHandle.Set();
|
||||||
Running = false;
|
IsRunning = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void CleanupProfilers()
|
private void CleanupProfilers()
|
||||||
@@ -124,5 +124,11 @@ namespace Piston.Server
|
|||||||
typeof(MyRenderProfiler).GetField("m_gpuProfiler", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, null);
|
typeof(MyRenderProfiler).GetField("m_gpuProfiler", BindingFlags.Static | BindingFlags.NonPublic).SetValue(null, null);
|
||||||
(typeof(MyRenderProfiler).GetField("m_threadProfilers", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null) as List<MyProfiler>).Clear();
|
(typeof(MyRenderProfiler).GetField("m_threadProfilers", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null) as List<MyProfiler>).Clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void Dispose()
|
||||||
|
{
|
||||||
|
if (IsRunning)
|
||||||
|
StopServer();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user