using System.Diagnostics;
using System.Collections.ObjectModel;
public static class AccountManager
static public ObservableCollection<Account> Accounts= new ObservableCollection<Account>();
static void Remove(Account Account){Accounts.Remove(Accounts.First(a=>a.Nickname==Account.Nickname));}
static void Remove(string Nickname){Accounts.Remove(Accounts.First(a=>a.Nickname==Nickname));}
public string Nickname="nickname";
public AccountSettings Settings=new AccountSettings();
private void CreateAccount(string nickname)
if(!AccountManager.Accounts.Any(a=>a.Nickname==nickname))
AccountManager.Accounts.Add(this);
Client Client = new Client(this);
public Account(string nickname)
public Account(string nickname,Account account)
this.Settings=account.Settings;
public Client Client {get{return ClientManager.Clients.FirstOrDefault(c=>c.account ==this);}}
public class AccountSettings
public static class ClientManager
private static string filepath= "gw2lb_ac.txt";
public static Client.ClientStatus ActiveStatus_Threshold= Client.ClientStatus.Running;
public static ObservableCollection<Client> Clients= new ObservableCollection<Client>();
public static readonly ObservableCollection<Client> ActiveClients=new ObservableCollection<Client>();
public static void Add(Client client)
client.StatusChanged+=UpdateActiveList;
public static void UpdateActiveList(object sender, EventArgs e)
Client client = sender as Client;
Console.WriteLine(client.account.Nickname+" status changed to: "+client.Status +" = " +((int)client.Status).ToString());
if (ActiveClients.Contains(client) && !(client.Status<ActiveStatus_Threshold))
ActiveClients.Remove(client);
if(!ActiveClients.Contains(client) && (client.Status>=ActiveStatus_Threshold))
ActiveClients.Add(client);
private static void SaveActiveClients()
public static bool LoadActiveClients()
if(File.Exists(filepath))
var lines_client=File.ReadLines(filepath);
foreach(string line in lines_client)
Account acc = AccountManager.Accounts.First(a=>a.Nickname == line.Split(',')[0]);
Process pro = Process.GetProcessById(Int32.Parse(line.Split(',')[2]));
if (pro.StartTime.ToString()==line.Split(',')[3])
acc.Client.Status=(Client.ClientStatus)Int32.Parse(line.Split(',')[1]);
public readonly Account account;
private ClientStatus status=ClientStatus.None;
public Process Process=new Process();
public event EventHandler StatusChanged;
protected virtual void OnStatusChanged(EventArgs e)
EventHandler handler = StatusChanged;
public enum ClientStatus{
public ClientStatus Status
if (value== ClientStatus.None || value==ClientStatus.Closed)
status=ClientStatus.None;
OnStatusChanged(EventArgs.Empty);
public Client(Account acc)
Process.Exited+=OnClientClose;
protected virtual void OnClientClose(object sender,EventArgs e)
Process pro=sender as Process;
this.Status=ClientStatus.Closed;
while(Status<ClientStatus.Running)
Status=ClientStatus.MutexClosed;
Status=ClientStatus.Running;
public static void Main()
Console.WriteLine("Testrun");
Account acc= new Account("Franz");
Account acc2= new Account("Hans");
Console.WriteLine(ClientManager.Clients.Count);
Console.WriteLine(ClientManager.ActiveClients.Count);
Console.WriteLine(AccountManager.Accounts.Count);