Правильное многопоточное клиент-серверное(чат) TCP/IP взаимодействие. C#

Помогите разобраться как лучше всего поступить в сложившейся ситуации, перед тем, как я начну писать и потом 100500 раз переписывать. Есть уже реализованное мною многопоточное клиент-серверное взаимодействие(никакого UI, только тесты). Какие фрагменты кода нужно будет добавить - напишите, пожалуйста, в комментах. И есть основная "проблема", в кавычках - до конца не уверен, что это на самом деле проблема. Помимо стандартного взаимодействия по типу клиент-сервер(отправка сообщений) есть некий дополнительный функционал: к примеру, есть event и у клиента, и у сервера. Инициируется это событие тогда, когда приходит сообщение от сервера к клиенту, или от клиента на сервер. Это первый момент. Теперь появляется класс, который хранит сообщения от каждого клиента(пускай будет Хранилище сообщений клиента). Второй момент: типы, которые обрабатывают событие поступления сообщения на сервер, должны добавить это сообщение в Хранилище сообщений клиентов. А теперь к первому вопросу, по своей глупости я подумал(в ТЗ нет никаких четких инструкций на этот счет), что хранилище класса, отвечающего за хранение сообщений клиента, должно быть вот такого вида Dictionary<TcpClient, List<String>>, а теперь мне в голову ударила мысль, что оно(хранилище) должно быть вот такого вида Dictionary<Client, List<string>>. Но, тут, опять таки, начинают терзать смутные сомнения касательно вида Dictionary<Client, List<string>>. Почему? Потому что класс Client - серверный клиент, и он ничего не знает(и я не хочу, чтобы знал, стараюсь в SPR) про какие-то лишние моменты, не связанные с работой на сервере. То есть, у него нет ни единого поля, типа, имя, фамилия и т.д. Так вот я и думаю, что надо может, на худой конец создать структуру, к примеру, ClientStruct, где поместить какие-то поля, связанные с конкретным клиентом: id тот же, и смело сделать хранилище вида Dictionary<ClientStruct, List<string>> 'Это был первый вопрос, чтобы задать второй, нужно разобраться сначала с этим. Спасибо.


Ответы (0 шт):