Добрый день.
Вступление
Существует прототип онлайн игры на движке Unreal Engine 4, серверная часть которой состоит из двух серверов, самого Unreal Engine игрового сервера и логин сервера для авторизации, написаного на asp.net core web api.
Игровой сервер общается с логин сервером по http что и является проблемой, игровой сервер может отправлять запросы на логин сервер, а логин сервер отправлять на игровой не может. Можно делать костыли через long polling, но это не наш путь. Игровой движок умеет работать как в качестве http клиента так и в качестве socket клиента. Посему было принято решение перейти с http на сокеты. Так как сокеты позволяют держать двухстороннюю связть часами.
Что нам нужно
Нам нужен простенький сокет сервер, который будет уметь принимать входящие подключения, хранить их в коллекции и иметь буквально 2 эвента и три метода. Евент получения сообщения от клиента, эвент отключения клиента, метод отправки сообщения клиенту и метод отключения клиента сервером. По сути на ютубе есть куча работающих примеров сокет серверов на c#, только все они процедурные, а нам нужно что бы это было объектно-ориентированно. Пришло сообщение от клиента? Сработал эвент, нужно отправить сообщение клиенту? Вызываем метод.

По поводу socket клиента
По поводу клиента можете не волноваться, мы дадим тестовый проект Unreal Engine, который все умеет, подключаться (как с шифрованием так и без), отправлять сообщения, принимать сообщения и закрывать соединения.
Как мы планируем использовать данный сервер
В начале мы планируем создать прототип который будет асинхронным, объектро-ориентированным и будем уметь все то что описано на слайде выше. Принимать, хранить и если нужно закрывать подключения, принимить и отправлять клиентские сообщения. Принимая и отправляя сообщения в виде массива байт хотим иметь два метода, которые будут превращать эти массивы байт в utf-8 string и обратно. В будущем мы планируем расширить функционал данного сервера добавив в него TLS шифрование, сериализацию и десериализацию JSON.
Удобнее всего нам бы было получить объект данного сервера в качестве Class Library, так как мы хотим внедрить его в качестве Singleton-а в asp net web api приложение уже существующего логин сервера.
То есть логин сервер будет регистрировать игроков через веб сайт, через web api, а общаться уже с игровым сервером Unreal Engine посредством сокетов.