예제 #1
0
        //http://localhost:8080/fill?from=3%205%203&to=30 3f0 30&tileName=stone&tileData=0
        private static void Main()
        {
            Console.CancelKeyPress += delegate(object sender, ConsoleCancelEventArgs e) {
                e.Cancel            = true;
                Program.keepRunning = false;
            };
            using (var codeConnectionProcess = Prerequisites())
            {
                var cmdHandler = new CommandControl();
                ;
                using (var commandService = MinecraftCommandService.Run())
                {
                    //check if connected, if not send connection command through AHK
                    var ahk = AutoHotKey.Run();
                    AutoHotKey.Callback = (s) =>
                    {
                        Console.WriteLine(s);
                        var args = s.Split(' ');
                        cmdHandler.HandleCommand(args);
                    };
                    Console.WriteLine(@"
Press Ctrl-C to shutdown.");

                    ahk.ExecRaw(@"
WinMinimize Code Connection for Minecraft
WinActivate Minecraft
send {esc}
sleep 500
send /
sleep 200
send connect " + wsUrl + "{enter}");
                    var minecraftAPI = new MinecraftCommandService();
                    minecraftAPI.Command("executeasother?origin=@p&position=~%20~%20~&command=title%20@s%20title%20WorldEdit%20Started");

                    while (keepRunning)
                    {
                        Thread.Sleep(500);
                    }
                    minecraftAPI.Command("executeasother?origin=@p&position=~%20~%20~&command=title%20@s%20subtitle WorldEdit Shutting Down");
                    minecraftAPI.Wait();
                    MinecraftCommandService.ShutDown();
                    commandService.Cancel();
                }
            }
        }
        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();
            }
        }