Advertisement
Guest User

networking.cpp

a guest
Jun 30th, 2013
148
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 7.91 KB | None | 0 0
  1. #include "RakPeerInterface.h"
  2. #include "GetTime.h"
  3. #include "MessageIdentifiers.h"
  4. #include "BitStream.h"
  5. #include <cstdio>
  6. #include <memory.h>
  7. #include <cstring>
  8. #include <stdlib.h>
  9. #include "Rand.h"
  10. #include "RakNetStatistics.h"
  11. #include "RakSleep.h"
  12. #include "RakMemoryOverride.h"
  13. #include <stdio.h>
  14. #include "Kbhit.h"
  15. #include "RakSleep.h"
  16.  
  17. #include "messages.h"
  18. #include "networking.h"
  19. #include "world.h"
  20. #include "character.h"
  21.  
  22. class networkinfo clients[MAXNUMBEROFPLAYERS], client, server;
  23.  
  24. bool isServer;
  25. int clientnumberonserver;
  26.  
  27. using namespace RakNet;
  28. RakPeerInterface *rakPeer;
  29. RakNet::Packet *packet;
  30. RakNetGUID guids[MAXNUMBEROFPLAYERS];  // 0 is server
  31. int guidindex=1;
  32.  
  33. // . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
  34. networkinfo::networkinfo()
  35. {
  36.     for(int i=0; i<100; i++) receiptrequestmessageID[i]=0;
  37. }
  38.  
  39.  
  40. int clientconnecting_managepackets()
  41. {
  42.     for (packet=rakPeer->Receive(); packet; rakPeer->DeallocatePacket(packet), packet=rakPeer->Receive())
  43.     {
  44.         switch(packet->data[0])
  45.         {
  46.             case ID_CONNECTION_REQUEST_ACCEPTED:
  47.                 return(1);  // Connection accepted!  Yay!
  48.                 break;
  49.             case ID_CONNECTION_ATTEMPT_FAILED:
  50.                 MessageBoxA(0,"Connection attempt failed.\nThis probably means either the IP is wrong or the server's not ready.","Connection Error",0);
  51.                 exit(1);
  52.                 break;
  53.             case ID_NO_FREE_INCOMING_CONNECTIONS:
  54.                 MessageBoxA(0,"The server is full.","Connection Error",0);
  55.                 exit(1);
  56.                 break;
  57.             case ID_ALREADY_CONNECTED:
  58.                 MessageBoxA(0,"Server says we're already connected...","Connection Error",0);
  59.                 exit(1);
  60.                 break;
  61.             case ID_IP_RECENTLY_CONNECTED:
  62.                 MessageBoxA(0,"IP recently connected.","Connection Error",0);
  63.                 exit(1);
  64.                 break;
  65.             default:
  66.                 break;
  67.         }
  68.     }
  69.  
  70.     return(0);  // No connection accepted
  71. }
  72.  
  73. // Manage packets sent to server
  74. void serverplaying_managepackets()
  75. {
  76.     int reqch;
  77.     int playernumber;
  78.  
  79.     for (packet=rakPeer->Receive(); packet; rakPeer->DeallocatePacket(packet), packet=rakPeer->Receive())
  80.     {
  81.         switch(packet->data[0])
  82.         {
  83.             case ID_REMOTE_DISCONNECTION_NOTIFICATION:
  84.                 printf("Another client has disconnected.\n");
  85.                 break;
  86.             case ID_REMOTE_CONNECTION_LOST:
  87.                 printf("Another client has lost the connection.\n");
  88.                 break;
  89.             case ID_REMOTE_NEW_INCOMING_CONNECTION:
  90.                 printf("Another client has connected.\n");
  91.                 break;
  92.             case ID_CONNECTION_REQUEST_ACCEPTED:
  93.                 printf("Our connection request has been accepted.\n");
  94.                 break;                 
  95.             case ID_NEW_INCOMING_CONNECTION:
  96.                 printf("A connection is incoming.\n");
  97.                 break;
  98.             case ID_NO_FREE_INCOMING_CONNECTIONS:
  99.                 printf("The server is full.\n");
  100.                 break;
  101.             case ID_DISCONNECTION_NOTIFICATION:
  102.                 printf("A client has disconnected.\n");
  103.                 break;
  104.             case ID_CONNECTION_LOST:
  105.                 printf("A client lost the connection.\n");
  106.                 break;
  107.             case ID_CLIENT_CHARACTER_DATA:
  108.             {
  109.                 RakNet::BitStream bitStream(packet->data, packet->length, false);
  110.                 printf("Received character data.\n");
  111.                 bitStream.IgnoreBytes(sizeof(MessageID));
  112.                 bitStream.Read(reqch);
  113.                 if(reqch==1) printf("Received from %s request for character %d, the Warrior\n",packet->guid.ToString(),reqch);
  114.                 else if(reqch==2) printf("Received from %s request for character %d, the Rogue\n",packet->guid.ToString(),reqch);
  115.                 else if(reqch==3) printf("Received from %s request for character %d, the Mage\n",packet->guid.ToString(),reqch);
  116.                 else
  117.                 {
  118.                     printf("Received from %s request for character %d, unknown!\n",packet->guid.ToString(),reqch);
  119.                     MessageBoxA(0,"Unknown character requested by client!","Error",0);
  120.                     exit(1);
  121.                 }
  122.  
  123.                 //  See if player already exists by GUID
  124.                 //  If it does, use existing one
  125.                 //  If not, assign a vacant player number
  126.                 playernumber=getplayernumberfromguid(packet->guid);
  127.                 if(playernumber<0)
  128.                 {
  129.                     printf("Player unknown.  Assigning new ID.\n");
  130.                     playernumber=assignplayernumber();
  131.                     guids[playernumber]=packet->guid;
  132.                 }
  133.                 else printf("Player #%d is reconnecting...\n",playernumber);
  134.  
  135.                 break;
  136.             }
  137.             default:
  138.                 printf("Message with identifier %i has arrived.\n", packet->data[0]);
  139.                 break;
  140.         }
  141.     }
  142. }
  143.  
  144. //  Finds which player # has given GUID and returns that number
  145. //  Returns -1 if no match is found
  146. int getplayernumberfromguid(RakNetGUID id)
  147. {
  148.     for(int i=0; i<MAXNUMBEROFPLAYERS; i++)
  149.         if(guids[i]==id) return i;
  150.  
  151.     return -1;
  152. }
  153.  
  154. //  Assign a new player ID
  155. //  (once we've determined one doesn't exist with getplayernumberfromguid)
  156. //  Returns -1 if no unactive player found (we've maxed out on the number of players)
  157. int assignplayernumber()
  158. {
  159.     for(int i=0; i<MAXNUMBEROFPLAYERS; i++)
  160.         if(!players[i].active) return i;
  161.  
  162.     return -1;
  163. }
  164.  
  165. // Manage packets sent to client
  166. void clientplaying_managepackets()
  167. {
  168.     for (packet=rakPeer->Receive(); packet; rakPeer->DeallocatePacket(packet), packet=rakPeer->Receive())
  169.     {
  170.         switch(packet->data[0])
  171.         {
  172.             case ID_REMOTE_DISCONNECTION_NOTIFICATION:
  173.                 printf("Another client has disconnected.\n");
  174.                 break;
  175.             case ID_REMOTE_CONNECTION_LOST:
  176.                 printf("Another client has lost the connection.\n");
  177.                 break;
  178.             case ID_REMOTE_NEW_INCOMING_CONNECTION:
  179.                 printf("Another client has connected.\n");
  180.                 break;
  181.             case ID_CONNECTION_REQUEST_ACCEPTED:
  182.                 printf("Our connection request has been accepted.\n");
  183.                 break;                 
  184.             case ID_NEW_INCOMING_CONNECTION:
  185.                 printf("A connection is incoming.\n");
  186.                 break;
  187.             case ID_NO_FREE_INCOMING_CONNECTIONS:
  188.                 printf("The server is full.\n");
  189.                 break;
  190.             case ID_DISCONNECTION_NOTIFICATION:
  191.                 printf("We have been disconnected.\n");
  192.                 break;
  193.             case ID_CONNECTION_LOST:
  194.                 printf("Connection lost.\n");
  195.                 break;
  196.             default:
  197.                 printf("Message with identifier %i has arrived.\n", packet->data[0]);
  198.                 break;
  199.         }
  200.     }
  201. }
  202.  
  203. void sendtoserver(int type)
  204. {
  205.     RakNet::BitStream bitStream;
  206.     bitStream.Reset();
  207.  
  208.     if(type==ID_CLIENT_PLAYER_DATA)
  209.     {
  210.         bitStream.Write((MessageID)type);
  211.         bitStream.Write(requestedcharacter);
  212.     }
  213.     else if(type==ID_CLIENT_CHARACTER_DATA)
  214.     {
  215.         bitStream.Write((MessageID)type);
  216.         bitStream.Write(requestedcharacter);
  217.     }
  218.  
  219.  
  220.     rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_SEQUENCED, 0, UNASSIGNED_SYSTEM_ADDRESS, true);
  221. }
  222.  
  223. /*
  224. void sendtoserver(char ch)
  225. {
  226.     RakNet::BitStream bitStream;
  227.     bitStream.Reset();
  228.     bitStream.Write((MessageID)ID_USER_PACKET_ENUM);
  229.     bitStream.Write(ch);
  230.     rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_SEQUENCED, 0, UNASSIGNED_SYSTEM_ADDRESS, true);
  231. }
  232. */
  233. void sendtoallclients(char ch)
  234. {
  235.     RakNet::BitStream bitStream;
  236.     bitStream.Reset();
  237.     bitStream.Write((MessageID)ID_USER_PACKET_ENUM);
  238.     bitStream.Write(ch);
  239.  
  240.     for(int i=1; i<guidindex; i++)
  241.         rakPeer->Send(&bitStream, HIGH_PRIORITY, RELIABLE_SEQUENCED, 0, guids[i], false);
  242. }
  243.  
  244. void setupserver()
  245. {
  246.     rakPeer = RakNet::RakPeerInterface::GetInstance();
  247.     RakNet::SocketDescriptor socketDescriptor(60000,0);
  248.     rakPeer->Startup(32, &socketDescriptor, 1);
  249.     rakPeer->SetMaximumIncomingConnections(32);
  250.     addmessage("SERVER ID:");
  251.     addmessage(rakPeer->GetMyGUID().ToString());
  252. }
  253.  
  254. void connecttoserver()
  255. {
  256.     rakPeer = RakNet::RakPeerInterface::GetInstance();
  257.     RakNet::SocketDescriptor socketDescriptor(0,0);
  258.     rakPeer->Startup(32, &socketDescriptor, 1);
  259.     if(rakPeer->Connect("127.0.0.1",60000,0,0)!=CONNECTION_ATTEMPT_STARTED)
  260.     {
  261.         MessageBoxA(0,"Initial connection attempt to server failed.","Connection Error",0);
  262.         exit(1);
  263.     }
  264.     rakPeer->SetMaximumIncomingConnections(32);
  265.     addmessage("CLIENT ID:");
  266.     addmessage(rakPeer->GetMyGUID().ToString());
  267. }
  268.  
  269. void printmyip()
  270. {
  271.     rakPeer = RakNet::RakPeerInterface::GetInstance();
  272.     RakNet::SocketDescriptor socketDescriptor(60000,0);
  273.     rakPeer->Startup(32, &socketDescriptor, 1);
  274.     addmessage("MY IP APPEARS TO BE:");
  275.     addmessage(rakPeer->GetSystemAddressFromGuid(rakPeer->GetMyGUID()).ToString());
  276.     rakPeer->Shutdown(0,0,LOW_PRIORITY);
  277. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement