⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 oscpacket.cpp

📁 tracciatore di mani con webcam
💻 CPP
字号:
// OSCpacket.cpp: constructs OSC packets//#include "Common.h"#include "OSCpacket.h"#ifdef WIN32#include <winsock2.h>#else#include <netinet/in.h>#endif#ifdef USE_MFC#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif // _DEBUG#endif // USE_MFC/////////////////////////////////////////////////////////////////////////////// OSCpacketOSCpacket::OSCpacket()  : m_packet_ready(false){  ASSERT(sizeof(char)==1);  ASSERT(sizeof(int)==4);  ASSERT(sizeof(float)==4);}void OSCpacket::Clear(){  m_address = "";  m_typetags.clear();  m_values.clear();  m_packet_ready = false;}void OSCpacket::SetAddress(const string& address){  m_address = address;  CheckAddress();  m_packet_ready = false;}void OSCpacket::AddInt(int val){  char buf[4];  *((unsigned int*) buf) = htonl(val);  m_values.push_back(buf[0]);  m_values.push_back(buf[1]);  m_values.push_back(buf[2]);  m_values.push_back(buf[3]);  m_typetags.push_back('i');  m_packet_ready = false;}void OSCpacket::AddFloat(float val){  char buf[4];  *((unsigned int*) buf) = htonl(*((int*)&val));  m_values.push_back(buf[0]);  m_values.push_back(buf[1]);  m_values.push_back(buf[2]);  m_values.push_back(buf[3]);  m_typetags.push_back('f');  m_packet_ready = false;}void PadBytes(Bytes& bytes) {  int gap = (int)bytes.size()%4;  if (gap) {    for (int i=4-gap; i!=0; i--) {      bytes.push_back(0);    }  }}void OSCpacket::AddString(const string& val){  for (int i=0; i<(int)val.size(); i++) {    m_values.push_back(val[i]);  }  m_values.push_back('\0');  PadBytes(m_values);  m_typetags.push_back('s');  m_packet_ready = false;}const char* OSCpacket::GetBytes() const{  if (!m_packet_ready) {    ((OSCpacket*) this)->CreatePacket();  }  return &m_packet[0];}int OSCpacket::GetSize() const{  if (!m_packet_ready) {    ((OSCpacket*) this)->CreatePacket();  }  return (int) m_packet.size();}void OSCpacket::CreatePacket(){  ASSERT(!m_packet_ready);  m_packet.clear();  // add address and pad  CheckAddress();  m_packet.insert(m_packet.end(), m_address.begin(), m_address.end());  PadBytes(m_packet);  // add typetags and pad  m_packet.push_back(',');  // typetag separator  m_packet.insert(m_packet.end(), m_typetags.begin(), m_typetags.end());  PadBytes(m_packet);  // add values and pad  m_packet.insert(m_packet.end(), m_values.begin(), m_values.end());  PadBytes(m_packet);  m_packet_ready = true;}void OSCpacket::CheckAddress(){  if (m_address.size()<1) throw HVException("OSC address must not be empty");  if (m_address[0]!='/') throw HVException("OSC address must start with '/'");  for (int i=0; i<(int)m_address.size(); i++) {    if (m_address[i]==',') {      throw HVException("OSC address can not contain ',' for now");    }  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -