mirror of
https://github.com/celisej567/mcpe.git
synced 2026-09-11 20:11:18 +03:00
* Initial commit.
:)
This commit is contained in:
221
thirdparty/raknet/PluginInterface2.cpp
vendored
Normal file
221
thirdparty/raknet/PluginInterface2.cpp
vendored
Normal file
@@ -0,0 +1,221 @@
|
||||
/*
|
||||
* 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;
|
||||
}
|
||||
Reference in New Issue
Block a user