Клиент для подключение с сайта к чату мобильного приложения

Цена договорная
16 октября 2019, 12:18 • 2 отклика • 49 просмотров
Схема:
отдельный сервер на котором расположен сайт.
отдельный сервер на котором серверная часть мобильное приложения с чатом (ASP.NET Core)

Задача:
Создать для сайта клиент подключения к чату мобильного приложения.
Для подключения к чату используется библиотека вебсокетов SignalR
Сервер принимает запросы для следующих методов
1. Authorize(string chatID, int senderType, string oneSignalID)
chatID - ID чата, к которому подключиться (в случае с менеджером, приложение должно уже знать этот ID, ведь он уже подключается к конкретному чату пользователя)
SenderType //0 - пользователь, 1 - менеджер
oneSignalID - "playerID", который назначает сервис OneSignal
2. SendMessage(MessageSendDTO message)
описание объекта MessageSendDTO:
int MessageType //0 - текстовое сообщение, 1 - файл
int SenderType //0 - сообщение от пользователя, 1 - от менеджера
string Text //текст сообщения (либо ID файла)
string ChatID //ID чата, куда нужно отправить сообщение
3. FileToServer(string fileName, int chunkCount, int i, byte[] chunk)
fileName - имя файлай загружается на сервер
chunkCount - количество кусков, на которые разделён файл. Файл перед отправкой делится на куски по 16384 байт (последний кусок может отличаться по размеру, так как содержит остаток). Обеспечивать последовательный порядок отправки кусков НЕ обязательно.
i - номер текущего куска (первый кусок имеет номер 0)
chunk - массив байт, содержащий сам кусок
4. TryFinalizeFile(string fileName)
Этот метод необходимо вызвать после отправки всех кусков файла. Сервер проверит, все ли куски были доставлены, и в зависимости от этого вызовет один из ответных методов.
5. FileToClient(string fileID)
Запросить файл с сервера
6. MissedChunksRequest(string fileID, int[] missedChunks)
Сообщить серверу, какие куски файлов были пропущены (во время приёма файла)
fileName - имя файла
missedChunks - номера отсутствующих кусков, которые нужно отправить заново.
-------------------------------------------------------
Методы, которые сервер вызывает на клиенте (события)

1. Authorized(string chatID)
Срабатывает после вызова Authorize. Возвращает ID чата, к которому произошло подключение (в случае с приложением менеджера, он ID чата знал ещё до подключения, так что может игнорировать этот ID)

2. ReceiveMessage(MessageReceiveDTO message)
Срабатывает, когда собеседник присылает сообщение в чат.

описание объекта MessageReceiveDTO
int MessageType //0 - текстовое сообщение, 1 - файл
int SenderType //0 - сообщение от пользователя, 1 - от менеджера
string FileID //ID файла (используется только если MessageType == 1
string Text // Текст сообщения, если MessageType == 0, либо имя файла, если MessageType == 1
string Id //ID сообщения
DateTime MessageDate //Дата и время сообщения

3. ReceieveHistory(MessageReceiveDTO[] messages)
Срабатывает после подключения, содержит историю сообщений.

4. MissedChunksRequest(string fileName, int[] missedChunks)
Срабатывает в случае, если после вызова TryFinalizeFile сервер обнаружил, что не все куски файла были доставлены.
fileName - имя файла
missedChunks - номера отсутствующих кусков, которые нужно отправить заново.

5. FileTranserDone(string fileName, string fileID)
Срабатывает после вызова TryFinalizeFile, в случае если сервер успешно получил все куски файла

fileName - имя файла
fileID - присвоеный ID файла, который необходимо теперь отправить в сообщении с MessageType = 1.

6. FileFromServer(string fileID, int chunkCount, int i, byte[] chunk)
Срабатывает после запроса файла с сервера.
описание параметров такие же как в FileToServer

7. TryFinalizeFile(string fileName, string fileID)
Срабатывает, когда сервер считает что отправил все куски файла (необходимо проверить наличие всех кусков, если каких-то не хватает то вызвать MissedChunksRequest).