 |
|

05.04.2021, 00:57
|
|
Участник форума
Регистрация: 03.08.2019
Сообщений: 168
С нами:
3568604
Репутация:
48
|
|
Хаюшки, тут возникла необходимость работы с bitstream
Вот например, хочу я отправить в чат сообщение(не от моего лица, а в виде серверного), не через функцию отправки сообщения, а напрямую через RPC
Вроде сделал так, как надо, но текста в чате нету
с++:
Код:
char
text
[
]
=
"hello"
;
BitStream bsActorSync
;
bsActorSync
.
Write
(
(
UINT32
)
0xFFFFFF
)
;
bsActorSync
.
Write
(
(
UINT32
)
sizeof
(
text
)
)
;
bsActorSync
.
Write
(
text
)
;
SF
->
getRakNet
(
)
->
SendRPC
(
RPC_ScrClientMessage
,
&
bsActorSync
)
;
можете сказать, в чем проблема
|
|
|

05.04.2021, 01:05
|
|
Постоянный
Регистрация: 21.11.2014
Сообщений: 540
С нами:
6039222
Репутация:
163
|
|
|
|
|

05.04.2021, 01:06
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
1. Есть в SF встроенная функция, так что все это не надо
Код:
SF->getSAMP()->getChat()->AddChatMessage( -1, "text" );
Но всё же.
2. В отличие от битстрима пакета, в начале битстрима rpc нет айди rpc, поэтому его записывать не надо.
3.
возвращает размер переменной, а не длинну текст, в твоём случае это будет 4 байта, то есть размер любого указателя. Вместо него тебе надо записать длинну текста, к примеру, с помощью
4. Тебе надо эмулировать rpc, а не отправлять его
Код:
SF->getRakNet()->emulateRecvRPC
.
|
|
|

05.04.2021, 01:10
|
|
Постоянный
Регистрация: 08.06.2019
Сообщений: 787
С нами:
3649171
Репутация:
163
|
|
Сообщение от SC6UT
1. Есть в SF встроенная функция, так что все это не надо
Код:
SF->getSAMP()->getChat()->AddChatMessage( -1, "text" );
Но всё же.
2. В отличие от битстрима пакета, в начале битстрима rpc нет айди rpc, поэтому его записывать не надо.
3.
возвращает размер переменной, а не длинну текст, в твоём случае это будет 4 байта, то есть размер любого указателя. Вместо него тебе надо записать длинну текста, к примеру, с помощью
4. Тебе надо эмулировать rpc, а не отправлять его
Код:
SF->getRakNet()->emulateRecvRPC
.
В данном случае size - это массив char, поэтому sizeof вернет его размер = 6
|
|
|

05.04.2021, 01:11
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
Сообщение от alexandersaxon
В данном случае size - это массив char, поэтому sizeof вернет его размер = 6
да, но это только в этом случае.
|
|
|

05.04.2021, 01:15
|
|
Участник форума
Регистрация: 03.08.2019
Сообщений: 168
С нами:
3568604
Репутация:
48
|
|
Сообщение от SC6UT
да, но это только в этом случае.
Какой случай может быть, который под это не подходит?
|
|
|

05.04.2021, 01:15
|
|
Постоянный
Регистрация: 08.06.2019
Сообщений: 787
С нами:
3649171
Репутация:
163
|
|
Сообщение от ANZR
Какой случай может быть, который под это не подходит?
Код:
const char* bar = "hello"
sizeof(bar) вернет 4, либо 8
|
|
|

05.04.2021, 01:16
|
|
Участник форума
Регистрация: 03.08.2019
Сообщений: 168
С нами:
3568604
Репутация:
48
|
|
Сообщение от SC6UT
1. Есть в SF встроенная функция, так что все это не надо
Код:
SF->getSAMP()->getChat()->AddChatMessage( -1, "text" );
Но всё же.
2. В отличие от битстрима пакета, в начале битстрима rpc нет айди rpc, поэтому его записывать не надо.
3.
возвращает размер переменной, а не длинну текст, в твоём случае это будет 4 байта, то есть размер любого указателя. Вместо него тебе надо записать длинну текста, к примеру, с помощью
4. Тебе надо эмулировать rpc, а не отправлять его
Код:
SF->getRakNet()->emulateRecvRPC
.
Благодарю за объяснение всех моих ошибок
Кстати, по поводу AddChatMessage я знаю и сказал еще вначале, что мне нужно это сделать через bitStream, т.к у меня есть очень интересная идея, а это лишь один шаг для ее реализации, т.к я работать буду не только с текстом
|
|
|

05.04.2021, 01:20
|
|
Постоянный
Регистрация: 03.05.2020
Сообщений: 385
С нами:
3174020
Репутация:
213
|
|
Сообщение от ANZR
Благодарю за объяснение всех моих ошибок
Кстати, по поводу AddChatMessage я знаю и сказал еще вначале, что мне нужно это сделать через bitStream, т.к у меня есть очень интересная идея, а это лишь один шаг для ее реализации, т.к я работать буду не только с текстом
забыл еще сказать: текст надо записывать в битстрим вместе с его размером, так:
Код:
bs.Write( text, strlen( text ) );
|
|
|

05.04.2021, 01:25
|
|
Участник форума
Регистрация: 03.08.2019
Сообщений: 168
С нами:
3568604
Репутация:
48
|
|
Сообщение от SC6UT
забыл еще сказать: текст надо записывать в битстрим вместе с его размером, так:
Код:
bs.Write( text, strlen( text ) );
Это я заметил по примеру, что мне скинули. С чем это вообще связано, можно спросить. Почему просто не текст отправить ведь размер я передал еще в прошлом действии
|
|
|
|
 |
|
Предыдущая тема
Следующая тема
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|