예제 #1
0
        public void Initialize()
        {
            using (var socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp))
            {
                socket.Bind(new IPEndPoint(IPAddress.Any, 19132));

                var startInfo = new ProcessStartInfo(@"C:\Development\Other\bedrock-server-1.14.1.4\bedrock_server.exe");
                startInfo.CreateNoWindow  = false;
                startInfo.WindowStyle     = ProcessWindowStyle.Normal;
                startInfo.UseShellExecute = false;

                _bedrock = Process.Start(startInfo);
                _client  = new MiNetClient(new IPEndPoint(IPAddress.Parse("192.168.0.4"), 19162), "TheGrey", new DedicatedThreadPool(new DedicatedThreadPoolSettings(Environment.ProcessorCount)));
                _client.MessageHandler = new ChunkGeneratorHandler(_client);
                _client.StartClient();

                if (_client.ServerEndPoint != null)
                {
                    while (!_client.FoundServer)
                    {
                        _client.SendUnconnectedPing();
                        Thread.Sleep(100);
                    }
                }
            }

            Log.Info("Found server, waiting for spawn");


            Task.Run(BotHelpers.DoWaitForSpawn(_client)).Wait();
            Log.Info("Spawned on bedrock server");
        }
예제 #2
0
        public void Initialize(IWorldProvider worldProvider)
        {
            Process blocker;

            {
                // Block port!
                var startInfo = new ProcessStartInfo("MiNET.Console.exe", "listener");
                startInfo.CreateNoWindow  = false;
                startInfo.WindowStyle     = ProcessWindowStyle.Normal;
                startInfo.UseShellExecute = false;
                blocker = Process.Start(startInfo);
            }
            {
                var startInfo = new ProcessStartInfo(Path.Combine(Config.GetProperty("BDSPath", null), Config.GetProperty("BDSExe", null)));
                startInfo.WorkingDirectory      = Config.GetProperty("BDSPath", null);
                startInfo.CreateNoWindow        = false;
                startInfo.WindowStyle           = ProcessWindowStyle.Normal;
                startInfo.UseShellExecute       = false;
                startInfo.RedirectStandardInput = true;

                _bedrock = Process.Start(startInfo);

                _client = new MiNetClient(new IPEndPoint(IPAddress.Parse("192.168.10.178"), 19162), "TheGrey", new DedicatedThreadPool(new DedicatedThreadPoolSettings(Environment.ProcessorCount)));
                _client.MessageHandler = new ChunkGeneratorHandler(_client, worldProvider);
                //_client.UseBlobCache = true;
                _client.StartClient();

                if (_client.ServerEndPoint != null)
                {
                    while (!_client.FoundServer)
                    {
                        _client.SendUnconnectedPing();
                        Thread.Sleep(100);
                    }
                }
            }

            Log.Info("Found server, waiting for spawn");


            Task.Run(BotHelpers.DoWaitForSpawn(_client)).Wait();
            Log.Info("Spawned on bedrock server");

            blocker?.Kill();             // no need to block further once we have spawned our bot.

            // Shutdown hook. Must use to flush in memory log of LevelDB.
            AppDomain.CurrentDomain.ProcessExit += (sender, args) =>
            {
                Log.Warn("Closing bedrock dedicated server (BDS)");
                _bedrock.StandardInput.WriteLine("stop");
                _bedrock.WaitForExit(1000);
                _bedrock.Kill();
            };
        }
예제 #3
0
파일: Emulator.cs 프로젝트: ruslan81/MiNET
        public void EmulateClient()
        {
            try
            {
                Console.WriteLine("Client {0} connecting...", Name);

                //var client = new MiNetClient(new IPEndPoint(Dns.GetHostEntry("play.lbsg.net").AddressList[0], 19132), new IPEndPoint(IPAddress.Any, 0));
                //var client = new MiNetClient(new IPEndPoint(Dns.GetHostEntry("test.inpvp.net").AddressList[0], 19132), new IPEndPoint(IPAddress.Any, 0));
                //var client = new MiNetClient(new IPEndPoint(IPAddress.Parse("188.165.235.161"), 19132), new IPEndPoint(IPAddress.Any, 0));
                var client = new MiNetClient(new IPEndPoint(IPAddress.Loopback, 19132), new IPEndPoint(IPAddress.Loopback, 0));

                client.Username = Name;
                client.ClientId = ClientId;

                client.StartServer();
                Console.WriteLine("Client started.");

                Thread.Sleep(3000);

                client.SendUnconnectedPing();

                Thread.Sleep(2000);

                //client.LoginSent = true;

                Stopwatch watch = new Stopwatch();
                watch.Start();
                if (client.Listener != null) Console.WriteLine("\t\t\t\t\t\tClient {0} moving...", Name);

                for (int i = 0; i < 10 && Emulator.Running && watch.ElapsedMilliseconds < TimeToRun; i++)
                {
                    if (client.Listener == null) break;

                    float y = Random.Next(7, 10) + /*24*/ 55;
                    float length = Random.Next(5, 20);

                    double angle = 0.0;
                    const double angleStepsize = 0.05;
                    float heightStepsize = (float) (Random.NextDouble()/5);

                    while (angle < 2*Math.PI && Emulator.Running)
                    {
                        if (client.Listener == null) break;

                        float x = (float) (length*Math.Cos(angle));
                        float z = (float) (length*Math.Sin(angle));
                        y += heightStepsize;

                        x += -2562;
                        z += 743;

                        client.CurrentLocation = new PlayerLocation(x, y, z);
                        client.SendMcpeMovePlayer();
                        Thread.Sleep(Random.Next(150, 450));
                        angle += angleStepsize;
                    }
                }

                if (client.Listener != null) client.SendDisconnectionNotification();

                client.StopServer();
            }
            catch (Exception e)
            {
                Console.WriteLine(e);
            }
        }