urfaclient на php

Вопросы по сопутствующим продуктам производства партнеров
Ответить
mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

Код: Выделить всё

   function rpcf_search_users_new($poles,$patterns,$sel_type) { //0x1205 
      $ret=array(); 
      if (!$this->connection->urfa_call(0x1205)) { 
         print "Error calling function ". __FUNCTION__ ."\n"; 
         return FALSE; 
      } 
      $packet = $this->connection->getPacket(); 
      $packet->DataSetInt(count($poles));
      for &#40;$i=0; $i<count&#40;$poles&#41;;$i++&#41;&#123;
	$packet->DataSetInt&#40;$poles&#91;$i&#93;&#41;;
	&#125;;
      $packet->DataSetInt&#40;$sel_type&#41;;
      $packet->DataSetInt&#40;count&#40;$patterns&#41;&#41;;
      for &#40;$i=0;$i<count&#40;$patterns&#41;;$i++&#41;&#123;
	$packet->DataSetInt&#40;$patterns&#91;$i&#93;&#91;'what_id'&#93;&#41;;
	$packet->DataSetInt&#40;$patterns&#91;$i&#93;&#91;'criteria_id'&#93;&#41;;
	if &#40;$patterns&#91;$i&#93;&#91;'what_id'&#93;==33&#41; &#123;
		$packet->DataSetInt&#40;$patterns&#91;$i&#93;&#91;'pattern'&#93;&#41;;
	&#125;else&#123;
		$packet->DataSetString&#40;$patterns&#91;$i&#93;&#91;'pattern'&#93;&#41;;
	
	&#125;
      &#125;

      $this->connection->urfa_send_param&#40;$packet&#41;; 
      if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41;&#123; 
	$ret&#91;'user_data_size'&#93;=$x->DataGetInt&#40;&#41;;
	for &#40;$i=0;$i<$ret&#91;'user_data_size'&#93;;$i++&#41;&#123;
		$ret&#91;$i&#93;&#91;'user_id'&#93;=$x->DataGetInt&#40;&#41;;
		$ret&#91;$i&#93;&#91;'login'&#93;=$x->DataGetString&#40;&#41;;
		$ret&#91;$i&#93;&#91;'basic_account'&#93;=$x->DataGetInt&#40;&#41;;
		$ret&#91;$i&#93;&#91;'full_name'&#93;=$x->DataGetString&#40;&#41;;
		$ret&#91;$i&#93;&#91;'is_blocked'&#93;=$x->DataGetInt&#40;&#41;;
		$ret&#91;$i&#93;&#91;'balance'&#93;=$x->DataGetDouble&#40;&#41;;
		$ret&#91;$i&#93;&#91;'ip_address_size'&#93;=$x->DataGetInt&#40;&#41;;
		for &#40;$j=0;$j<$ret&#91;$i&#93;&#91;'ip_address_size'&#93;;$j++&#41;&#123;
			$ret&#91;$i&#93;&#91;'ip_address'&#93;&#91;$j&#93;&#91;'ip_groups_count'&#93;=$x->DataGetInt&#40;&#41;;
			for &#40;$k=0;$k<$ret&#91;$i&#93;&#91;'ip_address'&#93;&#91;$j&#93;&#91;'ip_groups_count'&#93;;$k++&#41;&#123;
				$ret&#91;$i&#93;&#91;'ip_address'&#93;&#91;$j&#93;&#91;'ip_group'&#93;&#91;$k&#93;&#91;'type'&#93;=$x->DataGetInt&#40;&#41;;
				$ret&#91;$i&#93;&#91;'ip_address'&#93;&#91;$j&#93;&#91;'ip_group'&#93;&#91;$k&#93;&#91;'ip'&#93;=$x->DataGetString&#40;&#41;;
				$ret&#91;$i&#93;&#91;'ip_address'&#93;&#91;$j&#93;&#91;'ip_group'&#93;&#91;$k&#93;&#91;'mask'&#93;=$x->DataGetString&#40;&#41;;
			&#125;
		&#125;
		for &#40;$j=0;$j<count&#40;$poles&#41;;$j++&#41;&#123;
			if &#40;$poles&#91;$j&#93;==4&#41;&#123;$ret&#91;$i&#93;&#91;'discount_period_id'&#93;=$x->DataGetInt&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==6&#41;&#123;$ret&#91;$i&#93;&#91;'create_date'&#93;=$x->DataGetInt&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==7&#41;&#123;$ret&#91;$i&#93;&#91;'last_change_date'&#93;=$x->DataGetInt&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==8&#41;&#123;$ret&#91;$i&#93;&#91;'who_create'&#93;=$x->DataGetInt&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==9&#41;&#123;$ret&#91;$i&#93;&#91;'who_change'&#93;=$x->DataGetInt&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==10&#41;&#123;$ret&#91;$i&#93;&#91;'is_juridical'&#93;=$x->DataGetInt&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==11&#41;&#123;$ret&#91;$i&#93;&#91;'juridical_address'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==12&#41;&#123;$ret&#91;$i&#93;&#91;'actual_address'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==13&#123;$ret&#91;$i&#93;&#91;'work_telephone'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==14&#41;&#123;$ret&#91;$i&#93;&#91;'home_telephone'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==15&#41;&#123;$ret&#91;$i&#93;&#91;'mobile_telephone'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==16&#41;&#123;$ret&#91;$i&#93;&#91;'web_page'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==17&#41;&#123;$ret&#91;$i&#93;&#91;'icq_number'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==18&#41;&#123;$ret&#91;$i&#93;&#91;'tax_number'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==19&#41;&#123;$ret&#91;$i&#93;&#91;'kpp_number'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==21&#41;&#123;$ret&#91;$i&#93;&#91;'house_id'&#93;=$x->DataGetInt&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==22&#41;&#123;$ret&#91;$i&#93;&#91;'flat_number'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==23&#41;&#123;$ret&#91;$i&#93;&#91;'entrance'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==24&#41;&#123;$ret&#91;$i&#93;&#91;'floor'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==25&#41;&#123;$ret&#91;$i&#93;&#91;'email'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==26&#41;&#123;$ret&#91;$i&#93;&#91;'passport'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==40&#41;&#123;$ret&#91;$i&#93;&#91;'district'&#93;=$x->DataGetString&#40;&#41;&#125;
			if &#40;$poles&#91;$j&#93;==41&#41;&#123;$ret&#91;$i&#93;&#91;'building'&#93;=$x->DataGetString&#40;&#41;&#125;
		&#125;
	&#125;
        $this->connection->urfa_get_data&#40;&#41;; 
      &#125;
      return $ret; 
   &#125;
Не работает :)
В таком варианте выдает все вплоть до баланса.
Если перед каждым циклом вставить $x=$this->connection->urfa_get_data(); начинает худо-бедно работать. Если вставить в цикле - зацикливается.
А хочецо. Какие идеи?

Аватара пользователя
ds
Сообщения: 380
Зарегистрирован: Пн сен 18, 2006 14:06

Сообщение ds »

urfa_get_data() покажи, если первый вариант, то ее нужно иногда вставлять в самых неожиданных местах :) а если доработанный, тогда одного вызова достаточно, тогда перед return-ом не надо вызывать его во второй раз

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

старый, истесна, если я так болею. покажи новый и подскажи куда вставлять - возьмусь за глобальную переделку функций, которые нужны

Аватара пользователя
ds
Сообщения: 380
Зарегистрирован: Пн сен 18, 2006 14:06

Сообщение ds »

ds писал(а):Наконец то доработал функцию urfa_get_data. Теперь вызываем ее только один раз. Остальные повторные вызовы надо убрать. Если вызвать повторно, то функция заблокирутся на чтении. Лучше вызывать вместе с if, чтобы если она вернет false - если ничего не вернулось, не нарушилась логика.

Код: Выделить всё


if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123;
   .....
   $id = $x->DataGetInt&#40;&#41;;
   .....
&#125;


Вот сама функция

Код: Выделить всё

function urfa_get_data&#40;&#41; &#123;
    $packet = $this->getPacket&#40;&#41;;
    $packet->clean&#40;&#41;;
    while&#40;true&#41; &#123;
       if &#40;!feof&#40;$this->socket&#41;&#41; &#123;
             $packet->read&#40;&#41;;
             if &#40;$packet->AttrGetInt&#40;4&#41;&#41;
                 break;
              
       &#125;
    &#125;
    if &#40;count&#40;$packet->data&#41;==0&#41;
          return FALSE;
    return $packet;
&#125;
viewtopic.php?t=6402&postdays=0&postorder=asc&start=165

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

Завелось. Огромная благодарность за труд :)

Sky
Сообщения: 44
Зарегистрирован: Пн янв 24, 2005 08:01

Сообщение Sky »

Доброе время суток.

Функции рассчитаны на работу с новой urfa_get_data()

Код: Выделить всё

function rpcf_get_setting_list&#40;&#41;
&#123; //0x4400
    $ret=array&#40;&#41;;
    if &#40;!$this->connection->urfa_call&#40;0x4400&#41;&#41; &#123;
              print "Error calling function ". __FUNCTION__ ."\n";
              return FALSE;
        &#125;
        if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123;
            $count=$x->DataGetInt&#40;&#41;;
            $ret&#91;'count'&#93;=$count;
            for &#40;$i=0; $i < $count; $i++ &#41; &#123;
                $list&#91;'id'&#93;=$x->DataGetInt&#40;&#41;;
                $list&#91;'name'&#93;=$x->DataGetString&#40;&#41;;
                $list&#91;'value'&#93;=$x->DataGetString&#40;&#41;;
                $ret&#91;'settings'&#93;&#91;&#93;=$list;
            &#125;
        &#125;
    return $ret;
&#125;
Туда же

Код: Выделить всё

function rpcf_get_user_contacts&#40;$user_id&#41;
&#123; //0x2021
    $ret=array&#40;&#41;;
    if &#40;!$this->connection->urfa_call&#40;0x2021&#41;&#41; &#123;
              print "Error calling function ". __FUNCTION__ ."\n";
              return FALSE;
        &#125;
    $packet = $this->connection->getPacket&#40;&#41;;
    $packet->DataSetInt&#40;$user_id&#41;;
    $this->connection->urfa_send_param&#40;$packet&#41;;
    if &#40;$x = $this->connection->urfa_get_data&#40;&#41;&#41; &#123;
        $count=$x->DataGetInt&#40;&#41;;
        $ret&#91;'count'&#93;=$count;
            for &#40;$i=0; $i < $count; $i++ &#41; &#123;
                $list&#91;'id'&#93;=$x->DataGetInt&#40;&#41;;
                $list&#91;'person'&#93;=$x->DataGetString&#40;&#41;;
                $list&#91;'descr'&#93;=$x->DataGetString&#40;&#41;;
                $list&#91;'contact'&#93;=$x->DataGetString&#40;&#41;;
                $list&#91;'email'&#93;=$x->DataGetString&#40;&#41;;
                $list&#91;'email_notify'&#93;=$x->DataGetInt&#40;&#41;;
                $list&#91;'short_name'&#93;=$x->DataGetString&#40;&#41;;
                $list&#91;'birthday'&#93;=$x->DataGetString&#40;&#41;;
                $list&#91;'id_exec_man'&#93;=$x->DataGetInt&#40;&#41;;
                $ret&#91;'user_contacts'&#93;&#91;&#93;=$list;
            &#125;
    &#125;
    return $ret;
&#125;

Instruktor
Сообщения: 131
Зарегистрирован: Ср авг 10, 2005 21:32
Откуда: Москва

Сообщение Instruktor »

http://wiki.flintnet.ru/

Похоже в листингах код приведён с ошибками.
Например, так местами выглядит вызов цикла:
for ($i=0; $i

Вышлите кто-нибудь рабочую сборку на nv собако m9x1 тчк ru

mikkey finn
Сообщения: 1612
Зарегистрирован: Пт ноя 10, 2006 15:23

Сообщение mikkey finn »

в каких функциях?

Sky
Сообщения: 44
Зарегистрирован: Пн янв 24, 2005 08:01

Сообщение Sky »

rpcf_search_users_new //0x1205

В 2 местах:

Код: Выделить всё

for &#40;$i=0;$i        $packet->DataSetInt&#40;$patterns&#91;$i&#93;&#91;'what_id'&#93;&#41;;
и

Код: Выделить всё

for &#40;$j=0;$j                        if &#40;$poles&#91;$j&#93;==4&#41;&#123;$ret&#91;$i&#93;&#91;'discount_period_id'&#93;=$x->DataGetInt&#40;&#41;;&#125;

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Да вроде все номрально, не нашел подобных ошибок

Instruktor
Сообщения: 131
Зарегистрирован: Ср авг 10, 2005 21:32
Откуда: Москва

Сообщение Instruktor »

У меня в этих местах выпало с ошибкой:
Parse error: syntax error, unexpected T_VARIABLE, expecting ';' in /usr/home/vadim/urfa/URFAClient_Admin.php on line 2586


Ешё есть подобное в rpcf_search_users_new, может и ещё где-то

Вероятно покочалось при генерации из списка функций. Там в списке они в норме.
Последний раз редактировалось Instruktor Пн мар 30, 2009 15:10, всего редактировалось 2 раза.

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Попробуйте функцию взять из первоисточника http://wiki.flintnet.ru/doku.php?id=fun ... _id_0x1205

И не забывайте что работать в таком виде не будет все равно ;) Потому как часть функций заточена под ООП, часть под процедурную версию, плюс часть функций использует старую версию getdata, часть новую.
Так что автогенерацию всех функций лучше не пользовать, по крайней мере пока проект не доведен до финала

Sky
Сообщения: 44
Зарегистрирован: Пн янв 24, 2005 08:01

Сообщение Sky »

Kayfolom может есть смысл перевести все на новую urfa_get_data?

Kayfolom
Сообщения: 746
Зарегистрирован: Вс фев 12, 2006 17:15

Сообщение Kayfolom »

Sky писал(а):Kayfolom может есть смысл перевести все на новую urfa_get_data?
Конечно, но сначала надо дождаться окончательного варианта обвязки кода от создателя urfa php, чтоб потом еще раз не переделывать.

Instruktor
Сообщения: 131
Зарегистрирован: Ср авг 10, 2005 21:32
Откуда: Москва

Сообщение Instruktor »

Киньте пожалуйста в каком виде есть. Тогда старом, лишь бы работало. Лично мне оттуда пока нужна только пара простых опций.

А в этой сборке:
urfaclient-1.0b4.tar.gz
получаю:

Код: Выделить всё

Warning&#58; stream_socket_enable_crypto&#40;&#41;&#58; this stream does not support SSL/crypto in /usr/home/vadim/urfa/urfaclient/socket.php on line 49
Auth success. Connected!!!
Error code 0

Ответить