Jump to content
Korean Random
CyToTV

Магазин модов для WoT - "ModStore"

Recommended Posts

нельзя)

о_О

 

перехватываем browser._WebBrowser__browser.script.onAddConsoleMessage

В яваскрипте console.log("Хоть JSON Хоть XML хоть просто чтото в вашем собственном формате")

Что я делаю не так? =)

Share this post


Link to post

Short link
Share on other sites

Самое интересное и не написал...

вы о обертках для питона говорили...

Либо на вы, либо на ты, ато както непонятно =)

 

Итак поехали, я имелл ввиду мост 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 by POLIROID
  • Upvote 1
  • Downvote 1

Share this post


Link to post

Short link
Share on other sites

Либо на вы, либо на ты, ато както непонятно =)

Самым понятным для меня способом был локальный сервер(была необходимость вызывать из другого приложения питон функции и локальный сервер - самый бескостыльный способ в этом плане).

То что Вы сейчас написали - очень интересная тема.

Большое спасибо!

Share this post


Link to post

Short link
Share on other sites

Самым понятным для меня способом был локальный сервер(была необходимость вызывать из другого приложения питон функции и локальный сервер - самый бескостыльный способ в этом плане).

То что Вы сейчас написали - очень интересная тема.

Большое спасибо!

У меня из реализаций передачи данных из игры и в игру для другого софта используются сокеты в основном, гонять данные там проще посредством локальных TCP/UDP пакетов.

(парсер ютуб и твитч коментариев + информации о стриме в онлайне для вывода в GUI игры).

А вот реализация с браузером (то что тут обсуждали на первых страницах) это по части PMOD-a наработки делал, там надо было делать ресайз окна, смену заголовка, и двух сторонюю передачу данных.

В любом случае готовую реализацию можно всегда подсмотреть в моде WGStream, там ребята на славу постарались, и навелосипедили кучу годноты =)

Share this post


Link to post

Short link
Share on other sites
Значит лучший способ передать что-то в питон - это использовать console.log?

 

Ну не лучший способ для передачи в питон, а лучший способ при работе с браузером в игре.

Edited by BossBox

Share this post


Link to post

Short link
Share on other sites

Ну не лучший способ для передачи в питон, а лучший способ при работе с браузером в игре.

а я это и имел ввиду, или нет?

Share this post


Link to post

Short link
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...