Изменение имени оболочки в скобках приводит к ошибке подключения 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! Вы создали Новые Кронштейны.