SkepticalFox 1,445 #298304 Posted November 10, 2015 (edited) del Edited November 11, 2015 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
POLIROID 210 #298305 Posted November 10, 2015 нельзя) о_О перехватываем browser._WebBrowser__browser.script.onAddConsoleMessage В яваскрипте console.log("Хоть JSON Хоть XML хоть просто чтото в вашем собственном формате") Что я делаю не так? =) Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #298307 Posted November 10, 2015 (edited) del Edited November 11, 2015 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
POLIROID 210 #298321 Posted November 10, 2015 (edited) Самое интересное и не написал... вы о обертках для питона говорили... Либо на вы, либо на ты, ато както непонятно =) Итак поехали, я имелл ввиду мост python (игровой код) <=> javascript (на загруженной игровым браузером странице) А именно настройка такого моста без использования флеша, и велосипедов в стиле локального сервера etc... Готовый код я не предоставлю, но смысл от него, если не охота самому разобратся то понять как оно работает будет трудно. В любом случае делается примерно так: кусок кода на питоне def __newOnBeginLoadingFrameCB(frameId, isMainFrame, url): print '__newOnBeginLoadingFrameCB', url, frameId, isMainFrame if '[gamecall]' in url: if self.__browser._WebBrowser__browser: self.__browser._WebBrowser__browser.stop() # распарсить return __oldOnBeginLoadingFrameCB(frameId, isMainFrame, url) def __newOnAddConsoleMessage(message, lineNumber, source): print '__newOnAddConsoleMessage', message, lineNumber, source if '[gamecall]' in message: # распарсить return __oldOnBeginLoadingFrameCB(message, lineNumber, source) browserID = yield game_control.g_instance.browser.load(url) browser = game_control.g_instance.browser.getBrowser(browserID) # Вот это для перехвата загрузки страниц __oldOnBeginLoadingFrameCB = browser._WebBrowser__browser.script.onBeginLoadingFrame browser._WebBrowser__browser.script.onBeginLoadingFrame = __newOnBeginLoadingFrameCB # Вот это для перехвата принтов в консоль браузера browser._WebBrowser__browser.script.onAddConsoleMessage = __newOnAddConsoleMessage __oldOnBeginLoadingFrameCB = browser._WebBrowser__browser.script.onAddConsoleMessage аналогичный кусок на HTML-e который собстно и грузим браузером <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8" /> <script> function toPython() { console.log('[gamecall]{"bool": true, "int": 1, "float": 2.3, "string": "test"}'); } </script> </head> <body> <button onclick="toPython()">test</button> </body> </html> Ну и кусок игрового лога INFO: __newOnBeginLoadingFrameCB file:///gui/maps/bg.png 1 1 INFO: __newOnBeginLoadingFrameCB file:///res_mods/0.9.12/scripts/client/gui/mods/mod_browserTest/test.html 1 1 INFO: __newOnAddConsoleMessage [gamecall]{"bool": true, "int": 1, "float": 2.3, "string": "test"} 12 file:///res_mods/0.9.12/scripts/client/gui/mods/mod_browserTest/test.html Edited November 10, 2015 by POLIROID 1 1 Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #298323 Posted November 10, 2015 Либо на вы, либо на ты, ато както непонятно =)Самым понятным для меня способом был локальный сервер(была необходимость вызывать из другого приложения питон функции и локальный сервер - самый бескостыльный способ в этом плане). То что Вы сейчас написали - очень интересная тема. Большое спасибо! Quote Share this post Link to post Short link Share on other sites
POLIROID 210 #298325 Posted November 10, 2015 Самым понятным для меня способом был локальный сервер(была необходимость вызывать из другого приложения питон функции и локальный сервер - самый бескостыльный способ в этом плане). То что Вы сейчас написали - очень интересная тема. Большое спасибо! У меня из реализаций передачи данных из игры и в игру для другого софта используются сокеты в основном, гонять данные там проще посредством локальных TCP/UDP пакетов. (парсер ютуб и твитч коментариев + информации о стриме в онлайне для вывода в GUI игры). А вот реализация с браузером (то что тут обсуждали на первых страницах) это по части PMOD-a наработки делал, там надо было делать ресайз окна, смену заголовка, и двух сторонюю передачу данных. В любом случае готовую реализацию можно всегда подсмотреть в моде WGStream, там ребята на славу постарались, и навелосипедили кучу годноты =) Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #298327 Posted November 10, 2015 (edited) @POLIROID, я разобрался. Добавил к примерам. Edited November 11, 2015 by ShadowHunterRUS Quote Share this post Link to post Short link Share on other sites
BossBox 14 #298341 Posted November 11, 2015 (edited) Значит лучший способ передать что-то в питон - это использовать console.log? Ну не лучший способ для передачи в питон, а лучший способ при работе с браузером в игре. Edited November 11, 2015 by BossBox Quote Share this post Link to post Short link Share on other sites
SkepticalFox 1,445 #298346 Posted November 11, 2015 Ну не лучший способ для передачи в питон, а лучший способ при работе с браузером в игре.а я это и имел ввиду, или нет? Quote Share this post Link to post Short link Share on other sites