powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / EAServer и Delphi
25 сообщений из 30, страница 1 из 2
EAServer и Delphi
    #32877570
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Продублирую тут, потому что отдельного раздела на EAS нет.

Есть ApplicationServer (EAServer от Sybase). На сервере приложений написаны компоненты.

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

Если можно отправить к какому-нибудь примеру то буду благодарен!
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32877727
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
C CORBA ничего не выйдет скорее всего.
Там то ли Delphi умеет только DII, а EAS только SII, то ли наоборот.
Надо смотреть в сторону ActiveX/COM proxy.
От версии дельфи это не зависит насколько я понимаю.
Roy Kiesler (TeamSybase) Aug 9 2000, 12:00 am
Subject: Re: Can I connect to Jaguar from DELPHI Client ??
You'll have to use a COM interface -- generate REG/TLB files for your Jag
components from JagManager and deploy the jagproxy.dll you the Delphi
client.В поставку EAS входит также и специальная ActiveX заглушка (stub), позволяющая реализовать присоединение к серверу приложений в виде зарегистрированных на клиентской машине СОМ-объектов.
EAServer Programmer's Guide
Part 6: ActiveX Components and Clients
Chapter 20: Creating ActiveX Clients
Procedure for creating ActiveX clients
To create a new ActiveX client:
Generate .tlb and .reg files for components

Develop and test the ActiveX client

Deploy the ActiveX client
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32879533
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, буду разбираться.
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32892254
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗоринАндрейC CORBA ничего не выйдет скорее всего.
Там то ли Delphi умеет только DII, а EAS только SII, то ли наоборот.
Надо смотреть в сторону ActiveX/COM proxy.
От версии дельфи это не зависит насколько я понимаю.
Roy Kiesler (TeamSybase) Aug 9 2000, 12:00 am
Subject: Re: Can I connect to Jaguar from DELPHI Client ??
You'll have to use a COM interface -- generate REG/TLB files for your Jag
components from JagManager and deploy the jagproxy.dll you the Delphi
client. В поставку EAS входит также и специальная ActiveX заглушка (stub), позволяющая реализовать присоединение к серверу приложений в виде зарегистрированных на клиентской машине СОМ-объектов.
EAServer Programmer's Guide
Part 6: ActiveX Components and Clients
Chapter 20: Creating ActiveX Clients
Procedure for creating ActiveX clients
To create a new ActiveX client:
Generate .tlb and .reg files for components

Develop and test the ActiveX client

Deploy the ActiveX client


Все получилось, спасибо за указанное верное направление. Расскажу поподробнее тут, вдруг кому нибудь пригодится:

1) Пишем Component и деплоим на EAS в некоторый Package.
2) Устанавливаем Microsoft Platform SDK (Core SDK) с сайта Microsoft: http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ + устанавливаем пути к нему после установки
3) В EAS Manager на Package генерим TLB/REG, указывая "output directory" куда генерить TLB/REG, например "D:\activex", а ProxyServerLocation - путь где лежит jagproxy.dll, например "C:\sybase\EAServer\dll"
4) Устанавливаем на компьютере с Delphi клиента EAS из дистрибутива, его же надо будет установить на все клиентские машины.
5) Копируем полученные TLB/REG на компьютер с Delphi
6) Если нужно с помощью jagreg подправляем пути в reg файлах, например
Код: plaintext
jagreg /t D:\activex /f *.reg /d C:\sybase\EAServer\dll
причем путь до jagproxy.dll должен быть такой же и на всех клиентских машинах.
7) Выполняем REG файлы занося данные по ActiveX компоненту в реестр, их же надо будет выполнять и на всех клиентских машинах.
8) В Delphi импортируем TLB компонента (меню Project/Import Type Library, кнопка Add, кнопка Install) и инсталлируем полученииый пакет, если он не проинсталился автоматом (меню Component/InstallPackage).
9) Далее програмим код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
// создание экземпляра
Component1.Create(application);

// подключение к EAS и инициализация
Component1.userName:='login';
Component1.password:='password';
Component1.host:='host:port';
Component1.name:='Package/Component';
Component1.Connect;

Component1.Initialize;

// вызов метода
Component1.metod;

// Дисконнект
Component1.Disconnect;
end;

Также приложил исходник Delphi.
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32896723
a12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я попоробовал заставить работать этот пример у себя. У меня есть готовый package, (не мной написанный), который крутится на EAS. Сделал все, как в примере, только выбросил вызов методов (т.е. просто создал объект и потом отсоединился).
В принципе все нормально до тех пор, пока не вызывается метод Disconnect. При этом в Delphi вываливается окно команд процессора и пока не выйдешь из отладки по Ctrl+F2, ничего не работает. Может ли это происходить, если сам компонент для EAS криво написан? Если да, то где можно почитать на что обратить внимание?

Спасибо.
С уважением, Александр.
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32897417
_Виталий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Расскажите, пожалуйста, поподробней.

Попробовал делать по написанному - не получается. Устанавливается коннект с EAServer, а при вызове метода говорит, что вызываемый метод не реализован.

И для Microsoft Platform SDK (Core SDK)?
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32899808
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a12345Я попоробовал заставить работать этот пример у себя. У меня есть готовый package, (не мной написанный), который крутится на EAS. Сделал все, как в примере, только выбросил вызов методов (т.е. просто создал объект и потом отсоединился).
В принципе все нормально до тех пор, пока не вызывается метод Disconnect. При этом в Delphi вываливается окно команд процессора и пока не выйдешь из отладки по Ctrl+F2, ничего не работает. Может ли это происходить, если сам компонент для EAS криво написан? Если да, то где можно почитать на что обратить внимание?

Спасибо.
С уважением, Александр.

Та же ситуация... но мы пока разбираться не стали... оставили на потом.
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32899813
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_ВиталийРасскажите, пожалуйста, поподробней.

Попробовал делать по написанному - не получается. Устанавливается коннект с EAServer, а при вызове метода говорит, что вызываемый метод не реализован.

И для Microsoft Platform SDK (Core SDK)?

Поподробней, что, как, когда?
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32900253
_Виталий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сотников _ВиталийРасскажите, пожалуйста, поподробней.

Попробовал делать по написанному - не получается. Устанавливается коннект с EAServer, а при вызове метода говорит, что вызываемый метод не реализован.

И для Microsoft Platform SDK (Core SDK)?

Поподробней, что, как, когда?

Все же подключиться получилось: проблема была в том что, что при импортировании ActiveX компонента в EAServer последний не выставляет автоматом ProgId, который, как оказалось используется при поиске соответствующей dll в реестре. Вопросы снимаю.

Правда, уже есть новые:)
Может у вас есть опыт в реализации работы с базами даных (меня интересует Oracle 9)? Как можно использовать Connection caches в Делфи и нужно ли? Как лучше, реализовывать всю логику в одном компоненте, или разделить функции смежду несколькими? И как из одного компонента вызывать методы другого?

P.S. То бишь для чего нужен Core SDK? Для генерации *.tlb достаточно одной утилиты midl.exe, что еще из SDK можно использовать?
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32900558
a12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СотниковТа же ситуация... но мы пока разбираться не стали... оставили на потом.
Я попробовал еще один вариант, не подключая в секции uses файл type library (т.е. создавая объект с помощью CreateOLEObject), отрабатывается все нормально без ошибок, но теперь возник следующий вопрос: В метод компонента EAS нужно передавать структуру и массив структур. Пробовал описывать такую же через record, но в параметр нужно передавать OleVariant. Если кто-нибудь знает, как это грамотно сделать - напишите пожалуйста.

Александр.
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32904497
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Виталий Сотников _ВиталийРасскажите, пожалуйста, поподробней.

Попробовал делать по написанному - не получается. Устанавливается коннект с EAServer, а при вызове метода говорит, что вызываемый метод не реализован.

И для Microsoft Platform SDK (Core SDK)?

Поподробней, что, как, когда?

Все же подключиться получилось: проблема была в том что, что при импортировании ActiveX компонента в EAServer последний не выставляет автоматом ProgId, который, как оказалось используется при поиске соответствующей dll в реестре. Вопросы снимаю.

Правда, уже есть новые:)


_Виталий
Может у вас есть опыт в реализации работы с базами даных (меня интересует Oracle 9)?
Опыт работы EAS и БД есть но не с Oracle, хотя я думаю что отличия такие же как и при работе PB и Oracle, если писать компоненты на PB.

_Виталий
Как можно использовать Connection caches в Делфи и нужно ли?
Его не нужно использовать в Delphi, его нужно использовать в компоненте на EAS.

_Виталий
Как лучше, реализовывать всю логику в одном компоненте, или разделить функции смежду несколькими? И как из одного компонента вызывать методы другого?
Можно по разному. У меня все реализовано в одном Package, но компоненты пишу разные для разных задач (смотрю на функционал и работу с данными)

На PB:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
my_component lmy_component
TransactionServer		iv_ts_jag

IF this.getContextService( "TransactionServer", iv_ts_jag ) <>  1  THEN
	// вывод в лог ошибки	
	return - 1 
END IF

IF iv_ts_jag.CreateInstance( lmy_component, "Package/Component" ) <>  0  THEN
	// вывод в лог ошибки
	iv_ts_jag.SetAbort( )
	return - 1 
END IF 

Где lmy_component - это NVO (компонент в EAS).
Package/Component - имя пакета и компонента на EAS

_Виталий
P.S. То бишь для чего нужен Core SDK? Для генерации *.tlb достаточно одной утилиты midl.exe, что еще из SDK можно использовать?
У меня не было midl.exe поэтому я и ставил Core SDK. Для работы EAS он впринципе не нужен.
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32904499
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a12345 СотниковТа же ситуация... но мы пока разбираться не стали... оставили на потом.
Я попробовал еще один вариант, не подключая в секции uses файл type library (т.е. создавая объект с помощью CreateOLEObject), отрабатывается все нормально без ошибок, но теперь возник следующий вопрос: В метод компонента EAS нужно передавать структуру и массив структур. Пробовал описывать такую же через record, но в параметр нужно передавать OleVariant. Если кто-нибудь знает, как это грамотно сделать - напишите пожалуйста.

Александр.

А код можете привести, а то я в Delphi не программирую. А пример очень неоходим!
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32905518
a12345
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
СотниковА код можете привести, а то я в Delphi не программирую. А пример очень неоходим!
Не вопрос ;). Пусть package называется pak_test, объект my_obj а метод test1 и он должен вернуть информацию в символьной строке (BSTR).
Тогда это будет примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
var 
  oObj:OleVariant;
  aStr:OleVariant;
begin  
  //Создаем OLE объект
  oObj:= CreateOleObject('pack_test.my_obj');

  //Заполняем свойства
  oObj.Host:= '198.1.1.10:9000';
  oObj.Name:= 'pack_test\my_obj';
  oObj.username:= 'user';
  oObj.Password:= 'password';

  //Нужно вызвать перед первым вызовом каких-либо методов объекта
  oObj.Initialize;

  //Создаем строку для возрата
  aStr:= VarArrayCreate([ 0 , 127 ],vbByte);

  //Вызываем метод 
  oObj.test1(VarArrayRef(aStr));

  //Результат находится в массиве aStr

end;
Еще один момент: в случае с Delphi, ошибок при передаче параметров в методы не возникает только когда передаются или простые типы данных, или Variant-массивы. Если в методах Ваших объектов передаются какие-либо структуры данных, то при генерации typelib в качестве параметров генератор пишет туда интерфейс IDispatch, которого там на самом деле наверное нет. Решением может быть написание специальных методов над своими старыми, в которых в качестве параметров будут передаваться и возвращаться не структуры а Variant-массивы.

Александр.
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32905843
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Большое спасибо за пример!
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32906409
_Виталий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
a12345 СотниковА код можете привести, а то я в Delphi не программирую. А пример очень неоходим!
Не вопрос ;). Пусть package называется pak_test, объект my_obj а метод test1 и он должен вернуть информацию в символьной строке (BSTR).
Тогда это будет примерно так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
var 
  oObj:OleVariant;
  aStr:OleVariant;
begin  
  //Создаем OLE объект
  oObj:= CreateOleObject('pack_test.my_obj');

  //Заполняем свойства
  oObj.Host:= '198.1.1.10:9000';
  oObj.Name:= 'pack_test\my_obj';
  oObj.username:= 'user';
  oObj.Password:= 'password';

  //Нужно вызвать перед первым вызовом каких-либо методов объекта
  oObj.Initialize;

  //Создаем строку для возрата
  aStr:= VarArrayCreate([ 0 , 127 ],vbByte);

  //Вызываем метод 
  oObj.test1(VarArrayRef(aStr));

  //Результат находится в массиве aStr

end;
Еще один момент: в случае с Delphi, ошибок при передаче параметров в методы не возникает только когда передаются или простые типы данных, или Variant-массивы. Если в методах Ваших объектов передаются какие-либо структуры данных, то при генерации typelib в качестве параметров генератор пишет туда интерфейс IDispatch, которого там на самом деле наверное нет. Решением может быть написание специальных методов над своими старыми, в которых в качестве параметров будут передаваться и возвращаться не структуры а Variant-массивы.

Александр.

Я попробовал сделать как вы говорите, но ошибка не исчезла.
Если я пытаюсь удалить ОЛЕ-объект oObj :=NULL. При этом возникает та же ошибка.

Кроме того, на самом EAServer ресурсы не освобождаются. То есть однажды созданные объекты остаются активными до перегрузки сервера. В настройках объяекта я указал только Bind Object, то есть пул использовать не должен.

Что это может быть?
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32906510
Фотография Ikar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_ВиталийЕсли я пытаюсь удалить ОЛЕ-объект oObj :=NULL. Я не большой знаток Delphi, но сдается мне, что вот тут то у Вас и есть ошибка. На сколько я помню, для разрушения объекта нужно вызывать
object_name .Free
а совсем не приравнивать объект к NULL...

//Сорри, если я не прав и ввожу Вас в заблуждение...
---
С уважением, IKAR

ikarhomecenter@narod.ru
IkarHomeCenter
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32906534
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Виталий
Я попробовал сделать как вы говорите, но ошибка не исчезла.
Если я пытаюсь удалить ОЛЕ-объект oObj :=NULL. При этом возникает та же ошибка.


Это ни как не влияет на объект на EAS

_Виталий
Кроме того, на самом EAServer ресурсы не освобождаются. То есть однажды созданные объекты остаются активными до перегрузки сервера. В настройках объяекта я указал только Bind Object, то есть пул использовать не должен.

Что это может быть?

Он может попадать в пул, за это отвечает не то свойство, которые написали вы, а свойство "Pooling".
Во вторых, если создаете StateFull компонент (свойство "Automatic demarcation/deactivation"), то пока вы ему complete не скажите он будет висеть.
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32906864
_Виталий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сотников _Виталий
Я попробовал сделать как вы говорите, но ошибка не исчезла.
Если я пытаюсь удалить ОЛЕ-объект oObj :=NULL. При этом возникает та же ошибка.


Это ни как не влияет на объект на EAS

_Виталий
Кроме того, на самом EAServer ресурсы не освобождаются. То есть однажды созданные объекты остаются активными до перегрузки сервера. В настройках объяекта я указал только Bind Object, то есть пул использовать не должен.

Что это может быть?

Он может попадать в пул, за это отвечает не то свойство, которые написали вы, а свойство "Pooling".
Во вторых, если создаете StateFull компонент (свойство "Automatic demarcation/deactivation"), то пока вы ему complete не скажите он будет висеть.

Из установленных свойств только "Bind Object". Мне кажется проблема в том, что некорректно завершается работа с компонентом, только не знаю почему. Возможно, виноват exception, который возникает всякий раз при завершении приложения или принудительном отключении от компонента.

Что значит сказать complete? Это тот же Disconnect?
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32906896
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_Виталий
Что значит сказать complete? Это тот же Disconnect?

Connect/Disconnect - это клиента к серверу EAS, а Create/Destroy и Activation/Deactivation компонента это совсем другое.

Вот тут про жизненный цикл компонента:
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.easerver_5.2/html/easpg/easpgp8.htm
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32911048
_Виталий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сотников _Виталий
Что значит сказать complete? Это тот же Disconnect?

Connect/Disconnect - это клиента к серверу EAS, а Create/Destroy и Activation/Deactivation компонента это совсем другое.

Вот тут про жизненный цикл компонента:
http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.easerver_5.2/html/easpg/easpgp8.htm


Разобрался, спасибо

Остался самый главный вопрос: как работать с ConnectionCashe из Делфи?
В документации описан пример для C++, который использует JagAPI. А как быть с Делфи? Конвертировать сишные файлы заголовков в паскалевские - утомительная и, возможно, нереализуемая задача.
Может кто-то встречал пример использования JagAPI в Делфи?
Буду очень благодарен!
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32911098
Фотография ЗоринАндрей
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как работать с ConnectionCashe из Делфи?
зачем?
клиенту Connection Cache не нужны.
Вы серверные компоненты ДЛЯ EAServer на Delphi пишете?
если да, то почему не на Java или PB?
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32912457
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ЗоринАндрей как работать с ConnectionCashe из Делфи?
зачем?
клиенту Connection Cache не нужны.
Вы серверные компоненты ДЛЯ EAServer на Delphi пишете?
если да, то почему не на Java или PB?

Андрей прав... Пример на C++ там написан потому что серверные компоненты можно писать на нем.
Клиенту нужен только коннект к EAS, а ConnectionCashe - компоненту на EAS.
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32914092
_Виталий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сотников ЗоринАндрей как работать с ConnectionCashe из Делфи?
зачем?
клиенту Connection Cache не нужны.
Вы серверные компоненты ДЛЯ EAServer на Delphi пишете?
если да, то почему не на Java или PB?

Андрей прав... Пример на C++ там написан потому что серверные компоненты можно писать на нем.
Клиенту нужен только коннект к EAS, а ConnectionCashe - компоненту на EAS.

Спасибо за советы

Все компоненты писал на Делфи - я превожу проект, в котором был реализован собственный сервер приложений, в среду EAServer. При этом нужно сохранить хотя бы часть кода дабы не переписывать все заново. Поэтому Делфи без особых вариантов...
Использовать Connection Cashes из Делфи не получилось, пришлось написать компонент подключения к БД на PB - все работает.

Не получается только передавать ResultSets из PB-компонента. Может знаете как?
Или может проще на Java написать компонент для подключения к БД?
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32914460
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
_ВиталийНе получается только передавать ResultSets из PB-компонента. Может знаете как?
Или может проще на Java написать компонент для подключения к БД?

А у PB баг с генерацией и восстановление resultsetов.
Написал в поддержку... жду...

PB 9.0.2 7578
...
Рейтинг: 0 / 0
EAServer и Delphi
    #32915101
Сотников
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
---------------------------
integer dsobject.GenerateResultSet (REF ResultSet rsdest { ,dwBuffer dwbuffer } )

Argument        Description
dsobject        The name of the DataStore object that contains the data to be 
            returned in the result set.
rsdest  The ResultSet object into which the data in the DataStore is written. 
            This value is passed by reference.
                          ^^^^^^^^^^^^^^^^^^^
                          |||||||||||||||||||
---------------------------

Destroying or modifying the DataStore      
The generated ResultSet object maintains a reference to the DataStore 
from which it was generated, so changes made to the DataStore object 
after the result set is generated will be reflected in the generated 
ResultSet object.  If you destroy the DataStore object before returning 
the result set, the result set becomes invalid. 
---------------------------

Смысл в том, что при возврате из компонента ResultSet датасторе из которого он сделан дестроить не нужно.
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / PowerBuilder [игнор отключен] [закрыт для гостей] / EAServer и Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]