Example #1
0
        public void HandleResponce(IObject obj)
        {
            Log.Debug("Handle RpcResult");

            var message = obj.Cast <TRpcResult>();

            Log.Debug($"Process RpcResult  with request id = '{message.ReqMsgId}'");

            ConfirmationRecieveService.ConfirmRequest(message.ReqMsgId);

            switch (message.Result)
            {
            case TRpcError error:
                HandleRpcError(message.ReqMsgId, error);
                break;

            case TgZipPacked zipPacked:
                var result = ZipPackedHandler.HandleGZipPacked(zipPacked);
                ResponseResultSetter.ReturnResult(message.ReqMsgId, result);
                break;

            default:
                ResponseResultSetter.ReturnResult(message.ReqMsgId, message.Result);
                break;
            }
        }
Example #2
0
        private void HandleRpcError(long messageReqMsgId, TRpcError error)
        {
            // rpc_error

            Log.Warn($"Recieve error from server: {error.ErrorMessage}");

            Exception exception;

            switch (error.ErrorMessage)
            {
            case var floodMessage when floodMessage.StartsWith("FLOOD_WAIT_"):
                var floodMessageTime = Regex.Match(floodMessage, @"\d+").Value;

                var seconds = int.Parse(floodMessageTime);
                exception = new FloodException(TimeSpan.FromSeconds(seconds));
                break;

            case var phoneMigrate when phoneMigrate.StartsWith("PHONE_MIGRATE_"):
                var phoneMigrateDcNumber = Regex.Match(phoneMigrate, @"\d+").Value;

                var phoneMigrateDcIdx = int.Parse(phoneMigrateDcNumber);
                exception = new PhoneMigrationException(phoneMigrateDcIdx);
                break;

            case var fileMigrate when fileMigrate.StartsWith("FILE_MIGRATE_"):
                var fileMigrateDcNumber = Regex.Match(fileMigrate, @"\d+").Value;

                var fileMigrateDcIdx = int.Parse(fileMigrateDcNumber);
                exception = new FileMigrationException(fileMigrateDcIdx);
                break;

            case var userMigrate when userMigrate.StartsWith("USER_MIGRATE_"):
                var userMigrateDcNumber = Regex.Match(userMigrate, @"\d+").Value;

                var userMigrateDcIdx = int.Parse(userMigrateDcNumber);
                exception = new UserMigrationException(userMigrateDcIdx);
                break;

            case "PHONE_CODE_INVALID":
                exception = new InvalidPhoneCodeException("The numeric code used to authenticate does not match the numeric code sent by SMS/Telegram");
                break;

            case "SESSION_PASSWORD_NEEDED":
                exception = new CloudPasswordNeededException("This Account has Cloud Password !");
                break;

            case "AUTH_RESTART":
                ResponseResultSetter.ReturnException(new AuthRestartException());
                return;

            default:
                exception = new InvalidOperationException(error.ErrorMessage);
                break;
            }

            ResponseResultSetter.ReturnException(messageReqMsgId, exception);
        }
        public void HandleResponce(IObject obj)
        {
            var message = obj.Cast <TBadServerSalt>();

            Log.Info($"Bad server sault detected! message id = {message.BadMsgId} ");

            ClientSettings.Session.Salt = message.NewServerSalt;

            ResponseResultSetter.ReturnException(message.BadMsgId, new BadServerSaltException());
        }