示例#1
0
        private void auth()
        {
            AuthBtn.IsEnabled   = false;
            TEmail.IsEnabled    = false;
            TPassword.IsEnabled = false;

            using (HttpRequest request = new HttpRequest())
            {
                try
                {
                    RequestParams data = new RequestParams();
                    data["email"]    = TEmail.Text;
                    data["password"] = Crypto.Sha256(Encoding.UTF8.GetBytes(TPassword.Password));
                    data["hwid"]     = HWID.GetSign(TEmail.Text);
                    data["game_id"]  = ClientData.GameId;

                    string result = request.Post($"{ClientData.AppDomain}/api/login", data).ToString();
                    ServerResponse <UserData> response = JsonConvert.DeserializeObject <ServerResponse <UserData> >(result);
                    Clipboard.SetText(JsonConvert.SerializeObject(response));
                    switch (response.code)
                    {
                    case ServerCodes.API_CODE_GAME_NOT_FOUND:
                        throw new Exception("Игра не найдена!");

                    case ServerCodes.API_CODE_USER_NOT_FOUND:
                        throw new Exception("Пользователь не найден");

                    case ServerCodes.API_CODE_SUBSCRIPTION_EXPIRY:
                        throw new Exception("Не найдено активной подписки!");

                    case ServerCodes.API_CODE_HWID_ERROR:
                        throw new Exception("Аккаунт привязан к другому устройству");

                    case ServerCodes.API_CODE_USER_BLOCKED:
                        throw new Exception("Возможности аккаунта ограничены!");

                    case ServerCodes.API_CODE_SUBSCRIPTION_DUPLICATE:
                        throw new Exception("На ваше устройство уже оформлена подписка на эту же игру");

                    case ServerCodes.API_CODE_OK:
                        ClientData.Logged = true;
                        ClientData.Data   = response.data;
                        if (CBSave.IsChecked.HasValue && CBSave.IsChecked.Value)
                        {
                            Properties.Settings.Default.login    = TEmail.Text;
                            Properties.Settings.Default.password = TPassword.Password;
                            Properties.Settings.Default.Save();
                        }
                        Close();
                        break;

                    default:
                        throw new Exception($"Неизвестная ошибка: {response.code}");
                    }
                }
                catch (Exception ex)
                {
                    AuthMessage.Content      = ex.Message;
                    SnackbarMessage.IsActive = true;
                }
                finally
                {
                    AuthBtn.IsEnabled   = true;
                    TEmail.IsEnabled    = true;
                    TPassword.IsEnabled = true;
                }
            }
        }
        private void MainForm_Loaded(object sender, RoutedEventArgs e)
        {
            TVersion.Content += ClientData.VERSION;
            _hwid             = HWID.GetSign();
            WebSocket ws = new WebSocket("wss://skinchanger.cc/api/software_v2/");
            ServerRequest <AuthData> sr = new ServerRequest <AuthData>()
            {
                data = new AuthData {
                    hwid = _hwid
                },
                type = "demoConnect"
            };


            ws.OnError += (o, argc) =>
            {
                startStatus(false, "Ошибка");
            };

            ws.OnMessage += (o, args) =>
            {
                JObject obj = JObject.Parse(args.Data);
                switch (obj["type"].ToString())
                {
                case "demoConnect":
                    switch (obj["status"].ToObject <ServerCodes>())
                    {
                    case ServerCodes.API_CODE_OK:
                        if (obj["data"]["version"].ToObject <int>() > ClientData.LAST_UPDATE)
                        {
                            showMessage("Вышло новое обновление! Загрузите новую версию с нашего сайта.", "Скачать", "open_url", ClientData.SKINCHANGER_CC);
                            startStatus(false, "Вышло обновление");
                            return;
                        }

                        Dispatcher?.Invoke(() =>
                        {
                            TOnline.Content        = obj["data"]["online"].ToString();
                            BStartButton.IsEnabled = true;
                            checkSkinChangerStarted();
                        });


                        break;

                    case ServerCodes.API_CODE_PROHIBDED:
                        checkSkinChangerStarted();
                        break;
                    }
                    break;

                case "online":
                    Dispatcher?.Invoke(() => { TOnline.Content = obj["data"]["online"].ToString(); });
                    break;

                case "update":
                    showMessage("Вышло новое обновление! Загрузите новую версию с нашего сайта.", "Скачать", "open_url", ClientData.SKINCHANGER_CC);
                    startStatus(false, "Вышло обновление");
                    break;
                }
            };

            ws.Connect();
            ws.Send(JsonConvert.SerializeObject(sr));

            _timer.Interval = TimeSpan.FromSeconds(1);
            _timer.Tick    += (o, args) =>
            {
                IntPtr hWnd = NativeMethods.FindWindowA(IntPtr.Zero, "Counter-Strike: Global Offensive");
                if (hWnd == IntPtr.Zero)
                {
                    _status = false;
                    Dispatcher?.Invoke(() =>
                    {
                        startStatus(true, "Запустить");
                    });
                }
            };
        }