Jump to content
Korean Random
Dragon armor

Мод "Эмулятор сервера World of Tanks".

Recommended Posts

25 минут назад, Dragon armor сказал:

Их нетути. Только парсинг.

Вот например есть строка из baseapp.o

хм, реально нет куска 

 

видимо скопировать не успели :)

Share this post


Link to post

Short link
Share on other sites
5 минут назад, Dragon armor сказал:

Кроме файлов entity_description и *.o, ещё где-нибудь упоминание найдёшь?

image.thumb.png.2b5e78f3e01d7b5a57a4b29341b3d21e.png

Share this post


Link to post

Short link
Share on other sites

@DrWeb7_1 А исходников всё те же два файла. Нет примеров использования.

У меня очень запутанный парсинг def-файлов. Чего только названия функций стОят по 50+ символов длиной. Сейчас пытаюсь понять, можно куда-то эту секцию просто добавить, чтобы номера сообщений сдвинуть. Может поможет.

Просто сдвинуть по количеству TempProperties, чтобы посмотреть на результат, не заработало.

Share this post


Link to post

Short link
Share on other sites

Вот, кстати, в документации BigWorld описывается настройка XMPP-сервера. Ей ведь можно следовать для настройки оного для работы с эмулятором сервера игры или всё же есть некоторая куча собственных ухищрений?

Share this post


Link to post

Short link
Share on other sites
18 часов назад, DrWeb7_1 сказал:

или всё же есть некоторая куча собственных ухищрений

Вот даже не знаю. Немного ознакомился с XMPP, похоже, они все друг с другом совместимы. Т.е. нужно взять любой сервер и посмотреть, что клиент будет отправлять ему.

Что там по настройке в документации? Можешь скинуть или скрин показать.

 

С сетевыми пакетами получается огромная проблема. У меня сделано не правильно. До какой-то степени, всё работает. Но с индексацией есть ошибка. Это всё настолько запутано, что непонятно, для чего так сделано. Например, назначение индексов для методов. Было так: читается файл def и по-порядку идут индексы. А теперь: всё также, но в конце сортировка по длине сообщения (от количества аргументов). И после этого назначение индекса. При этом, ещё и флаги используются (Exposed), назначение которых уже не помню. Хотел сделать, чтобы просто работало, а получается, нужно углубляться.

У меня также ошибка в назначении диапазона для методов из def. Просто не помню, почему взял константами, видимо, не разобрался на тот момент. А диапазоны расчитываются в зависимости он начального количества предопределённых методов (это те, что в клиенте прописаны, а не в скриптах, типа логина и с десяток других). Да и тут у меня неправильно. Использую все 4 (property, client, base, cell), а надо по 2 на логин и сервер. А ещё и для арены надо как-то.

Четыре раза переписывал/дописывал/исправлял. Три разных реализации используется сейчас в моих инструментах. И ещё раз надо, хоть и не всё заново, но фундаментальную часть, основу переписать.

Share this post


Link to post

Short link
Share on other sites
2 минуты назад, Dragon armor сказал:

Можешь скинуть или скрин показать.

Могу всю PDF-ку целиком скинуть.

howto_xmpp.pdf

Share this post


Link to post

Short link
Share on other sites

@DrWeb7_1 Сейчас посмотрю.

Надо, наверное, ангаром немного заняться, там проверял, методы вызываются правильно. А арену немного на потом скинуть.

Share this post


Link to post

Short link
Share on other sites
On 7/19/2020 at 9:59 AM, DrWeb7_1 said:

As disgusting as it sounds, I'm more of a web page layout designer. HTML, CSS3, PHP - I understand this. Somehow I began to understand Python 3.8 (using the discord.py library for creating bots for Discord as an example).

I am fluent in PHP and webdev languages as well as nodeJS and JavaScript... all of which are NOT used in this mod :/

I've also created several Discord bots using NodeJS for a large server with 30 000 members in it. I am their primary/head developer if this helps :)

Share this post


Link to post

Short link
Share on other sites
24.07.2020 в 18:04, Dragon armor сказал:

@DrWeb7_1 Сейчас посмотрю.

Надо, наверное, ангаром немного заняться, там проверял, методы вызываются правильно. А арену немного на потом скинуть.

Ну что нашёл? Как успехи вообще. 

Share this post


Link to post

Short link
Share on other sites

@Plotnik5252ru Никаких успехов.

С Windows не так-то и много серверов xmpp. Единственный прмемлемый сервер - это jabberd2. С заявленной поддержкой Windows у меня ушло несколько дней, чтобы исправить все ошибки этой заявленной поддержки. Похоже, что несколько лет никто не притрагивался к той части проекта. Отсутствующие или переименованные файлы - это малое из того, что пришлось доделывать. Ну и да, скомпилированных бинарников нет, типа надо - сделай сам. Или, скорее всего, никому под Windows не надо.

Далее непреодолимо сейчас, это заставить это поделие понимать тег ![CDATA[]]. И вот тут уже бессилен. Опять столкнулся с проблемой, которую решаю уже с момента моего последнего сообщения здесь. В одном месте нашёл, добавил специальный обработчик прямо в код, потому что эта хрень, видили те, не хочет знать о чём-то другом, чтобы можно было через плагины расширить функциональность. Но это не помогло, потому что где-то в недрах этого недоразумения опять происходит парсинг сообщения до отправки, но уже через другую копию парсера (со своим набором колбеков, парсер expat кстати), а не ту, которая используется в первом случае. И этот тег режится, остаётся только то, что в скобках указано, а не всё, как должно быть. А после того, как удастся преодолеть это, меня ждёт ещё дважды возможность поискать, где-же ещё надо добавить костылей, чтобы, наконец-то, сообщение отправилось клиенту в том виде, в котором мне надо, а не в котором эта мразь отправляет. Мммм, как увлекательно.

Share this post


Link to post

Short link
Share on other sites
3 минуты назад, Dragon armor сказал:

![CDATA[]]

Кажется, я такое в RSS-рассылках видел, чтобы аккуратно HTML-теги изолировать. А зачем оно тут?

Share this post


Link to post

Short link
Share on other sites

@DrWeb7_1 Таким образом расширен протокол.

Клиент отправляет запрос вида

<iq id='...' type='get' from='...' xmlns='jabber:client'>
  <query xmlns='http://wargaming.net/xmpp#storage'>
    <list name='contact-notes'>
      <set xmlns='http://jabber.org/protocol/rsm'>
        <max>100</max>
      </set>
    </list>
  </query>
</iq>

И ожидает ответ

<iq type='result' id='...' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client'>
  <query xmlns='http://wargaming.net/xmpp#storage'>
    <list name='contact-notes'>
      <set xmlns='http://jabber.org/protocol/rsm'>
        <count><![CDATA[0]]></count>
      </set>
    </list>
  </query>
</iq>

 

Share this post


Link to post

Short link
Share on other sites
47 минут назад, Dragon armor сказал:

И ожидает ответ

А как выглядит ответ со вставленным сообщением тогда?

Share this post


Link to post

Short link
Share on other sites

@DrWeb7_1 У меня их немного. Вот ещё один.

<presence to='...' from='...' xmlns:stream='http://etherx.jabber.org/streams' xmlns='jabber:client'>
  <priority><![CDATA[0]]></priority>
  <wgexts-client xmlns='http://wargaming.net/xmpp#client'>
    <game-host><![CDATA[login.p7.worldoftanks.net:20014]]></game-host>
  </wgexts-client>
  <c ver='1LpOuB49QCQE6BcZoAF5tBoALdg=' node='http://camaya.net/gloox' hash='sha-1' xmlns='http://jabber.org/protocol/caps'/>
  <wgexts xmlns='http://wargaming.net/xmpp#v2'>
    <extra xmlns='http://wargaming.net/xmpp#extra-attributes'/>
    <userid><![CDATA[1234567890]]></userid>
    <nickname><![CDATA[...]]></nickname>
    <ban-info/>
    <moderator/>
  </wgexts>
</presence>

Ещё можешь файл client\messenger\proto\xmpp\extensions\ext_constants.py посмотреть и поискать по фразам из него в скриптах.

Share this post


Link to post

Short link
Share on other sites
4 минуты назад, blueferret сказал:

CDATA = compiled data. CDATA should be the same thing as compiled XML.

I know. The problem is that jabberd2 doesn't understand this tag.

Share this post


Link to post

Short link
Share on other sites
3 минуты назад, Dragon armor сказал:

The problem is that jabberd2 doesn't understand this tag.

Рубрика "тупые вопросы": допустим, если я попробую поднять XMPP-сервер на отдельной виртуальной машине (да хоть Ubuntu Server), а затем эмулятору сервера скормить IP-адрес этой виртуалки, на которой крутится этот сервер, то теоретически оно может заработать? Или обязательно наличие XMPP-сервера на машине, где запущен эмулятор игровой составляющей?

Share this post


Link to post

Short link
Share on other sites
8 часов назад, DrWeb7_1 сказал:

Рубрика "тупые вопросы"

Вопрос, на самом деле, не тупой.

Да, так можно. И на данный момент достаточно будет указать ip адрес или домен в настройках, которые передаёт эмулятор клиенту. Смотри xmpp_connections в скриптах эмулятора. Там в двух местах надо поправить. У меня на локальной машине, потому что так удобнее для отладки. Но ничего не мешает сделать удалённый сервер. Единственное, нужно будет сделать какой-то интерфейс по взаимодействию эмулятора и xmpp. С сообщением requestToken разобрался, что отправлять на его запрос - знаю. По сути, на это сообщение сервер отправляет логин (который является id клиента, пробовал другой, отличный от того, что присваивается клиенту, так клиент его не принимает) и пароль для подключения. Так что для тестовых целей можно прописать прямо в файле. Мне помнится, у тебя он есть (AccountAuthTokenProvider.py который). Напиши там что-то такое:

	def requestToken(self, requestID, tokenType):
		print 'requestToken {}, {}'.format(requestID, tokenType)
		if tokenType == TOKEN_TYPE.XMPPCS:
			self.client.onTokenReceived(requestID, tokenType, cPickle.dumps({'token': 12345, 'databaseID': 1}, 2))

И импорт добавь:

import cPickle
from constants import TOKEN_TYPE

И можешь экспериментировать. Тебе в ЛС могу скинуть, что у меня есть по дампу трафика xmpp (кстати, огромная удача, что у меня есть дамп в одном единственном файле, просто случайно захватился, а иначе гадай, что там надо было бы клиенту).

 

				'xmpp_alt_connections': [],
				'xmpp_bosh_connections': [],
				'xmpp_connections': [('127.0.0.1', 5222)],
				'xmpp_enabled': True,
				'xmpp_host': '127.0.0.1',
				'xmpp_muc_enabled': False,
				'xmpp_muc_services': [],
				'xmpp_port': 5222,
				'xmpp_resource': 'wot'

xmpp_host - это после @ будет идти. Логин вида 1@127.0.0.1.

xmpp_resource - это после слеша будет вида 1@127.0.0.1/wot или всё, что больше нравится. Адресов можно указать много больше одного. Но клиент, понятное дело, только к одному будет подключен.

8 часов назад, blueferret сказал:

I'm also about to begin a C++ college course tomorrow for fall semester.

In fact, all my knowledge of c(++) was obtained without education. My education is not even close to programming. You don't need a lot of knowledge, just the basics.

 

Share this post


Link to post

Short link
Share on other sites
2 часа назад, Dragon armor сказал:

Вопрос, на самом деле, не тупой.

Да, так можно. И на данный момент достаточно будет указать ip адрес или домен в настройках, которые передаёт эмулятор клиенту. Смотри xmpp_connections в скриптах эмулятора. Там в двух местах надо поправить. У меня на локальной машине, потому что так удобнее для отладки. Но ничего не мешает сделать удалённый сервер. Единственное, нужно будет сделать какой-то интерфейс по взаимодействию эмулятора и xmpp. С сообщением requestToken разобрался, что отправлять на его запрос - знаю. По сути, на это сообщение сервер отправляет логин (который является id клиента, пробовал другой, отличный от того, что присваивается клиенту, так клиент его не принимает) и пароль для подключения. Так что для тестовых целей можно прописать прямо в файле. Мне помнится, у тебя он есть (AccountAuthTokenProvider.py который). Напиши там что-то такое:


	def requestToken(self, requestID, tokenType):
		print 'requestToken {}, {}'.format(requestID, tokenType)
		if tokenType == TOKEN_TYPE.XMPPCS:
			self.client.onTokenReceived(requestID, tokenType, cPickle.dumps({'token': 12345, 'databaseID': 1}, 2))

И импорт добавь:


import cPickle
from constants import TOKEN_TYPE

И можешь экспериментировать. Тебе в ЛС могу скинуть, что у меня есть по дампу трафика xmpp (кстати, огромная удача, что у меня есть дамп в одном единственном файле, просто случайно захватился, а иначе гадай, что там надо было бы клиенту).

 


				'xmpp_alt_connections': [],
				'xmpp_bosh_connections': [],
				'xmpp_connections': [('127.0.0.1', 5222)],
				'xmpp_enabled': True,
				'xmpp_host': '127.0.0.1',
				'xmpp_muc_enabled': False,
				'xmpp_muc_services': [],
				'xmpp_port': 5222,
				'xmpp_resource': 'wot'

xmpp_host - это после @ будет идти. Логин вида 1@127.0.0.1.

xmpp_resource - это после слеша будет вида 1@127.0.0.1/wot или всё, что больше нравится. Адресов можно указать много больше одного. Но клиент, понятное дело, только к одному будет подключен.

In fact, all my knowledge of c(++) was obtained without education. My education is not even close to programming. You don't need a lot of knowledge, just the basics.

 

Вижу работа ещё кипит.

2 часа назад, Dragon armor сказал:

Вопрос, на самом деле, не тупой.

Да, так можно. И на данный момент достаточно будет указать ip адрес или домен в настройках, которые передаёт эмулятор клиенту. Смотри xmpp_connections в скриптах эмулятора. Там в двух местах надо поправить. У меня на локальной машине, потому что так удобнее для отладки. Но ничего не мешает сделать удалённый сервер. Единственное, нужно будет сделать какой-то интерфейс по взаимодействию эмулятора и xmpp. С сообщением requestToken разобрался, что отправлять на его запрос - знаю. По сути, на это сообщение сервер отправляет логин (который является id клиента, пробовал другой, отличный от того, что присваивается клиенту, так клиент его не принимает) и пароль для подключения. Так что для тестовых целей можно прописать прямо в файле. Мне помнится, у тебя он есть (AccountAuthTokenProvider.py который). Напиши там что-то такое:


	def requestToken(self, requestID, tokenType):
		print 'requestToken {}, {}'.format(requestID, tokenType)
		if tokenType == TOKEN_TYPE.XMPPCS:
			self.client.onTokenReceived(requestID, tokenType, cPickle.dumps({'token': 12345, 'databaseID': 1}, 2))

И импорт добавь:


import cPickle
from constants import TOKEN_TYPE

И можешь экспериментировать. Тебе в ЛС могу скинуть, что у меня есть по дампу трафика xmpp (кстати, огромная удача, что у меня есть дамп в одном единственном файле, просто случайно захватился, а иначе гадай, что там надо было бы клиенту).

 


				'xmpp_alt_connections': [],
				'xmpp_bosh_connections': [],
				'xmpp_connections': [('127.0.0.1', 5222)],
				'xmpp_enabled': True,
				'xmpp_host': '127.0.0.1',
				'xmpp_muc_enabled': False,
				'xmpp_muc_services': [],
				'xmpp_port': 5222,
				'xmpp_resource': 'wot'

xmpp_host - это после @ будет идти. Логин вида 1@127.0.0.1.

xmpp_resource - это после слеша будет вида 1@127.0.0.1/wot или всё, что больше нравится. Адресов можно указать много больше одного. Но клиент, понятное дело, только к одному будет подключен.

In fact, all my knowledge of c(++) was obtained without education. My education is not even close to programming. You don't need a lot of knowledge, just the basics.

 

Интересно а для новичков в которые не шарят как да что будет гайд как сделать и что качать чтобы сервак заработал?

https://m.vk.com/topic-104837919_38808801 прочекайте там вроде про движок может что полезное есть

Share this post


Link to post

Short link
Share on other sites

Завернул XMPP-сервер на виртуалку с Debian 9, в качестве сервера выбрал ejabberd. Пока что-то не получается...

 

image.png.91168cfb6f857402a7f2418327fa185f.png

 

	'xmpp_alt_connections': [],
	'xmpp_bosh_connections': [],
	'xmpp_connections': [('192.168.99.136', 5222)],
	'xmpp_enabled': True,
	'xmpp_host': '192.168.99.136',
	'xmpp_muc_enabled': False,
	'xmpp_muc_services': [],
	'xmpp_port': 5222,
	'xmpp_resource': 'wot'

 

AccountAuthTokenProvider.py выглядит точно так же, как ты написал в предыдущем сообщении, @Dragon armor .

Edited by DrWeb7_1

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.

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...