/** \brief Broadcasts a packet to all peers. * \param data : Data to send. */ void Network::broadcastPacket(const NetworkString& data, bool reliable) { ENetPacket* packet = enet_packet_create(data.getBytes(), data.size() + 1, reliable ? ENET_PACKET_FLAG_RELIABLE : ENET_PACKET_FLAG_UNSEQUENCED); enet_host_broadcast(m_host, 0, packet); } // broadcastPacket
/** Sends a packet to this host. * \param data The data to send. * \param reliable If the data is sent reliable or not. */ void STKPeer::sendPacket(NetworkString const& data, bool reliable) { TransportAddress a(m_enet_peer->address); Log::verbose("STKPeer", "sending packet of size %d to %s", data.size(), a.toString().c_str()); ENetPacket* packet = enet_packet_create(data.getBytes(), data.size() + 1, (reliable ? ENET_PACKET_FLAG_RELIABLE : ENET_PACKET_FLAG_UNSEQUENCED)); enet_peer_send(m_enet_peer, 0, packet); } // sendPacket
void STKPeer::sendPacket(NetworkString const& data, bool reliable) { TransportAddress a(m_peer->address); Log::verbose("STKPeer", "sending packet of size %d to %s", a.toString().c_str()); ENetPacket* packet = enet_packet_create(data.getBytes(), data.size() + 1, (reliable ? ENET_PACKET_FLAG_RELIABLE : ENET_PACKET_FLAG_UNSEQUENCED)); /* to debug the packet output printf("STKPeer: "); for (unsigned int i = 0; i < data.size(); i++) { printf("%d ", (uint8_t)(data[i])); } printf("\n"); */ enet_peer_send(m_peer, 0, packet); }
// ---------------------------------------------------------------------------- void STKHost::handleLANRequests() { const int LEN=2048; char buffer[LEN]; TransportAddress sender; int len = m_lan_network->receiveRawPacket(buffer, LEN, &sender, 1); if(len<=0) return; if (std::string(buffer, len) == "stk-server") { Log::verbose("STKHost", "Received LAN server query"); std::string name = StringUtils::wideToUtf8(NetworkConfig::get()->getServerName()); // Avoid buffer overflows if (name.size() > 255) name = name.substr(0, 255); // Send the answer, consisting of server name, max players, // current players, and the client's ip address and port // number (which solves the problem which network interface // might be the right one if there is more than one). NetworkString s; s.encodeString(name); s.addUInt8(NetworkConfig::get()->getMaxPlayers()); s.addUInt8(0); // FIXME: current number of connected players s.addUInt32(sender.getIP()); s.addUInt16(sender.getPort()); m_lan_network->sendRawPacket(s.getBytes(), s.size(), sender); } // if message is server-requested else if (std::string(buffer, len) == "connection-request") { Protocol *c = new ConnectToPeer(sender); c->requestStart(); } else Log::info("STKHost", "Received unknown command '%s'", std::string(buffer, len).c_str()); } // handleLANRequests