本文整理汇总了C++中raknet::RakPeerInterface类的典型用法代码示例。如果您正苦于以下问题:C++ RakPeerInterface类的具体用法?C++ RakPeerInterface怎么用?C++ RakPeerInterface使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了RakPeerInterface类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Kick
/**
* Kicks the player from the server.
* @author John M. Harris, Jr.
*/
void Player::Kick(){
OpenBlox::OBGame* game = OpenBlox::OBGame::getInstance();
if(!game){ return; }
if(game->isServer()){
DataModel* dm = game->getDataModel();
if(dm){
Instance* nsi = dm->FindService("NetworkServer");
if(nsi){
NetworkPeer* ns = dynamic_cast<NetworkPeer*>(nsi);
if(ns){
std::vector<Instance*> nrs = ns->GetChildren();
for(std::vector<Instance*>::size_type i = 0; i != nrs.size(); i++){
Instance* kid = nrs[i];
if(kid){
if(NetworkReplicator* nr = dynamic_cast<NetworkReplicator*>(kid)){
if(nr->GetPlayer() == this){
RakNet::SystemAddress addr = nr->getAddress();
RakNet::RakPeerInterface* peer = ns->getPeer();
if(peer){
peer->CloseConnection(addr, true, 0, HIGH_PRIORITY);
}
}
}
}
}
}
}
}
}else{
DataModel* dm = game->getDataModel();
if(dm){
Instance* plrsi = dm->FindService("Players");
if(plrsi){
if(Players* plrs = dynamic_cast<Players*>(plrsi)){
if(plrs->getLocalPlayer() == this){
Instance* nci = dm->FindService("NetworkClient");
if(nci){
if(NetworkClient* nc = dynamic_cast<NetworkClient*>(nci)){
nc->Disconnect();
}
}
return;
}
}
}
}
WLOG("Attempt to kick a player from client.");
}
}
示例2: main
int main(void)
{
RakNet::RakPeerInterface *rakPeer = RakNet::RakPeerInterface::GetInstance();
RakNet::SocketDescriptor sd(60000,0);
rakPeer->Startup(128,&sd,1);
rakPeer->SetMaximumIncomingConnections(128);
RakNet::TelnetTransport tt;
TestCommandServer(&tt, 23, rakPeer); // Uncomment to use Telnet as a client. Telnet uses port 23 by default.
// RakNet::RakNetTransport2 rt2;
// rakPeer->AttachPlugin(&rt2);
// TestCommandServer(&rt2, 60000,rakPeer); // Uncomment to use RakNet as a client
return 1;
}
示例3: packAndSendGameState
void packAndSendGameState(RakNet::RakPeerInterface& _krPeer, map<RakNet::NetworkID, Entity*>& _players,
const Circle* _kpFoodModel)
{
RakNet::BitStream stream;
stream.Write((RakNet::MessageID) MessageIdentifiers::ID_SNAKE_STATES);
stream.Write(_players.size());
for (map<RakNet::NetworkID, Entity*>::iterator playerIter = _players.begin();
playerIter != _players.end(); playerIter++)
{
Entity* pSnake = playerIter->second;
stream.Write(playerIter->first);
stream.Write(pSnake->getSingleComponent<Componentizer<unsigned int> >()->getValue());
vector<Vector2> segmentPositions = pSnake->getSingleComponent<CSnakeModel>()->getSegmentPositions();
stream.Write(segmentPositions.size());
for (unsigned int uiSegmentIndex = 0; uiSegmentIndex < segmentPositions.size(); uiSegmentIndex++)
{
stream.Write(segmentPositions[uiSegmentIndex]);
}
}
if (_kpFoodModel == NULL)
{
stream.Write(false);
}
else
{
stream.Write(true);
stream.Write(_kpFoodModel->getPosition());
}
_krPeer.Send(&stream, IMMEDIATE_PRIORITY, UNRELIABLE, 0, RakNet::UNASSIGNED_SYSTEM_ADDRESS, true);
}
示例4: startNetworkTrd
void* Client::startNetworkTrd(void* data)
{
client_data* clnt_data = (struct client_data *)data;
Client* clnt = clnt_data->instance;
const char* h = clnt_data->address;
int port = clnt_data->port;
RakNet::RakPeerInterface* inst = RakNet::RakPeerInterface::GetInstance();
inst->AllowConnectionResponseIPMigration(false);
RakNet::Packet *packet;
RakNet::SocketDescriptor sd(port + 100, 0);
inst->Startup(1, &sd, 1);
inst->Connect(h, port, 0, 0);
clnt->setPeer(inst);
//LOG(INFO) << "[Client]SOcket was configured...";
struct timespec req;
req.tv_sec = 0;
req.tv_nsec = 25000L;
RakNet::RPC4 rpc;
inst->AttachPlugin(&rpc);
clnt->setRPC(&rpc);
clnt->setRunning(true);
while (clnt->getRunning())
{
nanosleep(&req, NULL);
for (packet = clnt->getPeer()->Receive(); packet; clnt->getPeer()->DeallocatePacket(packet), packet = clnt->getPeer()->Receive())
{
clnt->getListener()->handle(packet);
}
}
clnt->getPeer()->CloseConnection(*clnt->getServerAddr(), true);
clnt->getPeer()->Shutdown(10.0);
RakNet::RakPeerInterface::DestroyInstance(clnt->getPeer());
}
示例5: 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;
}
示例6: ObjectManager
ClientObjectManager::ClientObjectManager( Mode mode, PluginState state,
sigc::signal<void>& rUpdateSignal, sigc::signal<void>& rLateUpdateSignal,
ClientPluginManager& rPluginManager, RakNet::RakPeerInterface& rRakPeer,
RakNet::ReplicaManager3& rReplicaManager, RakNet::NetworkIDManager& rNetworkIDManager ):
ObjectManager( mode, rRakPeer.GetMyGUID(), rRakPeer.GetGUIDFromIndex( 0 ), rUpdateSignal,
rLateUpdateSignal, rPluginManager.getPlugin<ClientObjectTemplateManager>(), rReplicaManager,
rNetworkIDManager, rPluginManager.getServer().getServerConnection().getRPC3() ),
ClientPlugin( mode, state, rPluginManager, rRakPeer, rReplicaManager, rNetworkIDManager ),
mPermissionManager( rPluginManager.getPlugin<PermissionManager>() )
{
PropertySynchronization::storeUserObject();
try
{
Plugin::getPluginManager().getPlugin<LuaPlugin>().get().object(
"ObjectManager" ) = this;
}
catch( Exception e )
{
LCLOGE << "Could not add ObjectManager object to lua: " << e.what();
}
}
示例7: 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;
}
示例8: main
int main()
{
char str[512];
RakNet::RakPeerInterface *peer = RakNet::RakPeerInterface::GetInstance();
bool isServer;
RakNet::Packet *packet;
printf("(C)lient or (S)erver?\n");
gets(str);
if ((str[0] == 'c') || (str[0] == 'C'))
{
RakNet::SocketDescriptor sd;
peer->Startup(1, &sd, 1);
isServer = false;
}
else
{
RakNet::SocketDescriptor sd(SERVER_PORT, 0);
peer->Startup(MAX_CLIENTS, &sd, 1);
isServer = true;
}
if (isServer)
{
printf("Starting the server.\n");
peer->SetMaximumIncomingConnections(MAX_CLIENTS);
}
else
{
printf("Enter server IP or hit enter for default: 127.0.0.1\n");
gets(str);
if (str[0] == 0)
{
strcpy(str, "127.0.0.1");
}
printf("Starting the client.\n");
peer->Connect(str, SERVER_PORT, 0, 0);
}
while (1)
{
for (packet = peer->Receive(); packet; peer->DeallocatePacket(packet), packet = peer->Receive())
{
switch (packet->data[0])
{
case ID_REMOTE_DISCONNECTION_NOTIFICATION:
printf("Another client has dosconnected\n");
break;
case ID_REMOTE_CONNECTION_LOST:
printf("Another client has lost the connection\n");
break;
case ID_REMOTE_NEW_INCOMING_CONNECTION:
printf("Another client has connected\n");
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
printf("Our connection request has been accepted.\n");
{
RakNet::BitStream bsOut;
bsOut.Write((RakNet::MessageID)ID_GAME_MESSAGE_1);
bsOut.Write("Hello World");
peer->Send(&bsOut, HIGH_PRIORITY, RELIABLE_ORDERED, 0, packet->systemAddress, false);
}
break;
case ID_NEW_INCOMING_CONNECTION:
printf("A connection is incoming.\n");
break;
case ID_NO_FREE_INCOMING_CONNECTIONS:
printf("The server is full.\n");
break;
case ID_DISCONNECTION_NOTIFICATION:
{
if (isServer)
{
printf("A client has disconnected.\n");
}
else
{
printf("We have been disconnected.\n");
}
}
break;
case ID_GAME_MESSAGE_1:
{
RakNet::RakString rs;
RakNet::BitStream bsIn(packet->data, packet->length, false);
bsIn.IgnoreBytes(sizeof(RakNet::MessageID));
bsIn.Read(rs);
printf("%s\n", rs.C_String());
}
break;
//.........这里部分代码省略.........
示例9: main
int main(int argc, char **argv)
{
// Avoids the Error: Got a packet bigger than 'max_allowed_packet' bytes
printf("Important: Requires that you first set the DB schema and the max packet size on the server.\n");
printf("See DependentExtensions/AutopatcherMySQLRepository/readme.txt\n");
// // MySQL is extremely slow in AutopatcherMySQLRepository::GetFilePart
printf("WARNING: MySQL is an order of magnitude slower than PostgreSQL.\nRecommended you use AutopatcherServer_PostgreSQL instead.");
printf("Server starting... ");
RakNet::AutopatcherServer autopatcherServer;
// RakNet::FLP_Printf progressIndicator;
RakNet::FileListTransfer fileListTransfer;
// So only one thread runs per connection, we create an array of connection objects, and tell the autopatcher server to use one thread per item
static const int workerThreadCount=4; // Used for checking patches only
static const int sqlConnectionObjectCount=32; // Used for both checking patches and downloading
RakNet::AutopatcherMySQLRepository connectionObject[sqlConnectionObjectCount];
RakNet::AutopatcherRepositoryInterface *connectionObjectAddresses[sqlConnectionObjectCount];
for (int i=0; i < sqlConnectionObjectCount; i++)
connectionObjectAddresses[i]=&connectionObject[i];
// fileListTransfer.AddCallback(&progressIndicator);
autopatcherServer.SetFileListTransferPlugin(&fileListTransfer);
// MySQL is extremely slow in AutopatcherMySQLRepository::GetFilePart so running tho incremental reads in a thread allows multiple concurrent users to read
// Without this, only one user would be sent files at a time basically
fileListTransfer.StartIncrementalReadThreads(sqlConnectionObjectCount);
autopatcherServer.SetMaxConurrentUsers(MAX_INCOMING_CONNECTIONS); // More users than this get queued up
RakNet::AutopatcherServerLoadNotifier_Printf loadNotifier;
autopatcherServer.SetLoadManagementCallback(&loadNotifier);
#ifdef USE_TCP
RakNet::PacketizedTCP packetizedTCP;
if (packetizedTCP.Start(LISTEN_PORT,MAX_INCOMING_CONNECTIONS)==false)
{
printf("Failed to start TCP. Is the port already in use?");
return 1;
}
packetizedTCP.AttachPlugin(&autopatcherServer);
packetizedTCP.AttachPlugin(&fileListTransfer);
#else
RakNet::RakPeerInterface *rakPeer;
rakPeer = RakNet::RakPeerInterface::GetInstance();
RakNet::SocketDescriptor socketDescriptor(LISTEN_PORT,0);
rakPeer->Startup(MAX_INCOMING_CONNECTIONS,&socketDescriptor, 1);
rakPeer->SetMaximumIncomingConnections(MAX_INCOMING_CONNECTIONS);
rakPeer->AttachPlugin(&autopatcherServer);
rakPeer->AttachPlugin(&fileListTransfer);
#endif
printf("started.\n");
printf("Enter database password:\n");
char password[128];
char username[256];
strcpy(username, "root");
Gets(password,sizeof(password));
if (password[0]==0)
strcpy(password,"aaaa");
char db[256];
printf("Enter DB schema: ");
// To create the schema, go to the command line client and type create schema autopatcher;
// You also have to add
// max_allowed_packet=128M
// Where 128 is the maximum size file in megabytes you'll ever add
// to MySQL\MySQL Server 5.1\my.ini in the [mysqld] section
// Be sure to restart the service after doing so
Gets(db,sizeof(db));
if (db[0]==0)
strcpy(db,"autopatcher");
for (int conIdx=0; conIdx < sqlConnectionObjectCount; conIdx++)
{
if (!connectionObject[conIdx].Connect("localhost", username, password, db, 0, NULL, 0))
{
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)
//.........这里部分代码省略.........
示例10: main
int main(int argc, char **argv)
{
if (argc<8)
{
printf("Arguments: serverIP, pathToGame, gameName, patchImmediately, localPort, serverPort, fullScan");
return 0;
}
RakNet::SystemAddress TCPServerAddress=RakNet::UNASSIGNED_SYSTEM_ADDRESS;
RakNet::AutopatcherClient autopatcherClient;
RakNet::FileListTransfer fileListTransfer;
RakNet::CloudClient cloudClient;
autopatcherClient.SetFileListTransferPlugin(&fileListTransfer);
bool didRebalance=false; // So we only reconnect to a lower load server once, for load balancing
bool fullScan = argv[7][0]=='1';
unsigned short localPort;
localPort=atoi(argv[5]);
unsigned short serverPort=atoi(argv[6]);
RakNet::PacketizedTCP packetizedTCP;
if (packetizedTCP.Start(localPort,1)==false)
{
printf("Failed to start TCP. Is the port already in use?");
return 1;
}
packetizedTCP.AttachPlugin(&autopatcherClient);
packetizedTCP.AttachPlugin(&fileListTransfer);
RakNet::RakPeerInterface *rakPeer;
rakPeer = RakNet::RakPeerInterface::GetInstance();
RakNet::SocketDescriptor socketDescriptor(localPort,0);
rakPeer->Startup(1,&socketDescriptor, 1);
rakPeer->AttachPlugin(&cloudClient);
DataStructures::List<RakNet::RakNetSocket2* > sockets;
rakPeer->GetSockets(sockets);
printf("Started on port %i\n", sockets[0]->GetBoundAddress().GetPort());
char buff[512];
strcpy(buff, argv[1]);
rakPeer->Connect(buff, serverPort, 0, 0);
printf("Connecting...\n");
char appDir[512];
strcpy(appDir, argv[2]);
char appName[512];
strcpy(appName, argv[3]);
bool patchImmediately=argc>=5 && argv[4][0]=='1';
RakNet::Packet *p;
while (1)
{
RakNet::SystemAddress notificationAddress;
notificationAddress=packetizedTCP.HasCompletedConnectionAttempt();
if (notificationAddress!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
{
printf("ID_CONNECTION_REQUEST_ACCEPTED\n");
TCPServerAddress=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");
notificationAddress=packetizedTCP.HasFailedConnectionAttempt();
if (notificationAddress!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
{
printf("ID_CONNECTION_ATTEMPT_FAILED TCP\n");
autopatcherClient.SetFileListTransferPlugin(0);
autopatcherClient.Clear();
packetizedTCP.Stop();
rakPeer->Shutdown(500,0);
RakNet::RakPeerInterface::DestroyInstance(rakPeer);
return 0;
}
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);
autopatcherClient.SetFileListTransferPlugin(0);
autopatcherClient.Clear();
packetizedTCP.Stop();
rakPeer->Shutdown(500,0);
RakNet::RakPeerInterface::DestroyInstance(rakPeer);
return 0;
//.........这里部分代码省略.........
示例11: 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;
//.........这里部分代码省略.........
示例12: Run
// Called from main()/WindMain() after settings are initialized to execute
// most of the program logic. Responsible for setting up the window,
// loading movies and containing the playback/message loop.
int FxPlayerTiny::Run()
{
if (!SetupWindow(GString(FXPLAYER_APP_TITLE " ") + FileName))
return 1;
// Show the window.
ShowWindow(hWnd, SW_SHOWDEFAULT);
UpdateWindow(hWnd);
// Create and Configure GFxLoader.
GFxLoader loader;
// Developers set states on the loader to modify loading and playback behavior.
// If you need to load files from a custom package, for example, you can
// create a GFxFileOpener derived class that loads files in a custom way.
// Here GFxFileOpener and GFxFSCommandHandler are set for sample purposes.
GPtr<GFxFileOpener> pfileOpener = *new GFxFileOpener;
loader.SetFileOpener(pfileOpener);
GPtr<GFxFSCommandHandler> pcommandHandler = *new FxPlayerFSCommandHandler;
loader.SetFSCommandHandler(pcommandHandler);
// For D3D, it is good to override image creator to keep image data,
// 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();
//.........这里部分代码省略.........
示例13: main
int main(void)
{
char str[512];
RakNet::RakPeerInterface *peer = RakNet::RakPeerInterface::GetInstance();
bool isServer;
RakNet::Packet *packet;
printf("(C) or (S)erver?\n");
Gets(str, sizeof(str));
if ((str[0]=='c')||(str[0]=='C'))
{
RakNet::SocketDescriptor sd;
peer->Startup(1,&sd, 1);
isServer = false;
} else {
RakNet::SocketDescriptor sd(SERVER_PORT,0);
peer->Startup(MAX_CLIENTS, &sd, 1);
isServer = true;
}
if (isServer)
{
printf("Starting the server.\n");
// We need to let the server accept incoming connections from the clients
peer->SetMaximumIncomingConnections(MAX_CLIENTS);
} else {
printf("Enter server IP or hit enter for 127.0.0.1\n");
Gets(str, sizeof(str));
if (str[0]==0){
strcpy(str, "127.0.0.1");
}
printf("Starting the client.\n");
peer->Connect(str, SERVER_PORT, 0,0);
}
while (1)
{
for (packet=peer->Receive(); packet; peer->DeallocatePacket(packet), packet=peer->Receive())
{
switch (packet->data[0])
{
case ID_REMOTE_DISCONNECTION_NOTIFICATION:
printf("Another client has disconnected.\n");
break;
case ID_REMOTE_CONNECTION_LOST:
printf("Another client has lost the connection.\n");
break;
case ID_REMOTE_NEW_INCOMING_CONNECTION:
printf("Another client has connected.\n");
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
printf("Our connection request has been accepted.\n");
break;
case ID_NEW_INCOMING_CONNECTION:
printf("A connection is incoming.\n");
break;
case ID_NO_FREE_INCOMING_CONNECTIONS:
printf("The server is full.\n");
break;
case ID_DISCONNECTION_NOTIFICATION:
if (isServer){
printf("A client has disconnected.\n");
} else {
printf("We have been disconnected.\n");
}
break;
case ID_CONNECTION_LOST:
if (isServer){
printf("A client lost the connection.\n");
} else {
printf("Connection lost.\n");
}
break;
default:
printf("Message with identifier %i has arrived.\n", packet->data[0]);
break;
}
}
}
RakNet::RakPeerInterface::DestroyInstance(peer);
return 0;
}
示例14: 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();
}
}
}
}
示例15: 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)
{
//.........这里部分代码省略.........