Пример #1
0
        public LoginData Login(string username, string password, string publicServerKey)
        {
            StringWriter sw = new StringWriter();//&salt={4}
            string requestString = String.Format("username={0}&password={1}&server={2}"
                , username, password, publicServerKey);

            var request = (HttpWebRequest)WebRequest.Create(LoginUrl);
            request.Method = "POST";
            request.Timeout = 15000; // 15s timeout
            request.ContentType = "application/x-www-form-urlencoded";
            request.CachePolicy = new System.Net.Cache.RequestCachePolicy(System.Net.Cache.RequestCacheLevel.NoCacheNoStore);

            byte[] formData = Encoding.ASCII.GetBytes(requestString);
            request.ContentLength = formData.Length;

            System.Net.ServicePointManager.Expect100Continue = false; // fixes lighthttpd 417 error

            using (Stream requestStream = request.GetRequestStream())
            {
                requestStream.Write(formData, 0, formData.Length);
                requestStream.Flush();
            }

            WebResponse response = request.GetResponse();

            string responseText = null;
            using (StreamReader sr = new StreamReader(response.GetResponseStream()))
            {
                responseText = sr.ReadToEnd();
            }

            request.Abort();
            LoginData data = new LoginData();
            //Problem with current login.php: when both password and serverKey are incorrect then
            // response will be just "Wrong server" and won't contain "Wrong username".
            //Workaround: For checking password correctness
            //provide a good publicServerKey - some server from xml.php.
            data.PasswordCorrect = !(responseText.Contains("Wrong username") || responseText.Contains("Incorrect username"));
            data.ServerCorrect = !responseText.Contains("server");
            StringReader sr2 = new StringReader(responseText);
            try
            {
                string authcode = sr2.ReadLine();
                string ip = sr2.ReadLine();
                string port = sr2.ReadLine();
                data.AuthCode = authcode;
                data.ServerAddress = ip;
                data.Port = int.Parse(port);
            }
            catch
            {
            }
            return data;
        }
Пример #2
0
        private void ConnectToInternetGame(string qusername, string qpass, string qgameurl)
        {
            var oldclientgame = map;
            var oldnetwork = network;
            var oldterrain = terrain;
            internetgamefactory.NewInternetGame();
            //.newclientgame = internetgamefactory.GetClientGame();
            //.newnetwork = internetgamefactory.GetNetwork();
            //.newterrain = internetgamefactory.GetTerrain();
            //.newterrain.Start();
            var newnetwork = network;
            var newterrain = terrain;
            if (oldterrain is IDisposable) { ((IDisposable)oldterrain).Dispose(); }
            newterrain.Start();

            oldclientgame.Dispose();
            newnetwork.MapLoaded += new EventHandler<MapLoadedEventArgs>(network_MapLoaded);
            newnetwork.MapLoadingProgress += new EventHandler<MapLoadingProgressEventArgs>(newnetwork_MapLoadingProgress);

            oldnetwork.Dispose();

            new MethodInvoker(() =>
            {
                //game url can be
                //a) minecraft.net url
                //if (qgameurl.Contains("minecraft.net"))
                //{
                //}
                //b) just hash
                //c) ip:port (server must have disabled authorization checking).
                LoginData logindata = new LoginData();
                int? pport = null;
                if (qgameurl.Contains(":") && (!qgameurl.Contains("http")))
                {
                    pport = int.Parse(qgameurl.Substring(qgameurl.IndexOf(":") + 1).Trim());
                    qgameurl = qgameurl.Substring(0, qgameurl.IndexOf(":"));
                }
                if (mppassword == null)
                {
                    System.Net.IPAddress server2 = null;
                    try
                    {
                        logindata = login.Login(qusername, qpass, qgameurl);
                    }
                    catch (Exception e)
                    {
                        Console.WriteLine(e.ToString());
                    }
                    if (logindata == null)
                    {
                        logindata = new LoginData();
                    }
                    if (System.Net.IPAddress.TryParse(qgameurl, out server2))
                    {
                        logindata.serveraddress = server2.ToString();
                        logindata.port = 25565;
                        if (pport != null)
                        {
                            logindata.port = pport.Value;
                        }
                        if (logindata.mppass == null)
                        {
                            logindata.mppass = "";
                        }
                    }
                }
                else
                {
                    logindata.mppass = mppassword;
                    logindata.port = pport.Value;
                    logindata.serveraddress = qgameurl;
                }
                frametickmainthreadtodo.Add(
                    () =>
                    {
                        newnetwork.Connect(logindata.serveraddress, logindata.port, username, logindata.mppass);
                    }
                );
            }).BeginInvoke(null, null);
            GuiStateSetMapLoading();
        }