| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221 |
- /*
- * Copyright (c) 2014, Oculus VR, Inc.
- * All rights reserved.
- *
- * This source code is licensed under the BSD-style license found in the
- * LICENSE file in the root directory of this source tree. An additional grant
- * of patent rights can be found in the PATENTS file in the same directory.
- *
- */
- #include "PluginInterface2.h"
- #include "PacketizedTCP.h"
- #include "RakPeerInterface.h"
- #include "BitStream.h"
- using namespace RakNet;
- PluginInterface2::PluginInterface2()
- {
- rakPeerInterface=0;
- #if _RAKNET_SUPPORT_PacketizedTCP==1 && _RAKNET_SUPPORT_TCPInterface==1
- tcpInterface=0;
- #endif
- }
- PluginInterface2::~PluginInterface2()
- {
- }
- void PluginInterface2::SendUnified( const RakNet::BitStream * bitStream, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, bool broadcast )
- {
- if (rakPeerInterface)
- {
- rakPeerInterface->Send(bitStream,priority,reliability,orderingChannel,systemIdentifier,broadcast);
- return;
- }
- #if _RAKNET_SUPPORT_PacketizedTCP==1 && _RAKNET_SUPPORT_TCPInterface==1
- else if (tcpInterface)
- {
- tcpInterface->Send((const char*) bitStream->GetData(), bitStream->GetNumberOfBytesUsed(), systemIdentifier.systemAddress, broadcast);
- return;
- }
- #endif
- // Offline mode
- if (broadcast==false && systemIdentifier.rakNetGuid==GetMyGUIDUnified())
- {
- // Packet *packet = AllocatePacketUnified(bitStream->GetNumberOfBytesUsed());
- // memcpy(packet->data, bitStream->GetData(), bitStream->GetNumberOfBytesUsed());
- Packet packet;
- packet.bitSize=bitStream->GetNumberOfBitsUsed();
- packet.data=bitStream->GetData();
- packet.deleteData=false;
- packet.guid=UNASSIGNED_RAKNET_GUID;
- packet.length=bitStream->GetNumberOfBytesUsed();
- packet.systemAddress=UNASSIGNED_SYSTEM_ADDRESS;
- packet.wasGeneratedLocally=false;
- OnReceive(&packet);
- // DeallocPacketUnified(packet);
- Update();
- }
- }
- void PluginInterface2::SendUnified( const char * data, const int length, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, bool broadcast )
- {
- if (rakPeerInterface)
- {
- rakPeerInterface->Send(data, length, priority,reliability,orderingChannel,systemIdentifier,broadcast);
- return;
- }
- #if _RAKNET_SUPPORT_PacketizedTCP==1 && _RAKNET_SUPPORT_TCPInterface==1
- else if (tcpInterface)
- {
- tcpInterface->Send(data, length, systemIdentifier.systemAddress, broadcast);
- return;
- }
- #endif
- // Offline mode
- if (broadcast==false && systemIdentifier.rakNetGuid==GetMyGUIDUnified())
- {
- // Packet *packet = AllocatePacketUnified(bitStream->GetNumberOfBytesUsed());
- // memcpy(packet->data, bitStream->GetData(), bitStream->GetNumberOfBytesUsed());
- Packet packet;
- packet.bitSize=BYTES_TO_BITS(length);
- packet.data=(unsigned char*) data;
- packet.deleteData=false;
- packet.guid=UNASSIGNED_RAKNET_GUID;
- packet.length=length;
- packet.systemAddress=UNASSIGNED_SYSTEM_ADDRESS;
- packet.wasGeneratedLocally=false;
- OnReceive(&packet);
- // DeallocPacketUnified(packet);
- Update();
- }
- }
- Packet *PluginInterface2::AllocatePacketUnified(unsigned dataSize)
- {
- if (rakPeerInterface)
- {
- return rakPeerInterface->AllocatePacket(dataSize);
- }
- #if _RAKNET_SUPPORT_PacketizedTCP==1 && _RAKNET_SUPPORT_TCPInterface==1
- else if (tcpInterface)
- {
- return tcpInterface->AllocatePacket(dataSize);
- }
- #endif
- Packet *packet = RakNet::OP_NEW<Packet>(_FILE_AND_LINE_);
- packet->data = (unsigned char*) rakMalloc_Ex(dataSize, _FILE_AND_LINE_);
- packet->bitSize=BYTES_TO_BITS(dataSize);
- packet->deleteData=true;
- packet->guid=UNASSIGNED_RAKNET_GUID;
- packet->systemAddress=UNASSIGNED_SYSTEM_ADDRESS;
- packet->wasGeneratedLocally=false;
- return packet;
- }
- void PluginInterface2::PushBackPacketUnified(Packet *packet, bool pushAtHead)
- {
- if (rakPeerInterface)
- {
- rakPeerInterface->PushBackPacket(packet,pushAtHead);
- return;
- }
- #if _RAKNET_SUPPORT_PacketizedTCP==1 && _RAKNET_SUPPORT_TCPInterface==1
- else if (tcpInterface)
- {
- tcpInterface->PushBackPacket(packet,pushAtHead);
- return;
- }
- #endif
- OnReceive(packet);
- Update();
- }
- void PluginInterface2::DeallocPacketUnified(Packet *packet)
- {
- if (rakPeerInterface)
- {
- rakPeerInterface->DeallocatePacket(packet);
- return;
- }
- #if _RAKNET_SUPPORT_PacketizedTCP==1 && _RAKNET_SUPPORT_TCPInterface==1
- else if (tcpInterface)
- {
- tcpInterface->DeallocatePacket(packet);
- return;
- }
- #endif
- rakFree_Ex(packet->data, _FILE_AND_LINE_);
- RakNet::OP_DELETE(packet, _FILE_AND_LINE_);
- }
- bool PluginInterface2::SendListUnified( const char **data, const int *lengths, const int numParameters, PacketPriority priority, PacketReliability reliability, char orderingChannel, const AddressOrGUID systemIdentifier, bool broadcast )
- {
- if (rakPeerInterface)
- {
- return rakPeerInterface->SendList(data,lengths,numParameters,priority,reliability,orderingChannel,systemIdentifier,broadcast)!=0;
- }
- #if _RAKNET_SUPPORT_PacketizedTCP==1 && _RAKNET_SUPPORT_TCPInterface==1
- else if (tcpInterface)
- {
- return tcpInterface->SendList(data,(const unsigned int *) lengths,numParameters,systemIdentifier.systemAddress,broadcast );
- }
- #endif
- if (broadcast==false && systemIdentifier.rakNetGuid==GetMyGUIDUnified())
- {
- unsigned int totalLength=0;
- unsigned int lengthOffset;
- int i;
- for (i=0; i < numParameters; i++)
- {
- if (lengths[i]>0)
- totalLength+=lengths[i];
- }
- if (totalLength==0)
- return false;
- char *dataAggregate;
- dataAggregate = (char*) rakMalloc_Ex( (size_t) totalLength, _FILE_AND_LINE_ );
- if (dataAggregate==0)
- {
- notifyOutOfMemory(_FILE_AND_LINE_);
- return false;
- }
- for (i=0, lengthOffset=0; i < numParameters; i++)
- {
- if (lengths[i]>0)
- {
- memcpy(dataAggregate+lengthOffset, data[i], lengths[i]);
- lengthOffset+=lengths[i];
- }
- }
- SendUnified(dataAggregate, totalLength, priority, reliability,orderingChannel, systemIdentifier, broadcast);
- rakFree_Ex(dataAggregate, _FILE_AND_LINE_);
- return true;
- }
- return false;
- }
- void PluginInterface2::SetRakPeerInterface( RakPeerInterface *ptr )
- {
- rakPeerInterface=ptr;
- }
- #if _RAKNET_SUPPORT_TCPInterface==1
- void PluginInterface2::SetTCPInterface( TCPInterface *ptr )
- {
- tcpInterface=ptr;
- }
- #endif
- RakNetGUID PluginInterface2::GetMyGUIDUnified(void) const
- {
- if (rakPeerInterface)
- return rakPeerInterface->GetMyGUID();
- return UNASSIGNED_RAKNET_GUID;
- }
|