Esempio n. 1
0
        static void Run()
        {
            DateTime nextUpdate = DateTime.Now;

            while (active)
            {
                try
                {
                    TcpClient client = new TcpClient();
                    client.Connect(IPAddress.Loopback, port);
                    var stream = client.GetStream();
                    var reader = new BinaryReader(stream);
                    writer = new BinaryWriter(stream);

                    Console.WriteLine("Listening on proxy");

                    Connected = true;

                    while (true)
                    {
                        TimeSpan wait = nextUpdate - DateTime.Now;
                        if (wait.Ticks > 0)
                        {
                            Thread.Sleep(wait);
                        }
                        nextUpdate = DateTime.Now.Add(PlayerHistory.StepSize);

                        //Console.WriteLine ("Sending");
                        ControlMessage cm = new ControlMessage();
                        cm.PlayerUpdate = true;
                        Send(cm);

                        int           length = reader.ReadInt32();
                        byte[]        data   = reader.ReadBytes(length);
                        PlayersUpdate pu     = Json.Deserialize <PlayersUpdate>(data);
                        if (pu.List == null)
                        {
                            continue;
                        }
                        Players = pu;
                        //Console.WriteLine ("Got reply");

                        foreach (var p in Players.List)
                        {
                            PlayerHistory.Update(p);
                        }

                        if (Update != null)
                        {
                            Update();
                        }
                    }
                } catch (SocketException se)
                {
                    Console.WriteLine(se.Message);
                    Thread.Sleep(1000);
                } catch (IOException ioe)
                {
                    Console.WriteLine(ioe.Message);
                    Thread.Sleep(1000);
                } catch (ObjectDisposedException ode)
                {
                    Console.WriteLine(ode.Message);
                    Thread.Sleep(1000);
                } finally
                {
                    Connected = false;
                    if (writer != null)
                    {
                        writer.Dispose();
                    }
                    Players      = new PlayersUpdate();
                    Players.List = new List <MineProxy.Control.Player>();
                    if (Update != null)
                    {
                        Update();
                    }
                }
            }
        }
Esempio n. 2
0
        void RunController()
        {
            BinaryReader r = new BinaryReader(stream);
            BinaryWriter w = new BinaryWriter(stream);

            while (Program.Active)
            {
                int            length = r.ReadInt32();
                byte[]         packet = r.ReadBytes(length);
                string         json   = Encoding.UTF8.GetString(packet);
                ControlMessage c      = JsonConvert.DeserializeObject <ControlMessage>(json);
                if (Program.Active == false)
                {
                    return;
                }

                try
                {
                    //Console.WriteLine ("Got from controller " + c);
                    if (c.Kick != null)
                    {
                        //Console.WriteLine ("Kick");
                        Client p = PlayerList.GetPlayerByUsername(c.Kick.Username);
                        if (p != null)
                        {
                            p.Kick(c.Kick.Reason);
                        }
                    }

                    if (c.Ban != null)
                    {
                        Banned.Ban(null, c.Ban.Username, c.Ban.BannedUntil, c.Ban.Reason);
                    }

                    if (c.Pardon != null)
                    {
                        Banned.Pardon(null, c.Pardon.Username);
                    }

                    if (c.PlayerUpdate)
                    {
                        //Console.WriteLine ("Update");
                        //Send complete player status update
                        PlayersUpdate pu = new PlayersUpdate();
                        pu.List      = new List <Control.Player>();
                        pu.MessageID = messageID;
                        messageID   += 2;
                        foreach (Client pp in PlayerList.List)
                        {
                            pu.List.Add(new Control.Player(pp));
                        }

                        byte[] buffer = Json.Serialize(pu);

                        w.Write((int)buffer.Length);
                        w.Write(buffer);
                        w.Flush();
                        //Console.WriteLine ("Update Sent");
                    }

                    if (c.TP != null)
                    {
                        var p = PlayerList.GetPlayerByUsernameOrName(c.TP.Username);
                        if (p == null)
                        {
                            return;
                        }
                        if (c.TP.ToUsername != null)
                        {
                            var pTo = PlayerList.GetPlayerByUsernameOrName(c.TP.ToUsername);
                            if (pTo == null)
                            {
                                return;
                            }
                            p.Session.World.Send("tp " + p.MinecraftUsername + " " + pTo.MinecraftUsername);
                            continue;
                        }
                        if (c.TP.Position != null)
                        {
                            p.Warp(c.TP.Position, (Dimensions)c.TP.Dimension, Worlds.World.Main);
                            continue;
                        }
                    }
                } catch (Exception ie)
                {
                    Log.WriteServer(ie);
                }
            }
        }
Esempio n. 3
0
 static ProxyControl()
 {
     Players      = new PlayersUpdate();
     Players.List = new List <MineProxy.Control.Player>();
 }