powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TDbxConnection и TDSServerModule в DataSnap
14 сообщений из 14, страница 1 из 1
TDbxConnection и TDSServerModule в DataSnap
    #37105779
v.kirilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Бьюсь уже достаточно давно, но решения так и не нашёл. Google ответа не дал.

Имеем:
Сервер приложений, написанный на Delphi 2010. Протокол TCP/IP.

Проблема:
Не могу увязать созданный сервером экземпляр TDSServerModule с клиентом, который инициировал соединение.
Нужно из этого DSServerModule получить доступ к нужному DbxConnection или хотя бы наоборот... И где искать список этих самых DbxConnection'ов?

А то сейчас приходится, например, имя пользователя передавать из клиента 2 раза - при подключении и ещё через процедуру в DSServerModule.

Может кто знает, в какую сторону копать?
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #37106144
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
 procedure  TAppSrvDSService.DataSnapServerConnect(DSConnectEventObject: TDSConnectEventObject);
 var 
  Conn: TIdTCPConnection;
  sProtocol: String ;
  Protocol:Integer;
 begin 
   sProtocol := DSConnectEventObject.ConnectProperties.Values['Protocol'];
    if   not  TryStrToInt(sProtocol, Protocol)  then  Protocol :=  0 ;

   Trace( 'Protocol:' + IntToStr(Protocol));
    if  Protocol < Options.MinProtocol  then 
    begin 
      raise  Exception.CreateFmt('Minimal protocol %d. Your is %d.' + sLineBreak +
                               ' Upgrade your application.' , [Options.MinProtocol, Protocol]);
    end ;
   Conn := TIdTCPConnection(DSConnectEventObject.ChannelInfo.Id);
   Trace('Client ' + Conn.Socket.Binding.PeerIP +':' + IntToStr(Conn.Socket.Binding.PeerPort));
   Trace('Client info: ' + DSConnectEventObject.ChannelInfo.Info);
   ContextList.AddConnection(Conn);
 end ;

Не наведёт на мысли?
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #37106459
v.kirilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Michael Longneck, Спасибо!
Конечно наведёт!

Но в момент коннекта, я ведь всё равно ничего не знаю об экземпляре TDSServerModule, он ещё не создан и передать никакую информацию о соединении не могу...

Вижу, Michael, что вы в теме, поэтому попутно ещё вопрос:

Не навредит ли чему-нибудь, если я буду ручками создавать и уничтожать этот самый TDSServerModule таким образом:

procedure TServerContainer1.DSServerClass1CreateInstance(
DSCreateInstanceEventObject: TDSCreateInstanceEventObject);
begin
DSCreateInstanceEventObject.ServerClassInstance := TServerMethods1.Create(nil);
end;

procedure TServerContainer1.DSServerClass1DestroyInstance(
DSDestroyInstanceEventObject: TDSDestroyInstanceEventObject);
begin
DSDestroyInstanceEventObject.ServerClassInstance.Free;
DSDestroyInstanceEventObject.ServerClassInstance := nil;
end;

Проверил, вроде бы ничего не рушится. Если это легитимные действия, то это решит некоторые пои проблемы.
Хотя информацию об ChannelInfo, видимо, я здесь получить не могу?
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #37106603
Michael Longneck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создавать руками можно. Вы, я, так понимаю в TSQLConnection в параметрах хотите передать имя пользователя, а потом ассоциировать с экземпляром? Их есть у меня. Я бился тоже, а потом применил обходной манёвр.

Вот у этого события - DataSnapServerConnect и у кода внутри экземпляра DSServerModule есть одно общее дело - они в одном потоке исполняются. Поэтому заведите словарь контекстов с ключом по ThreadID. И в каждом событии положите в него нужные значения - instance of TDSServerModule , idConnection и прочая. Только, естественно, синхронизируйтесь при доступе.
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #37106624
v.kirilin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Michael LongneckСоздавать руками можно. Вы, я, так понимаю в TSQLConnection в параметрах хотите передать имя пользователя, а потом ассоциировать с экземпляром? Их есть у меня. Я бился тоже, а потом применил обходной манёвр.

Вот у этого события - DataSnapServerConnect и у кода внутри экземпляра DSServerModule есть одно общее дело - они в одном потоке исполняются. Поэтому заведите словарь контекстов с ключом по ThreadID. И в каждом событии положите в него нужные значения - instance of TDSServerModule , idConnection и прочая. Только, естественно, синхронизируйтесь при доступе.

ООО!!!
Вот это да! Спасибо огромнейшее!
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
TDbxConnection и TDSServerModule в DataSnap
    #39718088
ameise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Michael Longneck,
...Поэтому заведите словарь контекстов с ключом по ThreadID,
не подскажите как добраться до ThreadID в событии DSServer1Connect
был бы очень благодарен, что то никак не могу сообразить
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #39718127
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
TThread.CurrentThread.ThreadID
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #39718207
ameise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-Cite,
прошу прощения за неточный вопрос. Дело в том что хотельсь бы решение в контексте создания коннекта. Там есть объект TDSConnectEventObject,.. и вот там образом мы добираемся до параметров коннекта:
Код: pascal
1.
2.
3.
4.
ure TServerContainer1.DSServer1Connect(DSConnectEventObject: TDSConnectEventObject);
var hConn: TIdTCPConnection;
begin
hConn := TIdTCPConnection(DSConnectEventObject.ChannelInfo.Id);


есть подозрение, что DSConnectEventObject.ChannelInfo.Id и есть этот идентификатор,
Может есть какой то способ добраться до ThreadID в данном контексте?
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #39718233
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Michael LongneckВот у этого события - DataSnapServerConnect и у кода внутри экземпляра DSServerModule есть одно общее дело - они в одном потоке исполняются.
Если верить этому, то вариант с TThread.CurrentThread.ThreadID вернет вам идентификатор нити в рамках которой вызывается событие DSServer1Connect
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #39718247
ameise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
X-CiteMichael LongneckВот у этого события - DataSnapServerConnect и у кода внутри экземпляра DSServerModule есть одно общее дело - они в одном потоке исполняются.
Если верить этому, то вариант с TThread.CurrentThread.ThreadID вернет вам идентификатор нити в рамках которой вызывается событие DSServer1Connect

спасибо. что то возвратил, ..номер каждый раз разный.
меня просто смущает такое обращение к классу TThread, т.е. фактически к описанию класса, а не экземпляра класса.., почему он вообще не nil?
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #39718248
ameise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не подскажите в образовательных целях что можно посмотреть по этой теме,... не конкретно эта задача, а почему так можно обращаться к описанию класса,. а не к его экземпляру
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #39718249
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #39718250
Фотография X-Cite
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
TDbxConnection и TDSServerModule в DataSnap
    #39718286
ameise
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / TDbxConnection и TDSServerModule в DataSnap
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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