public void Start(string serverName, string portNumber)
        {
            using (var server = new SocketServer("ws://0.0.0.0:" + portNumber)) // will stop on disposal.
            {
                server.Start();
                minecraftService = new MinecraftWebsocketCommandService(server);

                foreach (var gameHandler in GameHandlers)
                {
                    if (gameHandler is ISendCommand)
                    {
                        ((ISendCommand)gameHandler).CommandService = minecraftService;
                    }
                    server.AddHandler(gameHandler);
                }
                var eventSubscriptions = GameHandlers.SelectMany(a => a.CanHandle()).Distinct().OrderBy(a => a).ToList();
                server.AddHandler(new ConnectionHandler(minecraftService, serverName, eventSubscriptions));
                var ahk = AutoHotKey.Run("hotkeys.ahk");
                AutoHotKey.Callback = s =>
                {
                    Console.WriteLine(s);
                    var args = s.Split(' ');
                    HandleHotKeys(args);
                };

                using (var cancelationToken = minecraftService.Run())
                {
                    while (keepRunning)
                    {
                        Thread.Sleep(500);
                    }
                    ahk.Terminate();
                    minecraftService.Status(serverName + " Shutting Down");
                    minecraftService.Wait();
                    minecraftService.ShutDown();
                    cancelationToken.Cancel();
                }
                server.Stop();
            }
        }
 public void Plugin(IGameEventHandler handler)
 {
     GameHandlers.Add(handler);
 }