bool Wiimote::Write() { if (!m_write_reports.Empty()) { Report const& rpt = m_write_reports.Front(); bool const is_speaker_data = rpt[1] == WM_WRITE_SPEAKER_DATA; if (!is_speaker_data || m_last_audio_report.GetTimeDifference() > 5) { if (SConfig::GetInstance().iBBDumpPort > 0 && m_index == WIIMOTE_BALANCE_BOARD) { static sf::UdpSocket Socket; Socket.send((char*)rpt.data(), rpt.size(), sf::IpAddress::LocalHost, SConfig::GetInstance().iBBDumpPort); } IOWrite(rpt.data(), rpt.size()); if (is_speaker_data) { m_last_audio_report.Update(); } m_write_reports.Pop(); return true; } } return false; }
bool Wiimote::Read() { Report rpt(MAX_PAYLOAD); auto const result = IORead(rpt.data()); if (result > 0 && m_channel > 0) { if (SConfig::GetInstance().iBBDumpPort > 0 && m_index == WIIMOTE_BALANCE_BOARD) { static sf::UdpSocket Socket; Socket.send((char*)rpt.data(), rpt.size(), sf::IpAddress::LocalHost, SConfig::GetInstance().iBBDumpPort); } // Add it to queue rpt.resize(result); m_read_reports.Push(std::move(rpt)); return true; } else if (0 == result) { ERROR_LOG(WIIMOTE, "Wiimote::IORead failed. Disconnecting Wiimote %d.", m_index + 1); DisconnectInternal(); } return false; }
// // PacketSend // void PacketSend(void) { int c; doomdata_t sw; // byte swap sw.checksum = htonl(netbuffer->checksum); sw.player = netbuffer->player; sw.retransmitfrom = netbuffer->retransmitfrom; sw.starttic = netbuffer->starttic; sw.numtics = netbuffer->numtics; for (c = 0; c< netbuffer->numtics; c++) { sw.cmds[c].forwardmove = netbuffer->cmds[c].forwardmove; sw.cmds[c].sidemove = netbuffer->cmds[c].sidemove; sw.cmds[c].angleturn = htons(netbuffer->cmds[c].angleturn); sw.cmds[c].consistancy = htons(netbuffer->cmds[c].consistancy); sw.cmds[c].chatchar = netbuffer->cmds[c].chatchar; sw.cmds[c].buttons = netbuffer->cmds[c].buttons; } //printf ("sending %i\n",gametic); c = (int)sendsocket.send( &sw, doomcom->datalength , sendaddress[doomcom->remotenode], DOOMPORT); // if (c == -1) // I_Error ("SendPacket error: %s",strerror(errno)); }
void Wiimote::Write() { if (m_write_reports.Empty()) return; Report const& rpt = m_write_reports.Front(); if (SConfig::GetInstance().iBBDumpPort > 0 && m_index == WIIMOTE_BALANCE_BOARD) { static sf::UdpSocket Socket; Socket.send((char*)rpt.data(), rpt.size(), sf::IpAddress::LocalHost, SConfig::GetInstance().iBBDumpPort); } IOWrite(rpt.data(), rpt.size()); m_write_reports.Pop(); if (!m_write_reports.Empty()) IOWakeup(); }
void Connection::send(sf::UdpSocket &socket, sf::Packet &packet) { if (socket.send(packet, address, port) != sf::Socket::Done) { logger->log("failed to send a package", Logger::Level::Error); } }