Перейти к содержанию

Передача нескольких карточек с клиента на сервер

Передача нескольких карточек с клиента на сервер

Рассмотрим случай, когда требуется написать кастомный запрос CardRequest, который на клиенте формирует несколько карточек Card (или любых других сериализуемых объектов-наследников StorageObject), а затем отдаёт их на сервер для пакетной обработки. Сервер можно создать SQL-транзакцию, в пределах которой сохранить несколько карточек и гарантировать, что будут сохранены все карточки или не будет сохранено ни одной.

Для этого в Tessa.Extensions.Shared пишут статический класс с фабрикой объектов, которые будут размещаться в запросе, который передаётся с клиента на сервер.

public static readonly IStorageValueFactory<int, Card> CardFactory = new DictionaryStorageValueFactory<int, Card>( (key, storage) => new Card(storage));

Потом в клиентском коде (Tessa.Extensions.Client) создают объект ListStorage<T> и наполняют его, в нашем случае объектами Card.

Card card1 = ...; Card card2 = ...;

var listStorage = new ListStorage<Card>(new List<object>(), CardFactory); listStorage.Add(card1); listStorage.Add(card2);

request.Info["Cards"] = listStorage.GetStorage();

В серверном обработчике, который получает запрос с клиента, объект ListStorage<T> создаётся из сериализованных данных, и дальше по нему можно итерироваться через foreach.

var list = request.Info.Get<IList<object>>("Cards"); var listStorage = new ListStorage<Card>(list, CardFactory);

foreach (Card card in listStorage) { // обрабатываем каждую из карточек }

Back to top