PDA

Просмотр полной версии : работа со строками


ppts
23.03.2009, 12:37
подскажите пожалуйста как изменить пакет идущий от сервера к клиенту? надо именно не создать новый, а переделать текущий. расскажу для чего надо...
пакет UserInfo идет от сервера к клиенту, я хочу его перехватить и записать нужные мне координаты, которые лежат в начале пакета. создать новый напряжно ибо этот пакет весит 706 байт.

alexteam
23.03.2009, 13:21
http://coderx.ru/showthread.php?t=10
первый же пример там.

NLObP
23.03.2009, 19:12
подскажите пожалуйста как изменить пакет идущий от сервера к клиенту? надо именно не создать новый, а переделать текущий. расскажу для чего надо...
пакет UserInfo идет от сервера к клиенту, я хочу его перехватить и записать нужные мне координаты, которые лежат в начале пакета. создать новый напряжно ибо этот пакет весит 706 байт.

1) Cохраняем пакет из переменной pck в переменную buf.
buf:=pck;
2) Уничтожаем пакет:
pck:='';
3) Изменяем в переменной buf данные с помощью команд

WriteC(v:byte; ind:integer=0) - пишет в переменную buf один байт
WriteH(v:word; ind:integer=0) - пишет в переменную buf число (2 байта) (v. 3.1.8+)
WriteD(v:integer; ind:integer=0) - пишет в переменную buf число (4 байта)
WriteF(v:double; ind:integer=0) - пишет в переменную buf число c плавающей запятой(8 байт) (v. 3.1.8+)
WriteS(v:string) - пишет в переменную buf строку (автоматический перевод в unicode)
В первых четырёх процедурах присутствует необязательный параметр ind. Если параметр не указан, то переменная buf дополняется байтом/числом, иначе модифицируется часть буфера.

Пример:
buf=HStr('AA BB CC DD EE');
Если вызвать функцию WriteD(10,1), то получим buf=[0A 00 00 00 EE].
А если просто WriteD(10), то [AA BB CC DD EE 0A 00 00 00].

4)Отправляем

SendToClient - отправляет клиенту содержимое переменной buf
SendToServer - отправляет серверу содержимое переменной buf
SendToClientEx(CharName: string) - отправляет клиенту с именем CharName содержимое переменной buf (v. 3.1.3+)
SendToServerEx(CharName: string) - отправляет серверу с именем CharName содержимое переменной buf (v. 3.1.3+)
(к пакету buf автоматически добавляются 2 байта длины)

lexayar
01.04.2009, 13:58
Или 2 пункт исключить, а 4 пункт заменить на: pck:=buf;