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);
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