Изменение имени оболочки в скобках приводит к ошибке подключения WebSocket - PullRequest
0 голосов
/ 26 августа 2018

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

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

Gruntfile.js - измените имя сборки enter image description here

appshell / config.h - измените имя приложения для Windows иosx enter image description here

appshell_config.gypi - также измените имя приложения enter image description here

После запуска 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.Я предполагаю, что есть 4-й конфигурационный файл, который мне нужно изменить, но я недостаточно знаком с Brackets, чтобы найти этот файл.Без подключения Live Preview и eslint не работают.

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

Я также пытался искать процессы на порту 50642, и сервер работает.enter image description here

1 Ответ

0 голосов
/ 30 августа 2018

Вам необходимо изменить 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"). Как вы можете видеть, он отклоняет любые соединения, которые не из скобок. Переименуйте скобки в любое название вашего приложения.

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

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

Congrats! Вы создали новые скобки.

enter image description here

...