Набросок интерфейса клиента. Ключ не экранирован, т. к. при тестировании мне так удобней, в боевой программе можно его скрывать.
Функционал протокола: можно загружать в хранилище предметы (по белому списку, чтобы не занимать место лишними данными), скачивать себе в инвентарь, передавать в хранилища других игроков, перемещать в криптоячейки, продавать/покупать через единый рынок.
Так как используется симметричное шифрование, приходится генерировать и передавать ключ игроку в буфер обмена, для защиты от рандом-флудеров можно использовать одноразовые пин-коды при подтверждении критичных операций. Можно перейти на асимметричное шифрование, использование упростится, но немного возрастет нагрузка на сервер.
Пока не решил, оставить монолитное ядро или вынести рынок отдельно, если разделить, то можно будет создавать кастомные сервисы - свои рынки/магазины/игровые автоматы, которые используют основное ядро как банк.