本文整理汇总了C++中NetworkMessage::AddByte方法的典型用法代码示例。如果您正苦于以下问题:C++ NetworkMessage::AddByte方法的具体用法?C++ NetworkMessage::AddByte怎么用?C++ NetworkMessage::AddByte使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类NetworkMessage
的用法示例。
在下文中一共展示了NetworkMessage::AddByte方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: OnReceiveHello
void LiveServer::OnReceiveHello(LivePeer* connection, NetworkMessage* nmsg)
{
uint32_t rvid = nmsg->ReadU32();
if(rvid != __RME_VERSION_ID__)
{
NetworkMessage* omsg = AllocMessage();
omsg->AddByte(PACKET_KICK); // FAREWELL
omsg->AddString("Wrong editor version.");
connection->Send(omsg);
connection->Close();
return;
}
uint32_t net_ver = nmsg->ReadU32();
if(net_ver != __LIVE_NET_VERSION__)
{
NetworkMessage* omsg = AllocMessage();
omsg->AddByte(PACKET_KICK); // FAREWELL
omsg->AddString("Wrong protocol version.");
connection->Send(omsg);
connection->Close();
return;
}
uint32_t client_version = nmsg->ReadU32();
std::string rnick = nmsg->ReadString();
std::string pass = nmsg->ReadString();
wxString upass = wxString(pass.c_str(), wxConvUTF8);
if(password != upass)
{
log->Message(wxT("Client tried to connect, but used the wrong password, connection refused."));
connection->Close();
return;
}
connection->SetNick(wxString(rnick.c_str(), wxConvUTF8));
log->Message(connection->GetNick() << wxT(" (") << connection->GetHost() << wxT(") connected."));
if((ClientVersionID)client_version != gui.GetCurrentVersionID())
{
NetworkMessage* omsg = AllocMessage();
omsg->AddByte(PACKET_CHANGE_CLIENT_VERSION); // CHANGE CLIENT VER
omsg->AddU32(gui.GetCurrentVersionID());
connection->Send(omsg);
}
else
{
// Reply that we have accepted the remote connection
NetworkMessage* omsg = AllocMessage();
omsg->AddByte(PACKET_ACCEPTED_CLIENT); // CONNECTION ACCEPTED WITHOUT ISSUE
connection->Send(omsg);
}
}
示例2: OnReceiveReady
void LiveServer::OnReceiveReady(LivePeer* connection, NetworkMessage* nmsg)
{
// Client has changed server version to the proper one
PeerList::iterator piter = std::find(connecting_clients.begin(), connecting_clients.end(), connection);
if (piter == connecting_clients.end())
{
connection->Close();
return;
}
connecting_clients.erase(piter);
// Find free client id
bool f = false;
for(size_t s = 1; s < 16; ++s)
{
if((1 << s) & ~client_mask)
{
connection->SetClientID(s);
client_mask |= (1 << s);
f = true;
break;
}
}
if(!f)
{
// Not enough room, disconnect!
NetworkMessage* omsg = AllocMessage();
omsg->AddByte(0x81); // FAREWELL
omsg->AddString("Server is full.");
connection->Send(omsg);
connection->Close();
return;
}
connected_clients.push_back(connection);
log->UpdateClientList(connected_clients);
// Let's reply
NetworkMessage* omsg = AllocMessage();
omsg->AddByte(0x80); // HELLO TO YOU TOO!
omsg->AddString(editor->map.getName());
omsg->AddU16(editor->map.getWidth());
omsg->AddU16(editor->map.getHeight());
connection->Send(omsg);
// Change parser
connection->parser = &LiveServer::OnParseEditorPackets;
}
示例3: OnReceivePing
void RMENet::OnReceivePing(NetworkMessage *nmsg)
{
// Send pong
NetworkMessage* omsg = AllocMessage();
omsg->AddByte(0x02);
connection->Send(omsg);
}
示例4: UpdateOperation
void LiveServer::UpdateOperation(int percent)
{
for(PeerList::iterator citer = connected_clients.begin(); citer != connected_clients.end(); ++citer)
{
NetworkMessage* msg = AllocMessage();
msg->AddByte(PACKET_UPDATE_OPERATION);
msg->AddU32(percent);
(*citer)->Send(msg);
}
}
示例5: StartOperation
void LiveServer::StartOperation(wxString msg)
{
for(PeerList::iterator citer = connected_clients.begin(); citer != connected_clients.end(); ++citer)
{
NetworkMessage* nmsg = AllocMessage();
nmsg->AddByte(PACKET_START_OPERATION);
nmsg->AddString(nstr(msg));
(*citer)->Send(nmsg);
}
}
示例6: BroadcastChat
void LiveServer::BroadcastChat(wxString speaker, wxString message)
{
for(PeerList::iterator citer = connected_clients.begin(); citer != connected_clients.end(); ++citer)
{
NetworkMessage* nmsg = AllocMessage();
nmsg->AddByte(PACKET_SERVER_TALK);
nmsg->AddString(nstr(speaker));
nmsg->AddString(nstr(message));
(*citer)->Send(nmsg);
}
log->Chat(name, message);
}
示例7: BroadcastCursor
void LiveServer::BroadcastCursor(const LiveCursor& cursor)
{
for(PeerList::iterator citer = connected_clients.begin(); citer != connected_clients.end(); ++citer)
{
if((*citer)->GetClientID() != cursor.id)
{
NetworkMessage* msg = AllocMessage();
msg->AddByte(PACKET_CURSOR_UPDATE);
AddCursor(msg, cursor);
(*citer)->Send(msg);
}
}
}
示例8: Connect
bool RMENet::Connect()
{
wxIPV4address ipaddr;
ipaddr.Hostname("127.0.0.1");//90.230.54.138"));
ipaddr.Service(31312);
socket = newd wxSocketClient(wxSOCKET_NOWAIT);
connection = newd NetworkConnection(this, socket);
socket->SetClientData(connection);
socket->SetEventHandler(*this, wxID_ANY);
socket->SetNotify(wxSOCKET_INPUT_FLAG | wxSOCKET_OUTPUT_FLAG | wxSOCKET_LOST_FLAG);
socket->Notify(true);
wxEvtHandler::Connect(wxID_ANY, wxEVT_SOCKET, wxSocketEventHandler(RMENet::HandleEvent));
socket->Connect(ipaddr, false);
if(!socket || !socket->WaitOnConnect(5, 0) ||
!socket || !socket->IsConnected())
{
if(socket)
socket->Destroy();
socket = nullptr;
delete connection;
connection = nullptr;
return false;
}
NetworkMessage* nmsg = AllocMessage();
nmsg->AddByte(0x00); // Hello!
nmsg->AddU32(__LIVE_NET_VERSION__);
nmsg->AddString(g_settings.getString(Config::LIVE_USERNAME));
nmsg->AddString(g_settings.getString(Config::LIVE_PASSWORD));
connection->Send(nmsg);
return true;
}
示例9: substractMoneyContainer
bool Player::substractMoneyContainer(Container *container, unsigned long *money)
{
int goldcoins;
int platcoins;
NetworkMessage msg;
for(int i=0; i<container->size();i++)
{
Item *item = container->getItem(i);
Container* new_container = dynamic_cast<Container*>(item);
if(new_container && *money)
{
substractMoneyContainer(new_container, money);
}
else if(item && *money)
{
switch(item->getID())
{
case ITEM_COINS_GOLD:
//gold coins
msg.Reset();
goldcoins = item->getItemCountOrSubtype();
for(containerLayout::const_iterator cit = getContainers(); cit != getEndContainer(); ++cit) {
if(cit->second == container) {
//remove item
msg.AddByte(0x72);
msg.AddByte(cit->first);
msg.AddByte(i);
}
}
container->removeItem(item);
if(*money >= goldcoins)
{
i--; // If we remove an item from the container then we need substract 1 to the container's main item counter
*money -= goldcoins;
//delete item;
item->releaseThing();
}
else
{
item->setItemCountOrSubtype(goldcoins - *money);
*money = 0;
container->addItem(item);
for(containerLayout::const_iterator cit = getContainers(); cit != getEndContainer(); ++cit) {
if(cit->second == container) {
//add item
msg.AddByte(0x70);
msg.AddByte(cit->first);
msg.AddU16(item->getID());
msg.AddByte(item->getItemCountOrSubtype());
}
}
}
sendNetworkMessage(&msg);
break;
case ITEM_COINS_PLATINUM:
//platinum coins
msg.Reset();
goldcoins = item->getItemCountOrSubtype() * 100;
NetworkMessage msg2;
for(containerLayout::const_iterator cit = getContainers(); cit != getEndContainer(); ++cit) {
if(cit->second == container) {
//remove item
msg.AddByte(0x72);
msg.AddByte(cit->first);
msg.AddByte(i);
}
}
container->removeItem(item);
if(*money >= goldcoins)
{
i--; // If we remove an item from the container then we need substract 1 to the container's main item counter
*money -= goldcoins;
//delete item;
item->releaseThing();
}
else
{
platcoins = (int)((goldcoins - *money)/100);
goldcoins = (int)(goldcoins - *money)%100;
*money = 0;
if(platcoins)
{
item->setItemCountOrSubtype(platcoins);
container->addItem(item);
for(containerLayout::const_iterator cit = getContainers(); cit != getEndContainer(); ++cit) {
if(cit->second == container) {
//add item
msg.AddByte(0x70);
msg.AddByte(cit->first);
msg.AddU16(item->getID());
//.........这里部分代码省略.........
示例10: substractMoney
bool Player::substractMoney(unsigned long money)
{
int goldcoins;
int platcoins;
NetworkMessage msg;
for(int i=SLOT_HEAD; i <= SLOT_AMMO; i++)
{
Container* new_container = dynamic_cast<Container*>(items[i]);
if(new_container && money)
{
substractMoneyContainer(new_container, &money);
}
else if(items[i] && money)
{
switch(items[i]->getID())
{
case ITEM_COINS_GOLD:
//gold coins
goldcoins = items[i]->getItemCountOrSubtype();
if(money >= goldcoins)
{
money -= goldcoins;
//delete items[i];
items[i]->releaseThing();
items[i] = NULL;
}
else
{
items[i]->setItemCountOrSubtype(goldcoins - money);
money = 0;
}
client->sendInventory(i);
break;
case ITEM_COINS_PLATINUM:
//platinum coins
goldcoins = items[i]->getItemCountOrSubtype() * 100;
if(money >= goldcoins)
{
money -= goldcoins;
//delete items[i];
items[i]->releaseThing();
items[i] = NULL;
}
else
{
platcoins = (int)((goldcoins - money)/100);
goldcoins = (goldcoins - money)%100;
money = 0;
if(platcoins)
{
items[i]->setItemCountOrSubtype(platcoins);
if(goldcoins)
{
Item *new_item = Item::CreateItem(ITEM_COINS_GOLD, goldcoins);
Container *default_container = dynamic_cast<Container*>(getItem(SLOT_BACKPACK));
if(default_container && default_container->addItem(new_item)) // There is space in container
{
for(containerLayout::const_iterator cit = getContainers(); cit != getEndContainer(); ++cit) {
if(cit->second == default_container) {
//add item
msg.AddByte(0x70);
msg.AddByte(cit->first);
msg.AddU16(new_item->getID());
msg.AddByte(new_item->getItemCountOrSubtype());
}
}
}
else // There is no space in container
{
//TODO: place the item in ground...
delete new_item;
}
}
}
else
{
//delete items[i];
items[i]->releaseThing();
items[i] = NULL;
if(goldcoins)
{
Item *new_item = Item::CreateItem(ITEM_COINS_GOLD, goldcoins);
items[i] = new_item;
}
}
}
client->sendInventory(i);
break;
}
}
}
if(money == 0)
return true;
else
//.........这里部分代码省略.........