C # Websocket - Обмен сообщениями (типы данных?) - PullRequest
0 голосов
/ 06 мая 2019

Я настраиваю Websocket в C # и у меня возникают проблемы с пониманием взаимодействия между клиентом и сервером.Я создал решение (.sol) для клиента и решение для сервера.«WebSocketSharp» и «Newtonsoft.Json» - две библиотеки, которые я использую.У меня есть опыт работы с C # (VS), но не с веб-сокетами или сериализацией.Буду очень признателен за любую помощь.Хорошо, о проблеме ...

В приложении размещается аукцион, который сообщает клиентам информацию о продукте и цене предложения, одновременно прослушивая запросы клиентов.Сервер передает данные продукта клиентам, а сервер определяет объект Product в файле Product.cs НО , поскольку оба решения независимы, я не знаю, как разрешить им совместно использовать определение без избыточного определенияФайл «Product.cs» в решении Server.sol и файл «Product.cs» в решении Client.sol.

Мне интересно, можем ли мы это исправить с помощью ссылки на перекрестное решение иличто-то.Возможно, сервер может каким-то образом передать этот тип данных непосредственно клиенту, но я не знаю такой стратегии.

Вот пример ...

    public void BroadcastNewProduct(Product product) // "lets broadcast this new product that is being auctioned"
    {
        Sessions?.Broadcast(JsonConvert.SerializeObject(new Tuple<string, Product>("S_NewProductAlert", product))); // "we will clarify our message type with a tuple"
    }
    public void ReceiveNewProductMessage(void message)
    {
        Tuple<string, object> tuple = JsonConvert.DeserializeObject<Tuple<string, object>>(message); // "lets deserialize"
        switch(tuple.item1) // "lets see what type of message this is, by evaluating the header"
        {
            case "S_NewProductAlert": // "looks like the object is a new Product"
                productList.Add((Product)tuple.Item2);  // "so lets cast .. but wait, this requires a local Product definition too (which is redundant)"
            // "the server already has a definition for Product, but since it is defined in a separate solution, I can't access it!"
                break;
        // ... 
        } 
    } // Thanks for any help in advance :)

Я также чувствую себя неловко«Tuple» - средство связи между клиентом и сервером, поэтому я также буду признателен за любые предложения по типам данных.Инкапсуляция GetType () или наследование от абстрактного класса «Message» - это идеи, которые я рассмотрел, но главная проблема заключается в совместном использовании не примитивных типов данных.Спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...