Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "RakPeerInterface.h"
- #include "GetTime.h"
- #include "MessageIdentifiers.h"
- #include "BitStream.h"
- #include <cstdio>
- #include <memory.h>
- #include <cstring>
- #include <stdlib.h>
- #include "Rand.h"
- #include "RakNetStatistics.h"
- #include "RakSleep.h"
- #include "RakMemoryOverride.h"
- #include <stdio.h>
- #include "Kbhit.h"
- #include "RakSleep.h"
- #include "messages.h"
- #include "networking.h"
- #include "world.h"
- #include "character.h"
- class networkinfo clients[MAXNUMBEROFPLAYERS], client, server;
- bool isServer;
- int clientnumberonserver;
- using namespace RakNet;
- RakPeerInterface *rakPeer;
- RakNet::Packet *packet;
- RakNetGUID guids[MAXNUMBEROFPLAYERS]; // 0 is server
- int guidindex=1;
- // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
- networkinfo::networkinfo()
- {
- for(int i=0; i<100; i++) receiptrequestmessageID[i]=0;
- }
- int clientconnecting_managepackets()
- {
- for (packet=rakPeer->Receive(); packet; rakPeer->DeallocatePacket(packet), packet=rakPeer->Receive())
- {
- switch(packet->data[0])
- {
- case ID_CONNECTION_REQUEST_ACCEPTED:
- return(1); // Connection accepted! Yay!
- break;
- case ID_CONNECTION_ATTEMPT_FAILED:
- MessageBoxA(0,"Connection attempt failed.\nThis probably means either the IP is wrong or the server's not ready.","Connection Error",0);
- exit(1);
- break;
- case ID_NO_FREE_INCOMING_CONNECTIONS:
- MessageBoxA(0,"The server is full.","Connection Error",0);
- exit(1);
- break;
- case ID_ALREADY_CONNECTED:
- MessageBoxA(0,"Server says we're already connected...","Connection Error",0);
- exit(1);
- break;
- case ID_IP_RECENTLY_CONNECTED:
- MessageBoxA(0,"IP recently connected.","Connection Error",0);
- exit(1);
- break;
- default:
- break;
- }
- }
- return(0); // No connection accepted
- }
- // Manage packets sent to server
- void serverplaying_managepackets()
- {
- int reqch;
- int playernumber;
- for (packet=rakPeer->Receive(); packet; rakPeer->DeallocatePacket(packet), packet=rakPeer->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:
- printf("A client has disconnected.\n");
- break;
- case ID_CONNECTION_LOST:
- printf("A client lost the connection.\n");
- break;
- case ID_CLIENT_CHARACTER_DATA:
- {
- RakNet::BitStream bitStream(packet->data, packet->length, false);
- printf("Received character data.\n");
- bitStream.IgnoreBytes(sizeof(MessageID));
- bitStream.Read(reqch);
- if(reqch==1) printf("Received from %s request for character %d, the Warrior\n",packet->guid.ToString(),reqch);
- else if(reqch==2) printf("Received from %s request for character %d, the Rogue\n",packet->guid.ToString(),reqch);
- else if(reqch==3) printf("Received from %s request for character %d, the Mage\n",packet->guid.ToString(),reqch);
- else
- {
- printf("Received from %s request for character %d, unknown!\n",packet->guid.ToString(),reqch);
- MessageBoxA(0,"Unknown character requested by client!","Error",0);
- exit(1);
- }
- // See if player already exists by GUID
- // If it does, use existing one
- // If not, assign a vacant player number
- playernumber=getplayernumberfromguid(packet->guid);
- if(playernumber<0)
- {
- printf("Player unknown. Assigning new ID.\n");
- playernumber=assignplayernumber();
- guids[playernumber]=packet->guid;
- }
- else printf("Player #%d is reconnecting...\n",playernumber);
- break;
- }
- default:
- printf("Message with identifier %i has arrived.\n", packet->data[0]);
- break;
- }
- }
- }
- // Finds which player # has given GUID and returns that number
- // Returns -1 if no match is found
- int getplayernumberfromguid(RakNetGUID id)
- {
- for(int i=0; i<MAXNUMBEROFPLAYERS; i++)
- if(guids[i]==id) return i;
- return -1;
- }
- // Assign a new player ID
- // (once we've determined one doesn't exist with getplayernumberfromguid)
- // Returns -1 if no unactive player found (we've maxed out on the number of players)
- int assignplayernumber()
- {
- for(int i=0; i<MAXNUMBEROFPLAYERS; i++)
- if(!players[i].active) return i;
- return -1;
- }
- // Manage packets sent to client
- void clientplaying_managepackets()
- {
- for (packet=rakPeer->Receive(); packet; rakPeer->DeallocatePacket(packet), packet=rakPeer->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:
- printf("We have been disconnected.\n");
- break;
- case ID_CONNECTION_LOST:
- printf("Connection lost.\n");
- break;
- default:
- printf("Message with identifier %i has arrived.\n", packet->data[0]);
- break;
- }
- }
- }
- void sendtoserver(int type)
- {
- RakNet::BitStream bitStream;
- bitStream.Reset();
- if(type==ID_CLIENT_PLAYER_DATA)
- {
- bitStream.Write((MessageID)type);
- bitStream.Write(requestedcharacter);
- }
- else if(type==ID_CLIENT_CHARACTER_DATA)
- {
- bitStream.Write((MessageID)type);
- bitStream.Write(requestedcharacter);
- }
- rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_SEQUENCED, 0, UNASSIGNED_SYSTEM_ADDRESS, true);
- }
- /*
- void sendtoserver(char ch)
- {
- RakNet::BitStream bitStream;
- bitStream.Reset();
- bitStream.Write((MessageID)ID_USER_PACKET_ENUM);
- bitStream.Write(ch);
- rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_SEQUENCED, 0, UNASSIGNED_SYSTEM_ADDRESS, true);
- }
- */
- void sendtoallclients(char ch)
- {
- RakNet::BitStream bitStream;
- bitStream.Reset();
- bitStream.Write((MessageID)ID_USER_PACKET_ENUM);
- bitStream.Write(ch);
- for(int i=1; i<guidindex; i++)
- rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_SEQUENCED, 0, guids[i], false);
- }
- void setupserver()
- {
- rakPeer = RakNet::RakPeerInterface::GetInstance();
- RakNet::SocketDescriptor socketDescriptor(60000,0);
- rakPeer->Startup(32, &socketDescriptor, 1);
- rakPeer->SetMaximumIncomingConnections(32);
- addmessage("SERVER ID:");
- addmessage(rakPeer->GetMyGUID().ToString());
- }
- void connecttoserver()
- {
- rakPeer = RakNet::RakPeerInterface::GetInstance();
- RakNet::SocketDescriptor socketDescriptor(0,0);
- rakPeer->Startup(32, &socketDescriptor, 1);
- if(rakPeer->Connect("127.0.0.1",60000,0,0)!=CONNECTION_ATTEMPT_STARTED)
- {
- MessageBoxA(0,"Initial connection attempt to server failed.","Connection Error",0);
- exit(1);
- }
- rakPeer->SetMaximumIncomingConnections(32);
- addmessage("CLIENT ID:");
- addmessage(rakPeer->GetMyGUID().ToString());
- }
- void printmyip()
- {
- rakPeer = RakNet::RakPeerInterface::GetInstance();
- RakNet::SocketDescriptor socketDescriptor(60000,0);
- rakPeer->Startup(32, &socketDescriptor, 1);
- addmessage("MY IP APPEARS TO BE:");
- addmessage(rakPeer->GetSystemAddressFromGuid(rakPeer->GetMyGUID()).ToString());
- rakPeer->Shutdown(0,0,LOW_PRIORITY);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement