#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
Комментариев нет:
Отправить комментарий