Изменение имени оболочки Brackets приводит к ошибке подключения WebSocket

Я пытаюсь создать приложение, используя оболочку Brackets. В частности, я пытаюсь создать собственный редактор кода для проекта, поэтому вместо того, чтобы начинать с нуля, я изменяю Brackets.

До сих пор мне удавалось решить все проблемы, пока я не добрался до Brackets Shell. Я хочу иметь возможность установить свое приложение рядом с квадратными скобками, поэтому оно должно иметь другое имя и отдельные настройки. Я следил за этим руководством о том, как переименовать оболочку Brackets. приложение. Вот файлы, которые я изменил:

Gruntfile.js — изменить имя сборки введите здесь описание изображения

appshell/config.h — изменить имя приложения для Windows и OSX введите здесь описание изображения

appshell_config.gypi — также измените имя приложения введите описание изображения здесь

После запуска grunt setup и grunt build-mac мое приложение запускается и работает нормально. Я могу изменить настройки в своем приложении, не затрагивая исходное приложение Brackets (поскольку у них разные Application Support каталоги). Я не замечал никаких проблем, пока не открыл консоль, где увидел следующую ошибку:

WebSocket connection to 'ws://localhost:50642/' failed: HTTP Authentication failed;
no valid credentials available NodeConnection.js:84

Поэтому я попытался изменить имя моего приложения обратно на Brackets во всех трех файлах, и проблема исчезла. Я предполагаю, что где-то в коде приложение все еще пытается подключиться к исходному приложению с именем Brackets. Я предполагаю, что есть четвертый файл конфигурации, который мне нужно изменить, но я недостаточно знаком с Brackets, чтобы найти этот файл. Без связи Live Preview и eslint не работают.

Я попытался вставить console.trace, чтобы попытаться перепроектировать, как работает Node Connection между оболочкой Brackets и самим исходным кодом Brackets, но это мало помогло. Кто-нибудь знает, как изменить имя Brackets Sheel, не нарушая NodeConnection во время выполнения?

Я также попытался найти процессы на порту 50642, и сервер работает. введите здесь описание изображения


person Christian Juth    schedule 26.08.2018    source источник


Ответы (1)


Вам необходимо изменить Node Core

Brackets Shell аппаратно отклоняет любой вызов, который не исходит от приложений с именем Brackets. Откройте файл brackets/appshell/node-core/Server.js. Что касается ответа на этот вопрос, вам нужно изменить строку 205. На всякий случай, если в будущем это будет по-другому, вы можете найти фиксацию, которую я смотрю на здесь.

Вот что вызывает проблему:

wsServer = new WebSocket.Server({
    server: httpServer,
    verifyClient : function (info, callback) {
        // Accept connections originated from local system only
        // Also do a loose check on user-agent to accept connection only from Brackets CEF shell
        if (info.origin === "file://" && info.req.headers["user-agent"].indexOf(" Brackets") !== -1) {
            callback(true);
        } else {
            // Reject the connection
            callback(false);
        }
    }
});

Проблема info.req.headers["user-agent"].indexOf(" Brackets"). Как вы можете видеть, он отклоняет любые соединения, которые не из Brackets. Переименуйте скобки в то, что называется вашим приложением.

Убедитесь, что вы правильно отформатировали имя

Если в вашем приложении есть пробел (например, New Brackets), вы должны удалить пробел при проверке user-agent. В этом примере вы должны проверить, что user-agent выглядит так: info.req.headers["user-agent"].indexOf(" NewBrackets").

Поздравляем! Вы создали новые скобки.

введите здесь описание изображения

person Christian Juth    schedule 29.08.2018