• Main Page
  • Related Pages
  • Modules
  • Namespaces
  • Classes
  • Files
  • File List
  • File Members

RakNetTransport2.cpp

Go to the documentation of this file.
00001 #include "RakNetTransport2.h"
00002 #include "RakNetworkFactory.h"
00003 #include "RakPeerInterface.h"
00004 #include "BitStream.h"
00005 #include "MessageIdentifiers.h"
00006 #include <stdio.h>
00007 #include <string.h>
00008 #include <stdarg.h>
00009 #include "LinuxStrings.h"
00010 
00011 #ifdef _MSC_VER
00012 #pragma warning( push )
00013 #endif
00014 
00015 RakNetTransport2::RakNetTransport2()
00016 {
00017 }
00018 RakNetTransport2::~RakNetTransport2()
00019 {
00020         Stop();
00021 }
00022 bool RakNetTransport2::Start(unsigned short port, bool serverMode)
00023 {
00024         (void) port;
00025         (void) serverMode;
00026         return true;
00027 }
00028 void RakNetTransport2::Stop(void)
00029 {
00030         newConnections.Clear(__FILE__, __LINE__);
00031         lostConnections.Clear(__FILE__, __LINE__);
00032         for (unsigned int i=0; i < packetQueue.Size(); i++)
00033         {
00034                 rakFree_Ex(packetQueue[i]->data,__FILE__,__LINE__);
00035                 RakNet::OP_DELETE(packetQueue[i],__FILE__,__LINE__);
00036         }
00037         packetQueue.Clear(__FILE__, __LINE__);
00038 }
00039 void RakNetTransport2::Send( SystemAddress systemAddress, const char *data, ... )
00040 {
00041         if (data==0 || data[0]==0) return;
00042 
00043         char text[REMOTE_MAX_TEXT_INPUT];
00044         va_list ap;
00045         va_start(ap, data);
00046         _vsnprintf(text, REMOTE_MAX_TEXT_INPUT, data, ap);
00047         va_end(ap);
00048         text[REMOTE_MAX_TEXT_INPUT-1]=0;
00049 
00050         RakNet::BitStream str;
00051         str.Write((MessageID)ID_TRANSPORT_STRING);
00052         str.Write(text, (int) strlen(text));
00053         str.Write((unsigned char) 0); // Null terminate the string
00054         rakPeerInterface->Send(&str, MEDIUM_PRIORITY, RELIABLE_ORDERED, 0, systemAddress, (systemAddress==UNASSIGNED_SYSTEM_ADDRESS)!=0);
00055 }
00056 void RakNetTransport2::CloseConnection( SystemAddress systemAddress )
00057 {
00058         rakPeerInterface->CloseConnection(systemAddress, true, 0);
00059 }
00060 Packet* RakNetTransport2::Receive( void )
00061 {
00062         if (packetQueue.Size()==0)
00063                 return 0;
00064         return packetQueue.Pop();
00065 }
00066 SystemAddress RakNetTransport2::HasNewIncomingConnection(void)
00067 {
00068         if (newConnections.Size())
00069                 return newConnections.Pop();
00070         return UNASSIGNED_SYSTEM_ADDRESS;
00071 }
00072 SystemAddress RakNetTransport2::HasLostConnection(void)
00073 {
00074         if (lostConnections.Size())
00075                 return lostConnections.Pop();
00076         return UNASSIGNED_SYSTEM_ADDRESS;
00077 }
00078 void RakNetTransport2::DeallocatePacket( Packet *packet )
00079 {
00080         rakFree_Ex(packet->data, __FILE__, __LINE__ );
00081         RakNet::OP_DELETE(packet, __FILE__, __LINE__ );
00082 }
00083 PluginReceiveResult RakNetTransport2::OnReceive(Packet *packet)
00084 {
00085         switch (packet->data[0])
00086         {
00087         case ID_TRANSPORT_STRING:
00088                 {
00089                         if (packet->length==sizeof(MessageID))
00090                                 return RR_STOP_PROCESSING_AND_DEALLOCATE;
00091 
00092                         Packet *p = RakNet::OP_NEW<Packet>(__FILE__,__LINE__);
00093                         *p=*packet;
00094                         p->bitSize-=8;
00095                         p->length--;
00096                         p->data=(unsigned char*) rakMalloc_Ex(p->length,__FILE__,__LINE__);
00097                         memcpy(p->data, packet->data+1, p->length);
00098                         packetQueue.Push(p, __FILE__, __LINE__ );
00099 
00100                 }
00101                 return RR_STOP_PROCESSING_AND_DEALLOCATE;
00102         }
00103         return RR_CONTINUE_PROCESSING;
00104 }
00105 void RakNetTransport2::OnClosedConnection(SystemAddress systemAddress, RakNetGUID rakNetGUID, PI2_LostConnectionReason lostConnectionReason )
00106 {
00107         (void) rakNetGUID;
00108         (void) lostConnectionReason;
00109         lostConnections.Push(systemAddress, __FILE__, __LINE__ );
00110 }
00111 void RakNetTransport2::OnNewConnection(SystemAddress systemAddress, RakNetGUID rakNetGUID, bool isIncoming)
00112 {
00113         (void) rakNetGUID;
00114         (void) isIncoming;
00115         newConnections.Push(systemAddress, __FILE__, __LINE__ );
00116 }
00117 #ifdef _MSC_VER
00118 #pragma warning( pop )
00119 #endif

Generated on Thu Sep 30 2010 01:27:26 for RakNet by  doxygen 1.7.1