本文整理汇总了C++中raknet::RakPeerInterface::Connect方法的典型用法代码示例。如果您正苦于以下问题:C++ RakPeerInterface::Connect方法的具体用法?C++ RakPeerInterface::Connect怎么用?C++ RakPeerInterface::Connect使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类raknet::RakPeerInterface
的用法示例。
在下文中一共展示了RakPeerInterface::Connect方法的14个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: 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());
}
示例2: main
int main(void)
{
char ch;
#ifdef USE_TCP
RakNet::PacketizedTCP tcp1;
#else
RakNet::RakPeerInterface *rakPeer;
#endif
// directoryDeltaTransfer is the main plugin that does the work for this sample.
RakNet::DirectoryDeltaTransfer directoryDeltaTransfer;
// The fileListTransfer plugin is used by the DirectoryDeltaTransfer plugin and must also be registered (you could use this yourself too if you wanted, of course).
RakNet::FileListTransfer fileListTransfer;
// Read files in parts, rather than the whole file from disk at once
RakNet::IncrementalReadInterface iri;
directoryDeltaTransfer.SetDownloadRequestIncrementalReadInterface(&iri, 1000000);
#ifdef USE_TCP
tcp1.AttachPlugin(&directoryDeltaTransfer);
tcp1.AttachPlugin(&fileListTransfer);
#else
rakPeer = RakNet::RakPeerInterface::GetInstance();
rakPeer->AttachPlugin(&directoryDeltaTransfer);
rakPeer->AttachPlugin(&fileListTransfer);
// Get download progress notifications. Handled by the plugin.
rakPeer->SetSplitMessageProgressInterval(100);
#endif
directoryDeltaTransfer.SetFileListTransferPlugin(&fileListTransfer);
printf("This sample demonstrates the plugin to incrementally transfer compressed\n");
printf("deltas of directories. In essence, it's a simple autopatcher.\n");
printf("Unlike the full autopatcher, it has no dependencies. It is suitable for\n");
printf("patching from non-dedicated servers at runtime.\n");
printf("Difficulty: Intermediate\n\n");
printf("Enter listen port. Enter for default. If running two instances on the\nsame computer, use 0 for the client.\n");
unsigned short localPort;
char str[256];
Gets(str, sizeof(str));
if (str[0]==0)
localPort=60000;
else
localPort=atoi(str);
RakNet::SocketDescriptor socketDescriptor(localPort,0);
#ifdef USE_TCP
bool b=tcp1.Start(localPort,8);
RakAssert(b);
#else
if (rakPeer->Startup(8,&socketDescriptor, 1)!=RakNet::RAKNET_STARTED)
{
RakNet::RakPeerInterface::DestroyInstance(rakPeer);
printf("RakNet initialize failed. Possibly duplicate port.\n");
return 1;
}
rakPeer->SetMaximumIncomingConnections(8);
#endif
printf("Commands:\n");
printf("(S)et application directory.\n");
printf("(A)dd allowed uploads from subdirectory.\n");
printf("(D)ownload from subdirectory.\n");
printf("(C)lear allowed uploads.\n");
printf("C(o)nnect to another system.\n");
printf("(Q)uit.\n");
RakNet::SystemAddress sysAddrZero=RakNet::UNASSIGNED_SYSTEM_ADDRESS;
RakNet::TimeMS nextStatTime = RakNet::GetTimeMS() + 1000;
RakNet::Packet *p;
while (1)
{
/*
if (//directoryDeltaTransfer.GetNumberOfFilesForUpload()>0 &&
RakNet::GetTimeMS() > nextStatTime)
{
// If sending, periodically show connection stats
char statData[2048];
RakNetStatistics *statistics = rakPeer->GetStatistics(rakPeer->GetSystemAddressFromIndex(0));
// if (statistics->messagesOnResendQueue>0 || statistics->internalOutputQueueSize>0)
if (rakPeer->GetSystemAddressFromIndex(0)!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
{
StatisticsToString(statistics, statData, 2);
printf("%s\n", statData);
}
nextStatTime=RakNet::GetTimeMS()+5000;
}
*/
// Process packets
#ifdef USE_TCP
p=tcp1.Receive();
#else
p=rakPeer->Receive();
#endif
#ifdef USE_TCP
RakNet::SystemAddress sa;
sa=tcp1.HasNewIncomingConnection();
//.........这里部分代码省略.........
示例3: 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;
//.........这里部分代码省略.........
示例4: 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;
}
示例5: 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;
//.........这里部分代码省略.........
示例6: listenSocket
bool
CProxy::start(const std::string& sListenIP,
ushort uListenPort,
const std::string& sLoginSrvIP,
ushort uLoginSrvPort,
const std::vector<s_serverInfos>& vecAreas,
ushort uMaxConnections)
{
// Check if listen address is correctly formated
if (!m_listenAddress.FromStringExplicitPort(sListenIP.c_str(), uListenPort))
{
log_ERROR("Invalid listen address. Aborting.");
return false;
}
// Start listen interface
RakNet::SocketDescriptor listenSocket(uListenPort, sListenIP.c_str());
m_pListenInterface = RakNet::RakPeerInterface::GetInstance();
if (m_pListenInterface->Startup(uMaxConnections, &listenSocket, 1) != RakNet::RAKNET_STARTED)
{
log_ERROR("Failed to startup Raknet interface. Aborting.");
stop();
return false;
}
m_pListenInterface->SetMaximumIncomingConnections(uMaxConnections);
ff::write(pan::notice, "Started listening on ", sListenIP, ":", uListenPort, ".");
ff::write(pan::notice, "Accepting max ", uMaxConnections, " connections.");
ushort uTmpPort = 49777;
// Start login server interface
{
// Check if login server address is correctly formated
if (!m_loginSrvAddress.FromStringExplicitPort(sLoginSrvIP.c_str(), uLoginSrvPort))
{
log_ERROR("Invalid login server address. Aborting.");
stop();
return false;
}
RakNet::SocketDescriptor loginSocketDesc(++uTmpPort, NULL);
while (RakNet::SocketLayer::IsPortInUse(loginSocketDesc.port, loginSocketDesc.hostAddress, loginSocketDesc.socketFamily))
loginSocketDesc.port = uTmpPort++;
// Create and startup login server interface
m_pLoginSrvInterface = RakNet::RakPeerInterface::GetInstance();
if (m_pLoginSrvInterface->Startup(1, &loginSocketDesc, 1) != RakNet::RAKNET_STARTED)
{
log_ERROR("Failed to startup login server interface.");
stop();
return false;
}
int latency = ping(m_pLoginSrvInterface, sLoginSrvIP, uLoginSrvPort);
if (latency < 0)
ff::write(pan::warning, "Failed to ping login server (", sLoginSrvIP, ":", uLoginSrvPort, ").");
else
ff::write(pan::notice, "Pinged login server (", sLoginSrvIP, ":", uLoginSrvPort, ") - ", latency, "ms.");
// Attempt connection
if (m_pLoginSrvInterface->Connect(sLoginSrvIP.c_str(), uLoginSrvPort, NULL, 0) != RakNet::CONNECTION_ATTEMPT_STARTED)
{
ff::write(pan::error, "Connection to login server (", sLoginSrvIP, ":", uLoginSrvPort, ") failed.");
stop();
return false;
}
m_pLoginSrvInterface->SetOccasionalPing(true);
}
// Connect to area servers
for (std::vector<s_serverInfos>::const_iterator it = vecAreas.begin();
it != vecAreas.end();
it++)
{
RakNet::SocketDescriptor areaSocketDesc(uTmpPort++, NULL);
while (RakNet::SocketLayer::IsPortInUse(areaSocketDesc.port, areaSocketDesc.hostAddress, areaSocketDesc.socketFamily))
areaSocketDesc.port = uTmpPort++;
RakNet::RakPeerInterface* pAreaItf = RakNet::RakPeerInterface::GetInstance();
if (pAreaItf->Startup(1, &areaSocketDesc, 1) != RakNet::RAKNET_STARTED)
{
log_ERROR("Failed to startup an area server interface.");
continue;
}
if (pAreaItf->Connect((*it).m_srvIP.c_str(), (*it).m_srvPort, NULL, 0) != RakNet::CONNECTION_ATTEMPT_STARTED)
{
ff::write(pan::error, "Connection attempt to area server (", (*it).m_srvIP, ":", (*it).m_srvPort, ") failed.");
continue;
}
//.........这里部分代码省略.........
示例7: main
int main(int argc, char **argv)
{
printf("A simple client interface for the advanced autopatcher.\n");
printf("Use DirectoryDeltaTransfer for a simpler version of an autopatcher.\n");
printf("Difficulty: Intermediate\n\n");
printf("Client starting...");
RakNet::SystemAddress serverAddress=RakNet::UNASSIGNED_SYSTEM_ADDRESS;
RakNet::AutopatcherClient autopatcherClient;
RakNet::FileListTransfer fileListTransfer;
autopatcherClient.SetFileListTransferPlugin(&fileListTransfer);
unsigned short localPort=0;
if (argc>=6)
{
localPort=atoi(argv[5]);
}
#ifdef USE_TCP
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);
#else
RakNet::RakPeerInterface *rakPeer;
rakPeer = RakNet::RakPeerInterface::GetInstance();
RakNet::SocketDescriptor socketDescriptor(localPort,0);
rakPeer->Startup(1,&socketDescriptor, 1);
// Plugin will send us downloading progress notifications if a file is split to fit under the MTU 10 or more times
rakPeer->SetSplitMessageProgressInterval(10);
rakPeer->AttachPlugin(&autopatcherClient);
rakPeer->AttachPlugin(&fileListTransfer);
#endif
printf("started\n");
char buff[512];
if (argc<2)
{
printf("Enter server IP: ");
Gets(buff,sizeof(buff));
if (buff[0]==0)
//strcpy(buff, "94.198.81.195");
strcpy(buff, "127.0.0.1");
}
else
strcpy(buff, argv[1]);
#ifdef USE_TCP
packetizedTCP.Connect(buff,60000,false);
#else
rakPeer->Connect(buff, 60000, 0, 0);
#endif
printf("Connecting...\n");
char appDir[512];
if (argc<3)
{
printf("Enter application directory: ");
Gets(appDir,sizeof(appDir));
if (appDir[0]==0)
{
strcpy(appDir, "D:/temp2");
}
}
else
strcpy(appDir, argv[2]);
char appName[512];
if (argc<4)
{
printf("Enter application name: ");
Gets(appName,sizeof(appName));
if (appName[0]==0)
strcpy(appName, "TestApp");
}
else
strcpy(appName, argv[3]);
bool patchImmediately=argc>=5 && argv[4][0]=='1';
if (patchImmediately==false)
printf("Hit 'q' to quit, 'p' to patch, 'c' to cancel the patch. 'r' to reconnect. 'd' to disconnect.\n");
else
printf("Hit 'q' to quit, 'c' to cancel the patch.\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");
serverAddress=notificationAddress;
}
notificationAddress=packetizedTCP.HasNewIncomingConnection();
if (notificationAddress!=RakNet::UNASSIGNED_SYSTEM_ADDRESS)
printf("ID_NEW_INCOMING_CONNECTION\n");
//.........这里部分代码省略.........
示例8: 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;
//.........这里部分代码省略.........
示例9: main
int main(void)
{
char ch;
RakNet::SocketDescriptor sd;
sd.socketFamily=AF_INET; // Only IPV4 supports broadcast on 255.255.255.255
char ip[128];
static const int SERVER_PORT=12345;
// ReplicaManager3 requires NetworkIDManager to lookup pointers from numbers.
NetworkIDManager networkIdManager;
// Each application has one instance of RakPeerInterface
RakNet::RakPeerInterface *rakPeer;
// The system that performs most of our functionality for this demo
ReplicaManager3Sample replicaManager;
printf("Demonstration of ReplicaManager3.\n");
printf("1. Demonstrates creating objects created by the server and client.\n");
printf("2. Demonstrates automatic serialization data members\n");
printf("Difficulty: Intermediate\n\n");
printf("Start as (c)lient, (s)erver, (p)eer? ");
ch=getche();
rakPeer = RakNet::RakPeerInterface::GetInstance();
if (ch=='c' || ch=='C')
{
topology=CLIENT;
sd.port=0;
}
else if (ch=='s' || ch=='S')
{
topology=SERVER;
sd.port=SERVER_PORT;
}
else
{
topology=P2P;
sd.port=SERVER_PORT;
while (IRNS2_Berkley::IsPortInUse(sd.port,sd.hostAddress,sd.socketFamily, SOCK_DGRAM)==true)
sd.port++;
}
// Start RakNet, up to 32 connections if the server
rakPeer->Startup(32,&sd,1);
rakPeer->AttachPlugin(&replicaManager);
replicaManager.SetNetworkIDManager(&networkIdManager);
rakPeer->SetMaximumIncomingConnections(32);
printf("\nMy GUID is %s\n", rakPeer->GetMyGUID().ToString());
printf("\n");
if (topology==CLIENT)
{
printf("Enter server IP: ");
Gets(ip, sizeof(ip));
if (ip[0]==0)
strcpy(ip, "127.0.0.1");
rakPeer->Connect(ip,SERVER_PORT,0,0,0);
printf("Connecting...\n");
}
printf("Commands:\n(Q)uit\n'C'reate objects\n'R'andomly change variables in my objects\n'D'estroy my objects\n");
// Enter infinite loop to run the system
RakNet::Packet *packet;
bool quit=false;
while (!quit)
{
for (packet = rakPeer->Receive(); packet; rakPeer->DeallocatePacket(packet), packet = rakPeer->Receive())
{
switch (packet->data[0])
{
case ID_CONNECTION_ATTEMPT_FAILED:
printf("ID_CONNECTION_ATTEMPT_FAILED\n");
quit=true;
break;
case ID_NO_FREE_INCOMING_CONNECTIONS:
printf("ID_NO_FREE_INCOMING_CONNECTIONS\n");
quit=true;
break;
case ID_CONNECTION_REQUEST_ACCEPTED:
printf("ID_CONNECTION_REQUEST_ACCEPTED\n");
break;
case ID_NEW_INCOMING_CONNECTION:
printf("ID_NEW_INCOMING_CONNECTION from %s\n", packet->systemAddress.ToString());
break;
case ID_DISCONNECTION_NOTIFICATION:
printf("ID_DISCONNECTION_NOTIFICATION\n");
break;
case ID_CONNECTION_LOST:
printf("ID_CONNECTION_LOST\n");
break;
case ID_ADVERTISE_SYSTEM:
// The first conditional is needed because ID_ADVERTISE_SYSTEM may be from a system we are connected to, but replying on a different address.
// The second conditional is because AdvertiseSystem also sends to the loopback
if (rakPeer->GetSystemAddressFromGuid(packet->guid)==RakNet::UNASSIGNED_SYSTEM_ADDRESS &&
rakPeer->GetMyGUID()!=packet->guid)
{
printf("Connecting to %s\n", packet->systemAddress.ToString(true));
rakPeer->Connect(packet->systemAddress.ToString(false), packet->systemAddress.GetPort(),0,0);
//.........这里部分代码省略.........
示例10: main
int main()
{
RakNet::Packet *packet;
RakNet::RakPeerInterface *rakPeer;
bool isConnected=false;
rakPeer=RakNet::RakPeerInterface::GetInstance();
char command[512];
printf("This sample demonstrates connecting to the command console.\n");
printf("using the RakNet transport protocol\n");
printf("It's the equivalent of a secure telnet client\n");
printf("See the 'CommandConsoleServer' project.\n");
printf("Difficulty: Intermediate\n\n");
printf("RakNet secure command console.\n");
printf("Commands:\n");
printf("/Connect\n");
printf("/Disconnect\n");
printf("/Quit\n");
printf("Any other command goes to the remote console\n");
while (1)
{
if (kbhit())
{
Gets(command,sizeof(command));
if (stricmp(command, "/quit")==0)
{
printf("Goodbye.\n");
rakPeer->Shutdown(500, 0);
return 0;
}
else if (stricmp(command, "/disconnect")==0)
{
if (isConnected)
{
rakPeer->Shutdown(500, 0);
isConnected=false;
printf("Disconnecting.\n");
}
else
{
printf("Not currently connected.\n");
}
}
else if (stricmp(command, "/connect")==0)
{
if (isConnected)
{
printf("Disconnect first.\n");
}
else
{
char ip[128];
char remotePort[64];
char password[512];
char localPort[64];
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);
//.........这里部分代码省略.........
示例11: getExtendedData
ServerExtendedData getExtendedData(const char *addr, unsigned short port)
{
ServerExtendedData data;
RakNet::SocketDescriptor socketDescriptor = {0, ""};
RakNet::RakPeerInterface *peer = RakNet::RakPeerInterface::GetInstance();
peer->Startup(1, &socketDescriptor, 1);
stringstream sstr;
sstr << TES3MP_VERSION;
sstr << TES3MP_PROTO_VERSION;
std::string msg;
if (peer->Connect(addr, port, sstr.str().c_str(), (int)(sstr.str().size()), nullptr, 0, 3, 500, 0) != RakNet::CONNECTION_ATTEMPT_STARTED)
msg = "Connection attempt failed.\n";
int queue = 0;
while (queue == 0)
{
for (RakNet::Packet *packet = peer->Receive(); packet; peer->DeallocatePacket(
packet), packet = peer->Receive())
{
switch (packet->data[0])
{
case ID_CONNECTION_ATTEMPT_FAILED:
{
msg = "Connection failed.\n"
"Either the IP address is wrong or a firewall on either system is blocking\n"
"UDP packets on the port you have chosen.";
queue = -1;
break;
}
case ID_INVALID_PASSWORD:
{
msg = "Connection failed.\n"
"The client or server is outdated.\n";
queue = -1;
break;
}
case ID_CONNECTION_REQUEST_ACCEPTED:
{
msg = "Connection accepted.\n";
queue = 1;
break;
}
case ID_DISCONNECTION_NOTIFICATION:
throw runtime_error("ID_DISCONNECTION_NOTIFICATION.\n");
case ID_CONNECTION_BANNED:
throw runtime_error("ID_CONNECTION_BANNED.\n");
case ID_CONNECTION_LOST:
throw runtime_error("ID_CONNECTION_LOST.\n");
default:
printf("Connection message with identifier %i has arrived in initialization.\n", packet->data[0]);
}
}
}
puts(msg.c_str());
if (queue == -1) // connection is failed
return data;
{
RakNet::BitStream bs;
bs.Write((unsigned char) (ID_USER_PACKET_ENUM + 1));
peer->Send(&bs, HIGH_PRIORITY, RELIABLE_ORDERED, 0, RakNet::UNASSIGNED_SYSTEM_ADDRESS, true);
}
RakNet::Packet *packet;
bool done = false;
while (!done)
{
for (packet = peer->Receive(); packet; peer->DeallocatePacket(packet), packet = peer->Receive())
{
if (packet->data[0] == (ID_USER_PACKET_ENUM + 1))
{
RakNet::BitStream bs(packet->data, packet->length, false);
bs.IgnoreBytes(1);
size_t length = 0;
bs.Read(length);
for (size_t i = 0; i < length; i++)
{
RakNet::RakString str;
bs.Read(str);
data.players.emplace_back(str.C_String());
}
bs.Read(length);
for (size_t i = 0; i < length; i++)
{
RakNet::RakString str;
bs.Read(str);
data.plugins.emplace_back(str.C_String());
}
done = true;
}
}
}
peer->Shutdown(0);
RakSleep(10);
//.........这里部分代码省略.........
示例12: 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;
//.........这里部分代码省略.........
示例13: 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:
//.........这里部分代码省略.........
示例14: run
void Video::run(const char* ip) {
unsigned int maxConnectionsAllowed = 1;
unsigned int maxPlayersPerServer = 1;
unsigned short serverPort = 7000;
RakNet::RakPeerInterface *rakPeer = RakNet::RakPeerInterface::GetInstance();
RakNet::SocketDescriptor socketDescriptor(serverPort, 0);
if (rakPeer->Startup(maxConnectionsAllowed, &socketDescriptor, 1) != RakNet::RAKNET_STARTED) {
std::cerr << "Startup fail:" << std::endl;
RakNet::RakPeerInterface::DestroyInstance(rakPeer);
return;
}
rakPeer->SetMaximumIncomingConnections(maxPlayersPerServer);
RakNet::Packet *packet;
unsigned char typeId;
bool connected = false;
char key;
RakNet::SystemAddress address;
if (ip) {
std::cout << "Connect: " << ip << std::endl;
rakPeer->Connect(ip, serverPort, 0, 0);
}
cv::namedWindow("MyVideo", CV_WINDOW_AUTOSIZE | CV_GUI_NORMAL);
cv::createTrackbar("AlphaTrackbar", "MyVideo", &alpha_slider, 100);
capture.open(0);
if (!capture.isOpened()) {
std::cout << "Capture open fail" << std::endl;
return;
}
capture.set(CV_CAP_PROP_FRAME_WIDTH, 320);
capture.set(CV_CAP_PROP_FRAME_HEIGHT, 240);
capture.set(CV_CAP_PROP_FOURCC, CV_FOURCC('X', '2', '6', '4'));
cv::namedWindow("RemoteVideo", 1);
while (1) {
const time_t t = time(NULL);
struct tm* current_time = localtime(&t);
std::cout << "current time is " << current_time->tm_sec << std::endl;
cv::Mat frame;
capture.read(frame);
cv::imshow("MyVideo", frame);
packet = rakPeer->Receive();
if (packet) {
RakNet::BitStream bitStream(packet->data, packet->length, false);
bitStream.Read(typeId);
switch (typeId) {
case ID_CONNECTION_REQUEST_ACCEPTED:
{
std::cout << "ID_CONNECTION_REQUEST_ACCEPTED" << ip << std::endl;
address = packet->systemAddress;
connected = true;
break;
}
case ID_NEW_INCOMING_CONNECTION:
{
std::cout << "ID_NEW_INCOMING_CONNECTION" << ip << std::endl;
address = packet->systemAddress;
connected = true;
break;
}
case ID_DISCONNECTION_NOTIFICATION:
{
connected = false;
break;
}
case ID_CONNECTION_LOST:
{
connected = false;
break;
}
case ID_USER_PACKET_ENUM:
{
int cols, rows, type, channels, size;
bitStream.Read(cols);
bitStream.Read(rows);
bitStream.Read(type);
bitStream.Read(channels);
bitStream.Read(size);
char* data = new char[size];
bitStream.Read(data, size);
cv::Mat mat(cols, rows, type, (uchar*)data);
cv::imshow("RemoteVideo", mat.reshape(channels, rows));
delete data;
break;
//.........这里部分代码省略.........