Я разрабатываю приложение, которое отправляет данные OSC через UDP между хост-программой и iPad. Отправка с iPad на хост-программу была достаточно простой. Однако получение данных из хост-программы на iPad было более проблематичным.
Я дошел до того, что iPad получает данные, но застревает в функции прослушивания пакетов .run (). Насколько я понимаю, .break () прервет функцию и вернется к моей основной программе, но, похоже, она не работает.
Я более опытен в работе с target-c в среде iOS, поэтому, возможно, мое рудиментарное понимание C ++ подводит меня.
Код ниже: (Я использовал библиотеку oscPack для создания этого кода. Доступно здесь: http://www.rossbencina.com/code/oscpack)
в моей основной функции (где точки перерыва () не работают):
ExamplePacketListener listener;
UdpListeningReceiveSocket s(
IpEndpointName( IpEndpointName::ANY_ADDRESS, RECEIVEPORT ),
&listener );
s.RunUntilSigInt();
//s.Run();
s.Break();
s.AsynchronousBreak();
Мой класс прослушивателя пакетов, очень похожий на пример oscPack. С некоторыми изменениями аргумента. Это была еще одна область, которая, как я чувствовал, могла вызвать проблемы. Если мои сообщения osc заполнены неправильно, может ли это остановить функцию run () от возврата?
class ExamplePacketListener : public osc::OscPacketListener {
protected:
virtual void ProcessMessage( const osc::ReceivedMessage& m,
const IpEndpointName& remoteEndpoint )
{
(void) remoteEndpoint; // suppress unused parameter warning
try{
// example of parsing single messages. osc::OsckPacketListener
// handles the bundle traversal.
if( std::strcmp( m.AddressPattern(), "/oscMasterSend" ) == 0 ){
// example #1 -- argument stream interface
osc::ReceivedMessageArgumentStream args = m.ArgumentStream();
bool a1;
args >> a1 >> osc::EndMessage;
NSLog(@"%d",a1);
}
}
}
};
Любой совет будет принята с благодарностью.
Спасибо,
Том.
Задача ещё не решена.