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

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

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

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

appshell / config.h - изменить имя приложения для windows и osx введите описание изображения здесь

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

После запуска grunt setup а также grunt build-mac мое приложение запускается и, кажется, работает нормально. Я могу изменить настройки в своем приложении, не затрагивая исходное приложение "Скобки" (поскольку они имеют разные 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, и сервер работает. введите описание изображения здесь

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

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

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

Congrats! Вы создали Новые Кронштейны.

Другие вопросы по тегам