-
Notifications
You must be signed in to change notification settings - Fork 156
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
PDA: Messenger program system #48
Conversation
Обсуждение по месенджеру:
|
Немного дополнительной информации. Что было сделано:
Что нужно сделать:
|
@rincew1nd @TokDenis синканитесь по задаче тогда |
Мы уже. Я ему отдал исходники 3 дня назад. Просто решил сюда продублировать. |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
…tem and component, init messenger cartridge UI
|
Ready for review? |
Yes |
description: A machine printed circuit board for a messenger server. | ||
components: | ||
- type: MachineBoard | ||
prototype: CrewMonitoringServer |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Зачем добавлять CrewMonitoringServer
компонент к мессенджер серверу?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Копипаста, поправлю
- type: StationLimitedNetwork | ||
- type: DeviceNetwork | ||
deviceNetId: Wireless | ||
receiveFrequencyId: MessengerClient |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Нельзя заюзать уже существующие волны для PDA?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я пробовал, но тк сам клиент работает как отдельный компанент я решил не засорять пда и тем более можно накинуть клиент на любое entity и прописать логику работы. Как пример - консоль с которой можно отправить сообщения или вендинговый автомат который отправляет всем рекламу...
@@ -63,6 +63,7 @@ | |||
softness: 5 | |||
autoRot: true | |||
- type: Ringer | |||
- type: StationLimitedNetwork |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Ты ограничиваешь работу всего ПДА до одной станции. Если я не ошибаюсь, у тебя может быть несколько станций за один раунд, что приведёт к тому, что твой ПДА будет картошкой на других станциях.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, ограничение работает на текущю станцию (как я понял, можешь посмотреть), т.е. если ты перейдешь в другую станцию и там будет другой сервер, то пда свяжется с ним, а не будет отправлять сообщения на все сервера на карте.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Посмотрел по коду. Да ограничивает в пределах текущей станции на которой находишься. т.е. перейдешь на другую сеть сменится на сеть станции на которую перешел.
range: 500 | ||
- type: MessengerServer | ||
serverName: "Nanotrasen Messenger Server" | ||
- type: AccessReader |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Любой человек может зааксессить данные ислючая синдикат?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Да, (если у него тег !NuclearOperative) сейчас как я понял из вражеских доступов только NuclearOperative.
denyTags: [ "NuclearOperative" ] | ||
|
||
- type: entity | ||
id: PDASyndicateMessengerServer |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Зачем отдельный сервер для синдиката?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Как пример. Вроде у них есть свой корабль, не? Туда установить можно.
BroadcastCommand(uid, args.Loader, MessengerClientCommandCheckServer); | ||
} | ||
|
||
private void BroadcastCommand(EntityUid senderUid, EntityUid loaderUid, string command) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я правильно понял что ты оповещаешь все сервера о том что игрок поставил картридж?
Это в какой-то степени не правильно, так как игрок находится только на какой-то станции и может быть вне ренджа сервера.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Есть компонент StationLimitedNetwork он это отслеживает. Ренж отслеживает вроде WirelessNetworkConnection
case MessengerClientCartridgeSystem.MessengerClientCommandCheckServer: | ||
{ | ||
// check authorization to server before registration | ||
if (!AccessCheck(uid, args.Data)) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Заведи классы, которые будут соответствовать данным для каждого события, клади их в args.Data
с каким-нибудь нужным тебе ключём, конверти в нужный тип на сервере и не мучайся с парсерами.
if (args.Data.ContainsKey("payload") && args.Data["payload"] is PayloadType payload)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Немного не понял. Можешь подробнее? Это обязательно нужно в текущей итерации?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
В шарпе все классы это object. Object можно конвертнуть обратно в классы, так как object знает какой он был классом.
Если сделать ‘’’if(object is NewClass classObj)’’’, то код зайдёт в if только если объект нужного типа и конвертнулся нормально, а classObj будет заполнен инстансом.
args.Data это объект, который можно сделать отдельным классом на каждый тип ивентов. А потом смотреть на тип ивента и понимать в какой класс нужно конвертнуть данные. Если конвертация упала, то что-то пошло не так.
var message = new MessengerMessage(chatKey.Id, contactKey.Id, _gameTiming.CurTime, messageText); | ||
var messageKey = | ||
component.AddMessage(message); | ||
message.Id = messageKey.Id; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Айдишник должен заполняться внутри AddMessage. Передай с ref message
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
До записи в компонент ид не известно.
// and chats with every entity client | ||
var chatsList = new List<ChatKey>(); | ||
|
||
foreach (var (_, contact) in component.GetClientToContact()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Огромное колличество мусорных объектов в памяти. Зачем создавать чаты которых пока ещё даже нет.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Не такое уж и огромное. Так проще и расширять понятнее. Вот есть контакты, вот есть чаты, в чатах есть их члены и сообщения. Сообщения тоже отдельно хранятся. В общем небольшая база данных.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Окей. Видимо нужно учитывать что это не высоконагруженный сервак и у нас не десятки тысяч человек, наверно сможем выделить лишнюю память на кеш под раунд.
if (!Resolve(uid, ref component)) | ||
return; | ||
|
||
switch (command) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Энум
Посмотрел всё что касается сервера. UI не смотрел, не осталось свободного времени. |
Ещё тестов нет и они падают |
Выдаёт постоянно ошибку, мол, сервер не найден. |
Я на карту не добавлял. В поиске entity найди мессенджер и установи, клиент подключится при открытие UI |
Всё равно не видит сервер. К тому же, я его добавлял. |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
@TokDenis привет, есть что доделывать и мёржить или закрывать? |
Нужно доделать правки на которые указал rincew1nd, я напишу в дискорде когда будет готово. Думаю на неделе выделю несколько часиков |
This pull request has conflicts, please resolve those before we can evaluate the pull request. |
refactore nyarlathotep
PDA: Messenger program system
Добавил мессенджер программу для cartridge системы.
MessengerCartridgeComponent - хранит полученные сообщения и информацию о пользователе программы
MessengerCartridgeSystem - использует DeviceNetworkSystem для общения между мессенджерами, подробнее можно почитать в комментариях самой системы
Проблемы
TODO
Медиа
Проверки
Изменения