#delphi
Как правильно записать это TIdContext(Clients[0]).Data := 'Client3'; И как потом её можно прочесть? upd пробую так, выдаёт access violation procedure TForm1.IdTCPServer1Execute(AContext: TIdContext); begin ResString := Creator.TcpResCreate(ReqString); .... function PCreator.TcpResCreate(ClientReq : String) : String; // функция в другом юните begin if login then begin if not Assigned(Form1.IdTCPServer1.Contexts) then exit; Clients := Form1.IdTCPServer1.Contexts.LockList; TIdContext(Clients[Clients.Count - 1]).Data := TStringHolder.Create(Req.sessionKey.xPlayer); Form1.IdTCPServer1.Contexts.UnlockList; Result := xxx; .... procedure TForm1.Button1Click(Sender: TObject); begin TIdContext(Clients[0]).Connection.Socket.Write('message'); IdTCPServer1.Contexts.UnlockList; .... может дело в создаваемом классе? upd перестало выдавать ошибку после того как я убрал, Clients := TLists.Create; Clients.Free; Видимо их не надо создавать. А с классом вроде норм все.
Ответы
Ответ 1
type TStringHolder = class private fValue: string; function GetValue: string; public constructor Create(aValue: string); property Value: string read GetValue write fValue; end; constructor TStringHolder.Create(aValue: string); begin fValue := aValue; end; function TStringHolder.GetValue: string; begin if self <> nil then result := fValue else result := ''; end; Записать: TIdContext(IdTCPServer1.Contexts.LockList[0]).Data := TStringHolder.Create('Client3'); Прочитать: ... := TStringHolder(TIdContext(IdTCPServer1.Contexts.LockList[0]).Data).Value; Не забудьте потом вызвать: TIdContext(IdTCPServer1.Contexts.LockList[0]).Data.Free; TIdContext(IdTCPServer1.Contexts.LockList[0]).Data := nil;Ответ 2
Минуту, прежде чем мы углубимся в интерфейсы, сборку мусора и утечки памяти. Я почитал про класс TIdTCPServer. У него есть свойство ContextClass - тип контекста, который он будет создавать. Вы можете унаследовать от ТIdContext, добавить свое строковое свойство, назначить class of Вашего наследника IdTCPServer1.ContextClass = class of TMyIdContext; и потом кастить Clients[index] к Вашему типу. http://www.indyproject.org/docsite/html/frames.html?frmname=topic&frmfile=TIdTCPServer.html
Комментариев нет:
Отправить комментарий