本文整理汇总了C++中raknet::RakPeerInterface::DeallocatePacket方法的典型用法代码示例。如果您正苦于以下问题:C++ RakPeerInterface::DeallocatePacket方法的具体用法?C++ RakPeerInterface::DeallocatePacket怎么用?C++ RakPeerInterface::DeallocatePacket使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类raknet::RakPeerInterface
的用法示例。
在下文中一共展示了RakPeerInterface::DeallocatePacket方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: main
int main(void)
{
RakNet::RakPeerInterface *peer = RakNet::RakPeerInterface::GetInstance();
bool isServer;
RakNet::Packet *packet;
RakNet::SocketDescriptor sd( SERVER_PORT,0 );
peer->Startup( MAX_CLIENTS, &sd, 1 );
isServer = true;
printf( "Starting the server.\n" );
// We need to let the server accept incoming connections from the clients
peer->SetMaximumIncomingConnections( MAX_CLIENTS );
while (1)
{
for( packet=peer->Receive(); packet; peer->DeallocatePacket(packet), packet=peer->Receive() )
{
handlePacket( packet, peer );
}
}
RakNet::RakPeerInterface::DestroyInstance( peer );
return 0;
}
示例2: PingRakNetServer
unsigned int PingRakNetServer(const char *addr, unsigned short port)
{
RakNet::Packet *packet;
bool done = false;
RakNet::TimeMS time = PING_UNREACHABLE;
RakNet::SocketDescriptor socketDescriptor{0, ""};
RakNet::RakPeerInterface *peer = RakNet::RakPeerInterface::GetInstance();
peer->Startup(1, &socketDescriptor, 1);
if (!peer->Ping(addr, port, false))
return time;
RakNet::TimeMS start = RakNet::GetTimeMS();
while (!done)
{
RakNet::TimeMS now = RakNet::GetTimeMS();
if (now - start >= PING_UNREACHABLE)
break;
packet = peer->Receive();
if (!packet)
continue;
switch (packet->data[0])
{
case ID_DISCONNECTION_NOTIFICATION:
case ID_CONNECTION_LOST:
done = true;
break;
case ID_CONNECTED_PING:
case ID_UNCONNECTED_PONG:
{
RakNet::BitStream bsIn(&packet->data[1], packet->length, false);
bsIn.Read(time);
time = now - time;
done = true;
break;
}
default:
break;
}
peer->DeallocatePacket(packet);
}
peer->Shutdown(0);
RakNet::RakPeerInterface::DestroyInstance(peer);
return time > PING_UNREACHABLE ? PING_UNREACHABLE : time;
}
示例3: main
//.........这里部分代码省略.........
serverAddress=notificationAddress;
}
notificationAddress=packetizedTCP.HasNewIncomingConnection();
if (notificationAddress!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
printf("ID_NEW_INCOMING_CONNECTION\n");
notificationAddress=packetizedTCP.HasLostConnection();
if (notificationAddress!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
printf("ID_CONNECTION_LOST\n");
p=packetizedTCP.Receive();
while (p)
{
if (p->data[0]==ID_AUTOPATCHER_REPOSITORY_FATAL_ERROR)
{
char buff[256];
RakNet::BitStream temp(p->data, p->length, false);
temp.IgnoreBits(8);
RakNet::StringCompressor::Instance()->DecodeString(buff, 256, &temp);
printf("ID_AUTOPATCHER_REPOSITORY_FATAL_ERROR\n");
printf("%s\n", buff);
}
else if (p->data[0]==ID_AUTOPATCHER_FINISHED)
{
printf("ID_AUTOPATCHER_FINISHED with server time %f\n", autopatcherClient.GetServerDate());
double srvDate=autopatcherClient.GetServerDate();
FILE *fp = fopen("srvDate", "wb");
fwrite(&srvDate,sizeof(double),1,fp);
fclose(fp);
}
else if (p->data[0]==ID_AUTOPATCHER_RESTART_APPLICATION)
printf("Launch \"AutopatcherClientRestarter.exe autopatcherRestart.txt\"\nQuit this application immediately after to unlock files.\n");
packetizedTCP.DeallocatePacket(p);
p=packetizedTCP.Receive();
}
#else
p=rakPeer->Receive();
while (p)
{
if (p->data[0]==ID_DISCONNECTION_NOTIFICATION)
printf("ID_DISCONNECTION_NOTIFICATION\n");
else if (p->data[0]==ID_CONNECTION_LOST)
printf("ID_CONNECTION_LOST\n");
else if (p->data[0]==ID_CONNECTION_REQUEST_ACCEPTED)
{
printf("ID_CONNECTION_REQUEST_ACCEPTED\n");
serverAddress=p->systemAddress;
}
else if (p->data[0]==ID_CONNECTION_ATTEMPT_FAILED)
printf("ID_CONNECTION_ATTEMPT_FAILED\n");
else if (p->data[0]==ID_NO_FREE_INCOMING_CONNECTIONS)
printf("ID_NO_FREE_INCOMING_CONNECTIONS\n");
else if (p->data[0]==ID_AUTOPATCHER_REPOSITORY_FATAL_ERROR)
{
char buff[256];
RakNet::BitStream temp(p->data, p->length, false);
temp.IgnoreBits(8);
RakNet::StringCompressor::Instance()->DecodeString(buff, 256, &temp);
printf("ID_AUTOPATCHER_REPOSITORY_FATAL_ERROR\n");
printf("%s\n", buff);
}
else if (p->data[0]==ID_AUTOPATCHER_FINISHED)
{
printf("ID_AUTOPATCHER_FINISHED with server time %f\n", autopatcherClient.GetServerDate());
double srvDate=autopatcherClient.GetServerDate();
示例4: main
//.........这里部分代码省略.........
printf("Enter remote IP: ");
do {
Gets(ip, sizeof(ip));
} while(ip[0]==0);
printf("Enter remote port: ");
do {
Gets(remotePort,sizeof(remotePort));
} while(remotePort[0]==0);
printf("Enter local port (enter for 0): ");
Gets(localPort,sizeof(localPort));
if (localPort[0]==0)
{
strcpy(localPort, "0");
}
printf("Enter console password (enter for none): ");
Gets(password,sizeof(password));
RakNet::SocketDescriptor socketDescriptor((int) atoi(localPort),0);
if (rakPeer->Startup(1, &socketDescriptor, 1)==RakNet::RAKNET_STARTED)
{
int passwordLen;
if (password[0])
passwordLen=(int) strlen(password)+1;
else
passwordLen=0;
if (rakPeer->Connect(ip, (int) atoi(remotePort), password, passwordLen)==RakNet::CONNECTION_ATTEMPT_STARTED)
printf("Connecting...\nNote: if the password is wrong the other system will ignore us.\n");
else
{
printf("Connect call failed.\n");
rakPeer->Shutdown(0, 0);
}
}
else
printf("Initialize call failed.\n");
}
}
else
{
if (isConnected)
{
RakNet::BitStream str;
str.Write((unsigned char) ID_TRANSPORT_STRING);
str.Write(command, (int) strlen(command)+1);
rakPeer->Send(&str, MEDIUM_PRIORITY, RELIABLE_ORDERED, 0, RakNet::UNASSIGNED_SYSTEM_ADDRESS, true);
}
else
{
printf("You must be connected to send commands.\n");
}
}
}
packet = rakPeer->Receive();
if (packet)
{
switch (packet->data[0])
{
case ID_DISCONNECTION_NOTIFICATION:
printf("The server disconnected us.\n");
isConnected=false;
break;
case ID_CONNECTION_BANNED:
printf("We are banned from this server.\n");
isConnected=false;
break;
case ID_CONNECTION_ATTEMPT_FAILED:
printf("Connection attempt failed.\nThe password was wrong or there is no responsive machine at that IP/port.\n");
isConnected=false;
break;
case ID_NO_FREE_INCOMING_CONNECTIONS:
printf("Server is full.\n");
isConnected=false;
break;
case ID_CONNECTION_LOST:
printf("We lost the connection.\n");
isConnected=false;
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
printf("Connection accepted.\n");
isConnected=true;
break;
case ID_TRANSPORT_STRING:
printf("%s", packet->data+1);
break;
}
rakPeer->DeallocatePacket(packet);
}
// This sleep keeps RakNet responsive
#ifdef _WIN32
Sleep(30);
#else
usleep(30 * 1000);
#endif
}
return 0;
}
示例5: HandleNetworking
// Handles all networking events
DWORD WINAPI HandleNetworking( LPVOID )
{
// Create RakNet interfaces
RakNet::RakPeerInterface *peer;
RakNet::Packet *packet;
// Initialize networking
peer = RakNet::RakPeerInterface::GetInstance();
// Rev up your engines
RakNet::SocketDescriptor sd( 0, "127.0.0.1" );
peer->Startup( 1, &sd, 1 );
// GO GO GO
RakNet::ConnectionAttemptResult attempt = peer->Connect( "127.0.0.1", 5187, NULL, 0 );
// Success?
if( attempt != RakNet::CONNECTION_ATTEMPT_STARTED )
{
// Nope
switch( attempt )
{
// None of these should happen, EVER.
case RakNet::ALREADY_CONNECTED_TO_ENDPOINT:
MessageBoxA
(
NULL,
"A connection attempt was made to a server we're already connected to.\nPlease contact a developer.",
"SC4Multi -- Network Error",
MB_OK | MB_ICONERROR
);
break;
case RakNet::CANNOT_RESOLVE_DOMAIN_NAME:
MessageBoxA
(
NULL,
"The given domain name could not be resolved.",
"SC4Multi -- Network Error",
MB_OK | MB_ICONERROR
);
break;
case RakNet::CONNECTION_ATTEMPT_ALREADY_IN_PROGRESS:
MessageBoxA
(
NULL,
"Two connection attempts were being made at once by SC4Multi.\nPlease contact a developer.",
"SC4Multi -- Network Error",
MB_OK | MB_ICONERROR
);
break;
case RakNet::INVALID_PARAMETER:
MessageBoxA
(
NULL,
"An invalid parameter was passed by SC4Multi. Please contact a developer.",
"SC4Multi -- Network Error",
MB_OK | MB_ICONERROR
);
break;
case RakNet::SECURITY_INITIALIZATION_FAILED:
MessageBoxA
(
NULL,
"Security initialization failed. Something is terribly wrong,\nplease contact a developer.",
"SC4Multi -- Network Error",
MB_OK | MB_ICONERROR
);
break;
default:
MessageBoxA
(
NULL,
"Something went wrong during network initialization,\nand we don't know what.",
"SC4Multi -- Network Error",
MB_OK | MB_ICONERROR
);
break;
}
// Terminate via ugly hacks
exit( 1 );
}
// Forever and ever and ever and ever and ever and...
while( isRunning )
{
// If there are any packets, read it
for( packet = peer->Receive(); packet; peer->DeallocatePacket( packet ), packet = peer->Receive() )
{
// Get the packet type ID
switch( packet->data[0] )
{
case ID_REMOTE_DISCONNECTION_NOTIFICATION:
MessageBoxA( NULL, "Other client quit", "SC4Multi", MB_OK | MB_ICONINFORMATION );
break;
case ID_REMOTE_CONNECTION_LOST:
MessageBoxA( NULL, "Other client timeout", "SC4Multi", MB_OK | MB_ICONINFORMATION );
break;
case ID_REMOTE_NEW_INCOMING_CONNECTION:
//.........这里部分代码省略.........
示例6: Run
//.........这里部分代码省略.........
// so that it can be restored in case of a lost device.
GPtr<GFxImageCreator> pimageCreator = *new GFxImageCreator(1);
loader.SetImageCreator(pimageCreator);
// Load the movie file and create its instance.
if (!(pMovieDef = *loader.CreateMovie(FileName)))
{
GString errorString = "Unable to load file: ";
errorString += FileName;
MessageBox(NULL, errorString.ToCStr(), "Error", MB_OK | MB_ICONEXCLAMATION);
return 1;
}
if (!(pMovie = *pMovieDef->CreateInstance()))
return 1;
// Create renderer.
if (!(pRenderer = *GRendererD3D9::CreateRenderer()))
return 1;
// Configure renderer in "Dependent mode", honoring externally
// configured device settings.
if (!pRenderer->SetDependentVideoMode(pDevice, &PresentParams, 0, hWnd))
return 1;
// Set renderer on loader so that it is also applied to all children.
pRenderConfig = *new GFxRenderConfig(pRenderer, GFxRenderConfig::RF_EdgeAA | GFxRenderConfig::RF_StrokeNormal);
loader.SetRenderConfig(pRenderConfig);
// Set playback view to span the entire window.
pMovie->SetViewport(Width, Height, 0,0, Width, Height);
// If you wanted to use the movie as a transparent HUD overlay, you would
// set Background Alpha to 0. We don't need to do this for player sample.
// pMovie->SetBackgroundAlpha(0.0f);
// Store initial timing, so that we can determine
// how much to advance Flash playback.
MovieLastTime = timeGetTime();
// Application / Player message loop.
MSG msg;
ZeroMemory(&msg, sizeof(msg));
// KevinJ: 1/3 functions, Init()
// Path to current exe is used to the patcher can restart itself if needed
RakNet::Lobby2ClientGFx3Impl sampleImpl;
GPtr<FxDelegate> pDelegate = *new FxDelegate;
pMovie->SetExternalInterface(pDelegate);
RakNet::Lobby2Client lobby2Client;
RakNet::Lobby2MessageFactory messageFactory;
RakNet::RakPeerInterface *rakPeer = RakNet::RakPeerInterface::GetInstance();
RakNet::SocketDescriptor sd;
rakPeer->Startup(1,&sd, 1);
rakPeer->AttachPlugin(&lobby2Client);
rakPeer->AttachPlugin(&sampleImpl);
lobby2Client.SetMessageFactory(&messageFactory);
lobby2Client.SetCallbackInterface(&sampleImpl);
sampleImpl.Init(&lobby2Client, &messageFactory, rakPeer, pDelegate, pMovie);
while(msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
// Check for lost D3D Devices.
if (pRenderer)
{
GRendererD3D9::DisplayStatus status = pRenderer->CheckDisplayStatus();
if (status == GRendererD3D9::DisplayStatus_Unavailable)
{ ::Sleep(10); continue; }
if (status == GRendererD3D9::DisplayStatus_NeedsReset)
{
if (!SUCCEEDED(ResetD3D()))
continue;
}
}
// Advance movie animation and render it to screen.
AdvanceAndDisplay();
}
// KevinJ: 2/3 functions, periodic update
RakNet::Packet *p;
for (p=rakPeer->Receive(); p; rakPeer->DeallocatePacket(p), p=rakPeer->Receive())
{
}
}
// KevinJ: 3/3 functions, Shutdown()
sampleImpl.Shutdown();
RakNet::RakPeerInterface::DestroyInstance(rakPeer);
return 0;
}
示例7: main
int main(int argc, char **argv)
{
const char *DEFAULT_SERVER_ADDRESS="test.dnsalias.net";
const unsigned short DEFAULT_SERVER_PORT=60000;
const char *serverAddress;
unsigned short serverPort;
#ifndef _DEBUG
// Only use DEFAULT_SERVER_ADDRESS for debugging
if (argc<2)
{
PrintHelp();
return false;
}
#endif
if (argc<2) serverAddress=DEFAULT_SERVER_ADDRESS;
else serverAddress=argv[1];
if (argc<3) serverPort=DEFAULT_SERVER_PORT;
else serverPort=atoi(argv[2]);
// ---- RAKPEER -----
RakNet::RakPeerInterface *rakPeer;
rakPeer=RakNet::RakPeerInterface::GetInstance();
static const unsigned short clientLocalPort=0;
RakNet::SocketDescriptor sd(clientLocalPort,0); // Change this if you want
RakNet::StartupResult sr = rakPeer->Startup(1,&sd,1); // Change this if you want
rakPeer->SetMaximumIncomingConnections(0); // Change this if you want
if (sr!=RakNet::RAKNET_STARTED)
{
printf("Startup failed. Reason=%i\n", (int) sr);
return 1;
}
RakNet::CloudClient cloudClient;
rakPeer->AttachPlugin(&cloudClient);
RakNet::ConnectionAttemptResult car = rakPeer->Connect(serverAddress, serverPort, 0, 0);
if (car==RakNet::CANNOT_RESOLVE_DOMAIN_NAME)
{
printf("Cannot resolve domain name\n");
return 1;
}
printf("Connecting to %s...\n", serverAddress);
bool didRebalance=false; // So we only reconnect to a lower load server once, for load balancing
RakNet::Packet *packet;
while (1)
{
for (packet=rakPeer->Receive(); packet; rakPeer->DeallocatePacket(packet), packet=rakPeer->Receive())
{
switch (packet->data[0])
{
case ID_CONNECTION_LOST:
printf("Lost connection to server.\n");
return 1;
case ID_CONNECTION_ATTEMPT_FAILED:
printf("Failed to connect to server at %s.\n", packet->systemAddress.ToString(true));
return 1;
case ID_REMOTE_SYSTEM_REQUIRES_PUBLIC_KEY:
case ID_OUR_SYSTEM_REQUIRES_SECURITY:
case ID_PUBLIC_KEY_MISMATCH:
case ID_INVALID_PASSWORD:
case ID_CONNECTION_BANNED:
// You won't see these unless you modified CloudServer
printf("Server rejected the connection.\n");
return 1;
case ID_INCOMPATIBLE_PROTOCOL_VERSION:
printf("Server is running an incompatible RakNet version.\n");
return 1;
case ID_NO_FREE_INCOMING_CONNECTIONS:
printf("Server has no free connections\n");
return 1;
case ID_IP_RECENTLY_CONNECTED:
printf("Recently connected. Retrying.");
rakPeer->Connect(serverAddress, serverPort, 0, 0);
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
printf("Connected to server.\n");
UploadInstanceToCloud(&cloudClient, packet->guid);
GetClientSubscription(&cloudClient, packet->guid);
GetServers(&cloudClient, packet->guid);
break;
case ID_CLOUD_GET_RESPONSE:
{
RakNet::CloudQueryResult cloudQueryResult;
cloudClient.OnGetReponse(&cloudQueryResult, packet);
unsigned int rowIndex;
const bool wasCallToGetServers=cloudQueryResult.cloudQuery.keys[0].primaryKey=="CloudConnCount";
printf("\n");
if (wasCallToGetServers)
printf("Downloaded server list. %i servers.\n", cloudQueryResult.rowsReturned.Size());
else
printf("Downloaded client list. %i clients.\n", cloudQueryResult.rowsReturned.Size());
unsigned short connectionsOnOurServer=65535;
unsigned short lowestConnectionsServer=65535;
//.........这里部分代码省略.........
示例8: main
//.........这里部分代码省略.........
{
printf("Database connection failed.\n");
return 1;
}
}
printf("Database connection suceeded.\n");
printf("Starting threads\n");
autopatcherServer.StartThreads(workerThreadCount, sqlConnectionObjectCount, connectionObjectAddresses);
printf("System ready for connections\n");
printf("(D)rop database\n(C)reate database.\n(A)dd application\n(U)pdate revision.\n(R)emove application\n(Q)uit\n");
char ch;
RakNet::Packet *p;
while (1)
{
#ifdef USE_TCP
RakNet::SystemAddress notificationAddress;
notificationAddress=packetizedTCP.HasCompletedConnectionAttempt();
if (notificationAddress!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
printf("ID_CONNECTION_REQUEST_ACCEPTED\n");
notificationAddress=packetizedTCP.HasNewIncomingConnection();
if (notificationAddress!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
printf("ID_NEW_INCOMING_CONNECTION\n");
notificationAddress=packetizedTCP.HasLostConnection();
if (notificationAddress!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
printf("ID_CONNECTION_LOST\n");
p=packetizedTCP.Receive();
while (p)
{
packetizedTCP.DeallocatePacket(p);
p=packetizedTCP.Receive();
}
#else
p=rakPeer->Receive();
while (p)
{
if (p->data[0]==ID_NEW_INCOMING_CONNECTION)
printf("ID_NEW_INCOMING_CONNECTION\n");
else if (p->data[0]==ID_DISCONNECTION_NOTIFICATION)
printf("ID_DISCONNECTION_NOTIFICATION\n");
else if (p->data[0]==ID_CONNECTION_LOST)
printf("ID_CONNECTION_LOST\n");
rakPeer->DeallocatePacket(p);
p=rakPeer->Receive();
}
#endif
if (kbhit())
{
ch=getch();
if (ch=='q')
break;
else if (ch=='c')
{
if (connectionObject[0].CreateAutopatcherTables()==false)
printf("Error: %s\n", connectionObject[0].GetLastError());
else
printf("Created\n");
}
else if (ch=='d')
{
if (connectionObject[0].DestroyAutopatcherTables()==false)
示例9: main
//.........这里部分代码省略.........
if (strcmp(message, "ban") == 0)
{
printf("Enter IP to ban. You can use * as a wildcard\n");
Gets(message, sizeof(message));
server->AddToBanList(message);
printf("IP %s added to ban list.\n", message);
continue;
}
// Message now holds what we want to broadcast
char message2[2048];
// Append Server: to the message so clients know that it ORIGINATED from the server
// All messages to all clients come from the server either directly or by being
// relayed from other clients
message2[0] = 0;
const static char prefix[] = "Server: ";
strncpy(message2, prefix, sizeof(message2));
strncat(message2, message, sizeof(message2) - strlen(prefix) - 1);
// message2 is the data to send
// strlen(message2)+1 is to send the null terminator
// HIGH_PRIORITY doesn't actually matter here because we don't use any other priority
// RELIABLE_ORDERED means make sure the message arrives in the right order
// We arbitrarily pick 0 for the ordering stream
// RakNet::UNASSIGNED_SYSTEM_ADDRESS means don't exclude anyone from the broadcast
// true means broadcast the message to everyone connected
server->Send(message2, (const int)strlen(message2) + 1, HIGH_PRIORITY, RELIABLE_ORDERED, 0, RakNet::UNASSIGNED_SYSTEM_ADDRESS, true);
}
// Get a packet from either the server or the client
for (p = server->Receive(); p; server->DeallocatePacket(p), p = server->Receive())
{
// We got a packet, get the identifier with our handy function
packetIdentifier = GetPacketIdentifier(p);
// Check if this is a network message packet
switch (packetIdentifier)
{
case ID_DISCONNECTION_NOTIFICATION:
// Connection lost normally
printf("ID_DISCONNECTION_NOTIFICATION from %s\n", p->systemAddress.ToString(true));;
break;
case ID_NEW_INCOMING_CONNECTION:
// Somebody connected. We have their IP now
printf("ID_NEW_INCOMING_CONNECTION from %s with GUID %s\n", p->systemAddress.ToString(true), p->guid.ToString());
clientID = p->systemAddress; // Record the player ID of the client
printf("Remote internal IDs:\n");
for (int index = 0; index < MAXIMUM_NUMBER_OF_INTERNAL_IDS; index++)
{
RakNet::SystemAddress internalId = server->GetInternalID(p->systemAddress, index);
if (internalId != RakNet::UNASSIGNED_SYSTEM_ADDRESS)
{
printf("%i. %s\n", index + 1, internalId.ToString(true));
}
}
break;
case ID_INCOMPATIBLE_PROTOCOL_VERSION:
printf("ID_INCOMPATIBLE_PROTOCOL_VERSION\n");
示例10: StartClient
//This static method is called when the client wants to connect to the server
void Session::StartClient(void * pVoid){
//A parameter list is given with needed variables
ArgumentList* pArgumentList = (ArgumentList*)pVoid;
RakNet::RakPeerInterface* pClient;
pClient = pArgumentList->inter;
SessionType type = pArgumentList->type;
RakNet::RPC3* rpc3Inst = pArgumentList->rpc3;
SystemAddress clientID=UNASSIGNED_SYSTEM_ADDRESS;
//Register the RPC3 functions we want to call upon
RPC3_REGISTER_FUNCTION(rpc3Inst, ReceiveInformation);
RPC3_REGISTER_FUNCTION(rpc3Inst, UpdateCharacter);
RPC3_REGISTER_FUNCTION(rpc3Inst, UpdateCharacterVelocity);
RPC3_REGISTER_FUNCTION(rpc3Inst, SyncClients);
RPC3_REGISTER_FUNCTION(rpc3Inst, ReceiveID);
RPC3_REGISTER_FUNCTION(rpc3Inst, RemoveCharacter);
//Create the basic connection with help of RakNet
SocketDescriptor socketDescriptor(0,0);
socketDescriptor.socketFamily=AF_INET;
pClient->Startup(1,&socketDescriptor, 1);
pClient->Ping( "255.255.255.255", 50000, true, 0 );
// Holds packets
Packet* p;
//Make sure the RPC3 is attached as a plugin, else it won't work
pClient->AttachPlugin(rpc3Inst);
char message[2048];
// Loop for input
while (Session::threading)
{
// This sleep keeps RakNet responsive
RakSleep(30);
#ifdef _WIN32
Sleep(30);
#else
usleep(30 * 1000);
#endif
// Get a packet from either the server or the client
for (p=pClient->Receive(); p; pClient->DeallocatePacket(p), p=pClient->Receive())
{
switch (p->data[0])
{
case ID_DISCONNECTION_NOTIFICATION:
printf("ID_DISCONNECTION_NOTIFICATION\n");
break;
case ID_ALREADY_CONNECTED:
printf("ID_ALREADY_CONNECTED\n");
break;
case ID_CONNECTION_ATTEMPT_FAILED:
printf("Connection attempt failed\n");
break;
case ID_NO_FREE_INCOMING_CONNECTIONS:
printf("ID_NO_FREE_INCOMING_CONNECTIONS\n");
break;
case ID_UNCONNECTED_PONG:
// Found the server
pClient->Connect(p->systemAddress.ToString(false),p->systemAddress.GetPort(),0,0,0);
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
// This tells the client they have connected
printf("ID_CONNECTION_REQUEST_ACCEPTED\n");
Game::getSingletonPtr()->CreateCharacter("PlayerHost");
//Game::getSingletonPtr()->SetPlayer(
break;
case ID_NEW_INCOMING_CONNECTION:
{
printf("New incoming connection");
break;
}
case ID_RPC_REMOTE_ERROR:
{
// Recipient system returned an error
switch (p->data[1])
{
case RakNet::RPC_ERROR_NETWORK_ID_MANAGER_UNAVAILABLE:
printf("RPC_ERROR_NETWORK_ID_MANAGER_UNAVAILABLE\n");
break;
case RakNet::RPC_ERROR_OBJECT_DOES_NOT_EXIST:
printf("RPC_ERROR_OBJECT_DOES_NOT_EXIST\n");
break;
case RakNet::RPC_ERROR_FUNCTION_INDEX_OUT_OF_RANGE:
printf("RPC_ERROR_FUNCTION_INDEX_OUT_OF_RANGE\n");
break;
case RakNet::RPC_ERROR_FUNCTION_NOT_REGISTERED:
printf("RPC_ERROR_FUNCTION_NOT_REGISTERED\n");
break;
case RakNet::RPC_ERROR_FUNCTION_NO_LONGER_REGISTERED:
printf("RPC_ERROR_FUNCTION_NO_LONGER_REGISTERED\n");
break;
case RakNet::RPC_ERROR_CALLING_CPP_AS_C:
printf("RPC_ERROR_CALLING_CPP_AS_C\n");
break;
case RakNet::RPC_ERROR_CALLING_C_AS_CPP:
printf("RPC_ERROR_CALLING_C_AS_CPP\n");
break;
//.........这里部分代码省略.........
示例11: main
//.........这里部分代码省略.........
strcpy(PATH_TO_XDELTA_EXE, "c:/xdelta3-3.0.6-win32.exe");
if (PATH_TO_XDELTA_EXE[0])
{
printf("Enter working directory to store temporary files: ");
Gets(WORKING_DIRECTORY, sizeof(WORKING_DIRECTORY));
if (WORKING_DIRECTORY[0]==0)
GetTempPath(MAX_PATH, WORKING_DIRECTORY);
if (WORKING_DIRECTORY[strlen(WORKING_DIRECTORY)-1]=='\\' || WORKING_DIRECTORY[strlen(WORKING_DIRECTORY)-1]=='/')
WORKING_DIRECTORY[strlen(WORKING_DIRECTORY)-1]=0;
}
printf("(D)rop database\n(C)reate database.\n(A)dd application\n(U)pdate revision.\n(R)emove application\n(Q)uit\n");
char ch;
RakNet::Packet *p;
while (1)
{
#ifdef USE_TCP
RakNet::SystemAddress notificationAddress;
notificationAddress=packetizedTCP.HasCompletedConnectionAttempt();
if (notificationAddress!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
printf("ID_CONNECTION_REQUEST_ACCEPTED\n");
notificationAddress=packetizedTCP.HasNewIncomingConnection();
if (notificationAddress!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
printf("ID_NEW_INCOMING_CONNECTION\n");
notificationAddress=packetizedTCP.HasLostConnection();
if (notificationAddress!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
printf("ID_CONNECTION_LOST\n");
p=packetizedTCP.Receive();
while (p)
{
packetizedTCP.DeallocatePacket(p);
p=packetizedTCP.Receive();
}
#else
p=rakPeer->Receive();
while (p)
{
if (p->data[0]==ID_NEW_INCOMING_CONNECTION)
printf("ID_NEW_INCOMING_CONNECTION\n");
else if (p->data[0]==ID_DISCONNECTION_NOTIFICATION)
printf("ID_DISCONNECTION_NOTIFICATION\n");
else if (p->data[0]==ID_CONNECTION_LOST)
printf("ID_CONNECTION_LOST\n");
rakPeer->DeallocatePacket(p);
p=rakPeer->Receive();
}
#endif
if (kbhit())
{
ch=getch();
if (ch=='q')
break;
else if (ch=='c')
{
if (connectionObject[0].CreateAutopatcherTables()==false)
printf("%s", connectionObject[0].GetLastError());
}
else if (ch=='d')
{
if (connectionObject[0].DestroyAutopatcherTables()==false)
printf("%s", connectionObject[0].GetLastError());
示例12: main
int main(void)
{
// Pointers to the interfaces of our server and client.
// Note we can easily have both in the same program
RakNet::RakPeerInterface *client;
RakNet::RakPeerInterface *server;
bool b;
char str[256];
char serverPort[30], clientPort[30];
RakNet::TimeMS quitTime;
// Holds packets
RakNet::Packet* p;
printf("A client / server sample showing how clients can broadcast offline packets\n");
printf("to find active servers.\n");
printf("Difficulty: Beginner\n\n");
printf("Instructions:\nRun one or more servers on the same port.\nRun a client and it will get pongs from those servers.\n");
printf("Run as (s)erver or (c)lient?\n");
Gets(str, sizeof(str));
if (str[0]=='s' || str[0]=='S')
{
client=0;
server=RakNet::RakPeerInterface::GetInstance();
// A server
printf("Enter the server port\n");
Gets(serverPort,sizeof(serverPort));
if (serverPort[0]==0)
strcpy(serverPort, "60001");
printf("Starting server.\n");
// The server has to be started to respond to pings.
RakNet::SocketDescriptor socketDescriptor(atoi(serverPort),0);
socketDescriptor.socketFamily=AF_INET; // Only IPV4 supports broadcast on 255.255.255.255
b = server->Startup(2, &socketDescriptor, 1)==RakNet::RAKNET_STARTED;
server->SetMaximumIncomingConnections(2);
if (b)
printf("Server started, waiting for connections.\n");
else
{
printf("Server failed to start. Terminating.\n");
exit(1);
}
}
else
{
client=RakNet::RakPeerInterface::GetInstance();
server=0;
// Get our input
printf("Enter the client port to listen on, or 0\n");
Gets(clientPort,sizeof(clientPort));
if (clientPort[0]==0)
strcpy(clientPort, "60000");
printf("Enter the port to ping\n");
Gets(serverPort,sizeof(serverPort));
if (serverPort[0]==0)
strcpy(serverPort, "60001");
RakNet::SocketDescriptor socketDescriptor(atoi(clientPort),0);
socketDescriptor.socketFamily=AF_INET; // Only IPV4 supports broadcast on 255.255.255.255
client->Startup(1, &socketDescriptor, 1);
// Connecting the client is very simple. 0 means we don't care about
// a connectionValidationInteger, and false for low priority threads
// All 255's mean broadcast
client->Ping("255.255.255.255", atoi(serverPort), false);
printf("Pinging\n");
}
printf("How many seconds to run this sample for?\n");
Gets(str, sizeof(str));
if (str[0]==0)
{
printf("Defaulting to 5 seconds\n");
quitTime = RakNet::GetTimeMS() + 5000;
}
else
quitTime = RakNet::GetTimeMS() + atoi(str) * 1000;
// Loop for input
while (RakNet::GetTimeMS() < quitTime)
{
if (server)
p = server->Receive();
else
p = client->Receive();
if (p==0)
{
RakSleep(30);
continue;
}
if (server)
server->DeallocatePacket(p);
else
{
if (p->data[0]==ID_UNCONNECTED_PONG)
{
//.........这里部分代码省略.........
示例13: Main
void Server::Main()
{
RakNet::Packet* packet;
RakNet::RakPeerInterface* peer = m_network->m_peer;
unsigned char packetIdentifier;
char buffer[256];
Timer timer0;
Log::Get()->Print("Server started. Listening on port %i..", m_network->GetServerPort() );
snapshotTimer.reset();
while( m_network->GetStatus( ) != Network::STATE_QUIT )
{
for( packet = peer->Receive(); packet; peer->DeallocatePacket( packet ), packet = peer->Receive() )
{
packetsReceived++;
bytesReceived += sizeof(packet->data);
packetIdentifier = m_network->GetPacketIdentifier( packet );
switch( packetIdentifier )
{
case ID_PLAYER_INPUT:
ReceiveInput( packet );
break;
case ID_PLAYER_ACTION:
ReceiveAction( packet );
break;
case ID_PLAYER_CONNECT:
AcceptClient( packet );
break;
case ID_MESSAGE:
m_network->ReadMsg( packet, buffer, 256 );
Log::Get()->Print( "%s: %s\n", m_network->FindClient(packet->guid).name, buffer );
SendChat( buffer, m_network->FindClient( packet->guid ).name );
break;
case ID_COMMAND:
ReadCmd( packet, buffer, 256 );
// Log::Get()->Print( "%s: %s\n", m_network->FindClient( packet->guid ).name, buffer );
// SendChat( buffer, m_network->FindClient( packet->guid ).name );
break;
case ID_NAME_CHANGE:
AcceptNameChange( packet );
break;
case ID_NO_FREE_INCOMING_CONNECTIONS:
Log::Get()->Print( "Server is full\n" );
break;
case ID_PLAYER_QUIT:
case ID_CONNECTION_LOST:
OnClientQuit( packet->guid, packetIdentifier );
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
Log::Get()->Print( "Succesfully registered to the masterserver\n" );
m_serverAdress = packet->guid;
UpdateMS();
break;
case ID_CONNECTION_ATTEMPT_FAILED:
Log::Get()->Print( "Connection attempt failed\n" );
break;
}
}
if( snapshotTimer.milliseconds() > 50 )
{
for(unsigned int i = 0; i < MAX_CLIENTS; i++)
{
Client& c = m_network->m_clients[i];
if( c.idx != -1 && Player::s_players[c.idx] )
{
m_network->SendCorrection( Player::s_players[c.idx]->GetMatrix().GetTranslation(), Player::s_players[c.idx]->GetPitch(), c.guid );
Player::s_players[c.idx]->SetAngle(0);
}
}
snapshotTimer.reset();
if( msPingTimer.seconds() > 5 )
{
msPingTimer.reset();
UpdateMS();
}
}
}
}
示例14: main
//.........这里部分代码省略.........
if (clientPort[0]==0)
strcpy(clientPort, "0");
puts("Enter IP to connect to");;
ip[0]=0;
Gets(ip,sizeof(ip));
if (ip[0]==0)
strcpy(ip, "127.0.0.1");
puts("Enter the port to connect to");
serverPort[0]=0;
Gets(serverPort,sizeof(serverPort));
if (serverPort[0]==0)
strcpy(serverPort, "61111");
for (i=0; i < NUM_CONNECTIONS; i++)
{
rakPeer[i]->Startup(1,&socketDescriptor, 1);
rakPeer[i]->Connect(ip, atoi(serverPort), 0,0);
rakPeer[i]->AttachPlugin(&lobby2Client[i]);
lobby2Client[i].SetMessageFactory(&messageFactory);
lobby2Client[i].SetCallbackInterface(&callback[i]);
testUserName[i]=RakNet::RakString("user%i", i);
}
RakNet::Packet *packet;
// Loop for input
while (1)
{
for (i=0; i < NUM_CONNECTIONS; i++)
{
RakNet::RakPeerInterface *peer = rakPeer[i];
for (packet=peer->Receive(); packet; peer->DeallocatePacket(packet), packet=peer->Receive())
{
switch (packet->data[0])
{
case ID_DISCONNECTION_NOTIFICATION:
// Connection lost normally
printf("ID_DISCONNECTION_NOTIFICATION\n");
break;
case ID_ALREADY_CONNECTED:
// Connection lost normally
printf("ID_ALREADY_CONNECTED\n");
break;
case ID_CONNECTION_BANNED: // Banned from this server
printf("We are banned from this server.\n");
break;
case ID_CONNECTION_ATTEMPT_FAILED:
printf("Connection attempt failed\n");
break;
case ID_NO_FREE_INCOMING_CONNECTIONS:
// Sorry, the server is full. I don't do anything here but
// A real app should tell the user
printf("ID_NO_FREE_INCOMING_CONNECTIONS\n");
break;
case ID_INVALID_PASSWORD:
printf("ID_INVALID_PASSWORD\n");
break;
case ID_CONNECTION_LOST:
// Couldn't deliver a reliable packet - i.e. the other system was abnormally
// terminated
printf("ID_CONNECTION_LOST\n");
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
// This tells the rakPeer1 they have connected
示例15: main
//.........这里部分代码省略.........
autopatcherClient.SetFileListTransferPlugin(0);
autopatcherClient.Clear();
packetizedTCP.Stop();
rakPeer->Shutdown(500,0);
RakNet::RakPeerInterface::DestroyInstance(rakPeer);
return 0;
}
else if (p->data[0]==ID_AUTOPATCHER_FINISHED)
{
printf("ID_AUTOPATCHER_FINISHED with server time %f\n", autopatcherClient.GetServerDate());
double srvDate=autopatcherClient.GetServerDate();
FILE *fp = fopen("srvDate", "wb");
fwrite(&srvDate,sizeof(double),1,fp);
fclose(fp);
autopatcherClient.SetFileListTransferPlugin(0);
autopatcherClient.Clear();
packetizedTCP.Stop();
rakPeer->Shutdown(500,0);
RakNet::RakPeerInterface::DestroyInstance(rakPeer);
return 0;
}
else if (p->data[0]==ID_AUTOPATCHER_RESTART_APPLICATION)
{
printf("ID_AUTOPATCHER_RESTART_APPLICATION");
autopatcherClient.SetFileListTransferPlugin(0);
autopatcherClient.Clear();
packetizedTCP.Stop();
rakPeer->Shutdown(500,0);
RakNet::RakPeerInterface::DestroyInstance(rakPeer);
return 0;
}
// Launch \"AutopatcherClientRestarter.exe autopatcherRestart.txt\"\nQuit this application immediately after to unlock files.\n");
packetizedTCP.DeallocatePacket(p);
p=packetizedTCP.Receive();
}
p=rakPeer->Receive();
while (p)
{
if (p->data[0]==ID_CONNECTION_REQUEST_ACCEPTED)
{
// UploadInstanceToCloud(&cloudClient, p->guid);
// GetClientSubscription(&cloudClient, p->guid);
GetServers(&cloudClient, p->guid);
break;
}
else if (p->data[0]==ID_CONNECTION_ATTEMPT_FAILED)
{
printf("ID_CONNECTION_ATTEMPT_FAILED UDP\n");
autopatcherClient.SetFileListTransferPlugin(0);
autopatcherClient.Clear();
packetizedTCP.Stop();
rakPeer->Shutdown(500,0);
RakNet::RakPeerInterface::DestroyInstance(rakPeer);
return 0;
}
else if (p->data[0]==ID_CLOUD_GET_RESPONSE)
{
RakNet::CloudQueryResult cloudQueryResult;
cloudClient.OnGetReponse(&cloudQueryResult, p);
unsigned int rowIndex;
const bool wasCallToGetServers=cloudQueryResult.cloudQuery.keys[0].primaryKey=="CloudConnCount";
printf("\n");
if (wasCallToGetServers)
printf("Downloaded server list. %i servers.\n", cloudQueryResult.rowsReturned.Size());