Diff Main Machine - сервер, который работает на веб сокетах.
- Подключение и регистрация модулей различных типов (подробнее о типа см. ниже)
- Обработка diff
- Хранение diff для повторного использования
- Хранение исходников библиотек
Перед началом работы каждый модуль должен зарегистрироваться. Для этого после откртия канала через web socket необходимо прислать серверу команду setModuleType с типом подключенного модуля.
Возможные типы:
- interface - интерфейс
- documentation - модуль нахождения diff по документации
- code - модуль нахождения diff по коду
- fat model code - модуль, строящий model по коду
- source migrate - модуль, для миграции с одной версии библиотеки на другую
- diff machine - модуль, нахождения diff по fat model
Команда отправляется с помощью JSON.
Пример команды:
{
"cmd" : "setModuleType"
"data" : "interface"
}
После отправки клиенту придет сообщения вида:
{
status: "success"
type: "setType"
data: "now module type is interface"
}
При успешном запросе
{
status: "error"
message: "module type is undefined"
}
После ошибки
Получить все библиотеки, хранящиеся на сервере
Пример:
{
"cmd" : "getDirs"
}
После отправки клиенту придет сообщения вида:
{
status: "success"
type: "dirs"
data: ['dirs', 'array']
}
При успешном запросе
{
status: "error"
message: "can't read libs dirs"
}
После ошибки
Получить директорию по указанному пути
Пример:
{
"cmd" : "getDir"
"data" : "path\to\dir"
}
После отправки клиенту придет сообщения вида:
{
status: "success"
type: "dir"
data: ['dirs', 'and', 'files', 'array']
}
При успешном запросе
{
status: "error"
message: "can't read libs dir"
}
После ошибки
Получить файл по указанному пути
Пример:
{
"cmd" : "getFile"
"data" : "path\to\file"
}
После отправки клиенту придет сообщения вида:
{
status: "success"
type: "file"
data: 'file content'
}
При успешном запросе
{
status: "error"
message: "can't read file"
}
После ошибки
Получить diff для указанных файлов
Пример:
{
"cmd" : "getDiff"
"data" : {
"libV1Path" : "path\to\file"
"libV2Path" : "path\to\file"
}
}
После обработки и отправки клиенту придет сообщения вида:
{
status: "success"
type: "getDiffs"
data: {[{
your: "your"
difs: "difs"
},{
your: "your"
difs: "difs"
}]}
}
При успешном запросе
Модуль должен начать обработку __diff__ после получения сообщения вида:
{
"type" : "request"
"data" : {
"key" : key
"libV1PathDoc" : "path\to\lib1\doc"
"libV2PathDoc" : "path\to\lib2\doc"
"libV1PathSrc" : "path\to\lib1\src"
"libV2PathSrc" : "path\to\lib2\src"
}
}
Для отправки обработанных diff используются следующие команды:
команда используется при отправлении на сервер списка найденных diff
Пример:
{
"cmd" : "pushDiff"
"data" : {
"key" : key
"diffList" : diffList
}
}
diffList - список найденных diff, а key - id запроса
команда используется при отправлении на сервер xml модели кода
Пример:
{
"cmd" : "pushModel"
"data" : {
"key": key
"xmlModel": xmlModel
}
}
xmlModel - xml модель по коду, а key - id запроса