/// <summary>
        /// Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e).
        /// </summary>
        protected override void ActionPerformed(GuiButton par1GuiButton)
        {
            if (!par1GuiButton.Enabled)
            {
                return;
            }

            if (par1GuiButton.Id == 2)
            {
                string s = ServerList[SelectedServer].Name;

                if (s != null)
                {
                    DeleteClicked = true;
                    StringTranslate stringtranslate = StringTranslate.GetInstance();
                    string          s1       = stringtranslate.TranslateKey("selectServer.deleteQuestion");
                    string          s2       = new StringBuilder().Append("'").Append(s).Append("' ").Append(stringtranslate.TranslateKey("selectServer.deleteWarning")).ToString();
                    string          s3       = stringtranslate.TranslateKey("selectServer.deleteButton");
                    string          s4       = stringtranslate.TranslateKey("gui.cancel");
                    GuiYesNo        guiyesno = new GuiYesNo(this, s1, s2, s3, s4, SelectedServer);
                    Mc.DisplayGuiScreen(guiyesno);
                }
            }
            else if (par1GuiButton.Id == 1)
            {
                JoinServer(SelectedServer);
            }
            else if (par1GuiButton.Id == 4)
            {
                DirectClicked = true;
                Mc.DisplayGuiScreen(new GuiScreenServerList(this, TempServer = new ServerNBTStorage(StatCollector.TranslateToLocal("selectServer.defaultName"), "")));
            }
            else if (par1GuiButton.Id == 3)
            {
                AddClicked = true;
                Mc.DisplayGuiScreen(new GuiScreenAddServer(this, TempServer = new ServerNBTStorage(StatCollector.TranslateToLocal("selectServer.defaultName"), "")));
            }
            else if (par1GuiButton.Id == 7)
            {
                EditClicked = true;
                ServerNBTStorage servernbtstorage = (ServerNBTStorage)ServerList[SelectedServer];
                Mc.DisplayGuiScreen(new GuiScreenAddServer(this, TempServer = new ServerNBTStorage(servernbtstorage.Name, servernbtstorage.Host)));
            }
            else if (par1GuiButton.Id == 0)
            {
                Mc.DisplayGuiScreen(ParentScreen);
            }
            else if (par1GuiButton.Id == 8)
            {
                Mc.DisplayGuiScreen(new GuiMultiplayer(ParentScreen));
            }
            else
            {
                ServerSlotContainer.ActionPerformed(par1GuiButton);
            }
        }
 /// <summary>
 /// Poll server for MOTD, lag, and player count/max
 /// </summary>
 public static void PollServer(GuiMultiplayer par0GuiMultiplayer, ServerNBTStorage par1ServerNBTStorage)
 {
     try
     {
         par0GuiMultiplayer.PollServer(par1ServerNBTStorage);
     }
     catch (IOException e)
     {
         Utilities.LogException(e);
     }
 }
        public override void ConfirmClicked(bool par1, int par2)
        {
            if (DeleteClicked)
            {
                DeleteClicked = false;

                if (par1)
                {
                    ServerList.RemoveAt(par2);
                    SaveServerList();
                }

                Mc.DisplayGuiScreen(this);
            }
            else if (DirectClicked)
            {
                DirectClicked = false;

                if (par1)
                {
                    JoinServer(TempServer);
                }
                else
                {
                    Mc.DisplayGuiScreen(this);
                }
            }
            else if (AddClicked)
            {
                AddClicked = false;

                if (par1)
                {
                    ServerList.Add(TempServer);
                    SaveServerList();
                }

                Mc.DisplayGuiScreen(this);
            }
            else if (EditClicked)
            {
                EditClicked = false;

                if (par1)
                {
                    ServerNBTStorage servernbtstorage = ServerList[SelectedServer];
                    servernbtstorage.Name = TempServer.Name;
                    servernbtstorage.Host = TempServer.Host;
                    SaveServerList();
                }

                Mc.DisplayGuiScreen(this);
            }
        }
 public GuiMultiplayer(GuiScreen par1GuiScreen)
 {
     ServerList     = new List <ServerNBTStorage>();
     SelectedServer = -1;
     DeleteClicked  = false;
     AddClicked     = false;
     EditClicked    = false;
     DirectClicked  = false;
     LagTooltip     = null;
     TempServer     = null;
     ParentScreen   = par1GuiScreen;
 }
        /// <summary>
        /// Load the server list from servers.dat
        /// </summary>
        private void LoadServerList()
        {
            try
            {
                NBTTagCompound nbttagcompound = CompressedStreamTools.Read(System.IO.Path.Combine(Mc.McDataDir, "servers.dat"));
                NBTTagList     nbttaglist     = nbttagcompound.GetTagList("servers");
                ServerList.Clear();

                for (int i = 0; i < nbttaglist.TagCount(); i++)
                {
                    ServerList.Add(ServerNBTStorage.CreateServerNBTStorage((NBTTagCompound)nbttaglist.TagAt(i)));
                }
            }
            catch (Exception exception)
            {
                Utilities.LogException(exception);
            }
        }
        /// <summary>
        /// Join server by ServerNBTStorage
        /// </summary>
        private void JoinServer(ServerNBTStorage par1ServerNBTStorage)
        {
            string s = par1ServerNBTStorage.Host;

            string[] @as = StringHelperClass.StringSplit(s, ":", true);

            if (s.StartsWith("["))
            {
                int i = s.IndexOf("]");

                if (i > 0)
                {
                    string s1 = s.Substring(1, i - 1);
                    string s2 = s.Substring(i + 1).Trim();

                    if (s2.StartsWith(":") && s2.Length > 0)
                    {
                        s2     = s2.Substring(1);
                        @as    = new string[2];
                        @as[0] = s1;
                        @as[1] = s2;
                    }
                    else
                    {
                        @as    = new string[1];
                        @as[0] = s1;
                    }
                }
            }

            if (@as.Length > 2)
            {
                @as    = new string[1];
                @as[0] = s;
            }

            Mc.DisplayGuiScreen(new GuiConnecting(Mc, @as[0], @as.Length <= 1 ? 25565 : ParseIntWithDefault(@as[1], 25565)));
        }
 public GuiScreenAddServer(GuiScreen par1GuiScreen, ServerNBTStorage par2ServerNBTStorage)
 {
     ParentGui        = par1GuiScreen;
     ServerNBTStorage = par2ServerNBTStorage;
 }
        protected override void DrawSlot(int par1, int par2, int par3, int par4, Tessellator par5Tessellator)
        {
            ServerNBTStorage servernbtstorage = GuiMultiplayer.GetServerList(ParentGui)[par1];

            lock (GuiMultiplayer.GetLock())
            {
                if (GuiMultiplayer.GetThreadsPending() < 5 && !servernbtstorage.Polled)
                {
                    servernbtstorage.Polled      = true;
                    servernbtstorage.Lag         = -2L;
                    servernbtstorage.Motd        = "";
                    servernbtstorage.PlayerCount = "";
                    GuiMultiplayer.IncrementThreadsPending();

                    Action pollServers = () =>
                    {
                        try
                        {
                            servernbtstorage.Motd = "Polling..";
                            long l = JavaHelper.NanoTime();
                            GuiMultiplayer.PollServer(ParentGui, servernbtstorage);
                            long l1 = JavaHelper.NanoTime();
                            servernbtstorage.Lag = (l1 - l) / 0xf4240L;
                        }
                        catch (SocketException sockettimeoutexception)
                        {
                            Utilities.LogException(sockettimeoutexception);

                            servernbtstorage.Lag  = -1L;
                            servernbtstorage.Motd = "Can't reach server";
                        }
                        catch (IOException ioexception)
                        {
                            Utilities.LogException(ioexception);

                            servernbtstorage.Lag  = -1L;
                            servernbtstorage.Motd = "Communication error";
                        }
                        catch (Exception exception)
                        {
                            Utilities.LogException(exception);

                            servernbtstorage.Lag  = -1L;
                            servernbtstorage.Motd = (new StringBuilder()).Append("ERROR: ").Append(exception.GetType()).ToString();
                        }
                        finally
                        {
                            lock (GuiMultiplayer.GetLock())
                            {
                                GuiMultiplayer.DecrementThreadsPending();
                            }
                        }
                    };

                    new Thread(new ThreadStart(pollServers)).Start();
                }
            }

            ParentGui.DrawString(ParentGui.FontRenderer, servernbtstorage.Name, par2 + 2, par3 + 1, 0xffffff);
            ParentGui.DrawString(ParentGui.FontRenderer, servernbtstorage.Motd, par2 + 2, par3 + 12, 0x808080);
            ParentGui.DrawString(ParentGui.FontRenderer, servernbtstorage.PlayerCount, (par2 + 215) - (int)ParentGui.FontRenderer.GetStringWidth(servernbtstorage.PlayerCount), par3 + 12, 0x808080);
            ParentGui.DrawString(ParentGui.FontRenderer, servernbtstorage.Host, par2 + 2, par3 + 12 + 11, 0x303030);
            //GL.Color4(1.0F, 1.0F, 1.0F, 1.0F);
            ParentGui.Mc.RenderEngine.BindTexture("gui.icons.png");
            string s = "";
            int    i;
            int    j;

            if (servernbtstorage.Polled && servernbtstorage.Lag != -2L)
            {
                i = 0;
                j = 0;

                if (servernbtstorage.Lag < 0L)
                {
                    j = 5;
                }
                else if (servernbtstorage.Lag < 150L)
                {
                    j = 0;
                }
                else if (servernbtstorage.Lag < 300L)
                {
                    j = 1;
                }
                else if (servernbtstorage.Lag < 600L)
                {
                    j = 2;
                }
                else if (servernbtstorage.Lag < 1000L)
                {
                    j = 3;
                }
                else
                {
                    j = 4;
                }

                if (servernbtstorage.Lag < 0L)
                {
                    s = "(no connection)";
                }
                else
                {
                    s = (new StringBuilder()).Append(servernbtstorage.Lag).Append("ms").ToString();
                }
            }
            else
            {
                i = 1;
                j = (int)(JavaHelper.CurrentTimeMillis() / 100L + (long)(par1 * 2) & 7L);

                if (j > 4)
                {
                    j = 8 - j;
                }

                s = "Polling..";
            }

            ParentGui.DrawTexturedModalRect(par2 + 205, par3, 0 + i * 10, 176 + j * 8, 10, 8);
            sbyte byte0 = 4;

            if (MouseX >= (par2 + 205) - byte0 && MouseY >= par3 - byte0 && MouseX <= par2 + 205 + 10 + byte0 && MouseY <= par3 + 8 + byte0)
            {
                GuiMultiplayer.SetTooltipText(ParentGui, s);
            }
        }
        /// <summary>
        /// Poll server for MOTD, lag, and player count/max
        /// </summary>
        //JAVA TO C# CONVERTER WARNING: Method 'throws' clauses are not available in .NET:
        //ORIGINAL LINE: private void pollServer(ServerNBTStorage par1ServerNBTStorage) throws IOException
        public void PollServer(ServerNBTStorage par1ServerNBTStorage)
        {
            string s = par1ServerNBTStorage.Host;

            string[] @as = StringHelperClass.StringSplit(s, ":", true);

            if (s.StartsWith("["))
            {
                int i = s.IndexOf("]");

                if (i > 0)
                {
                    string s2 = s.Substring(1, i - 1);
                    string s3 = s.Substring(i + 1).Trim();

                    if (s3.StartsWith(":") && s3.Length > 0)
                    {
                        s3     = s3.Substring(1);
                        @as    = new string[2];
                        @as[0] = s2;
                        @as[1] = s3;
                    }
                    else
                    {
                        @as    = new string[1];
                        @as[0] = s2;
                    }
                }
            }

            if (@as.Length > 2)
            {
                @as    = new string[1];
                @as[0] = s;
            }

            string        s1         = @as[0];
            int           j          = @as.Length <= 1 ? 25565 : ParseIntWithDefault(@as[1], 25565);
            Socket        socket     = null;
            NetworkStream dataStream = null;

            try
            {
                socket             = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.SendTimeout = 3000;
                //socket.SetTcpNoDelay(true);
                //socket.SetTrafficClass(18);
                socket.Connect(s1, j);
                dataStream = new NetworkStream(socket);
                dataStream.WriteByte(254);

                if (dataStream.ReadByte() != 255)
                {
                    throw new IOException("Bad message");
                }

                string s4 = Packet.ReadString(new BinaryReader(dataStream), 256);
                char[] ac = s4.ToCharArray();

                for (int k = 0; k < ac.Length; k++)
                {
                    if (ac[k] != '\u0247' && ChatAllowedCharacters.AllowedCharacters.IndexOf(ac[k]) < 0)
                    {
                        ac[k] = '?';
                    }
                }
                s4 = new string(ac);
                string[] as1 = StringHelperClass.StringSplit(s4, "\u0247", true);
                s4 = as1[0];
                int l  = -1;
                int i1 = -1;
                try
                {
                    l  = Convert.ToInt32(as1[1]);
                    i1 = Convert.ToInt32(as1[2]);
                }
                catch (Exception exception)
                {
                    Utilities.LogException(exception);
                }

                par1ServerNBTStorage.Motd = (new StringBuilder()).Append("\u02477").Append(s4).ToString();

                if (l >= 0 && i1 > 0)
                {
                    par1ServerNBTStorage.PlayerCount = (new StringBuilder()).Append("\u02477").Append(l).Append("\u02478/\u02477").Append(i1).ToString();
                }
                else
                {
                    par1ServerNBTStorage.PlayerCount = "\u02478???";
                }
            }
            finally
            {
                try
                {
                    if (dataStream != null)
                    {
                        dataStream.Close();
                    }
                }
                catch (Exception throwable)
                {
                    Utilities.LogException(throwable);
                }

                try
                {
                    if (socket != null)
                    {
                        socket.Close();
                    }
                }
                catch (Exception throwable2)
                {
                    Utilities.LogException(throwable2);
                }
            }
        }
Пример #10
0
 public GuiScreenServerList(GuiScreen par1GuiScreen, ServerNBTStorage par2ServerNBTStorage)
 {
     GuiScreen         = par1GuiScreen;
     ServerListStorage = par2ServerNBTStorage;
 }