mirror of
https://github.com/DarkflameUniverse/DarkflameServer.git
synced 2025-10-11 01:48:07 +00:00
Public release of the DLU server code!
Have fun!
This commit is contained in:
114
thirdparty/raknet/Source/FullyConnectedMesh.cpp
vendored
Normal file
114
thirdparty/raknet/Source/FullyConnectedMesh.cpp
vendored
Normal file
@@ -0,0 +1,114 @@
|
||||
/// \file
|
||||
///
|
||||
/// This file is part of RakNet Copyright 2003 Kevin Jenkins.
|
||||
///
|
||||
/// Usage of RakNet is subject to the appropriate license agreement.
|
||||
/// Creative Commons Licensees are subject to the
|
||||
/// license found at
|
||||
/// http://creativecommons.org/licenses/by-nc/2.5/
|
||||
/// Single application licensees are subject to the license found at
|
||||
/// http://www.jenkinssoftware.com/SingleApplicationLicense.html
|
||||
/// Custom license users are subject to the terms therein.
|
||||
/// GPL license users are subject to the GNU General Public
|
||||
/// License as published by the Free
|
||||
/// Software Foundation; either version 2 of the License, or (at your
|
||||
/// option) any later version.
|
||||
|
||||
#include "FullyConnectedMesh.h"
|
||||
#include "RakPeerInterface.h"
|
||||
#include "MessageIdentifiers.h"
|
||||
#include "BitStream.h"
|
||||
#include "ConnectionGraph.h"
|
||||
#include "NatPunchthrough.h"
|
||||
#include <string.h>
|
||||
#include <assert.h>
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning( push )
|
||||
#endif
|
||||
|
||||
FullyConnectedMesh::FullyConnectedMesh()
|
||||
{
|
||||
pw=0;
|
||||
natPunchthrough=0;
|
||||
}
|
||||
|
||||
FullyConnectedMesh::~FullyConnectedMesh()
|
||||
{
|
||||
if (pw)
|
||||
rakFree(pw);
|
||||
}
|
||||
|
||||
void FullyConnectedMesh::Startup(const char *password, int _passwordLength)
|
||||
{
|
||||
if (pw)
|
||||
rakFree(pw);
|
||||
if (password)
|
||||
{
|
||||
pw = (char*) rakMalloc( _passwordLength );
|
||||
memcpy(pw, password, _passwordLength);
|
||||
passwordLength=_passwordLength;
|
||||
}
|
||||
else
|
||||
pw=0;
|
||||
|
||||
}
|
||||
|
||||
void FullyConnectedMesh::ConnectWithNatPunchthrough(NatPunchthrough *np, SystemAddress _facilitator)
|
||||
{
|
||||
natPunchthrough=np;
|
||||
facilitator=_facilitator;
|
||||
}
|
||||
|
||||
|
||||
void FullyConnectedMesh::OnShutdown(RakPeerInterface *peer)
|
||||
{
|
||||
(void) peer;
|
||||
}
|
||||
void FullyConnectedMesh::Update(RakPeerInterface *peer)
|
||||
{
|
||||
(void) peer;
|
||||
}
|
||||
|
||||
PluginReceiveResult FullyConnectedMesh::OnReceive(RakPeerInterface *peer, Packet *packet)
|
||||
{
|
||||
assert(packet);
|
||||
assert(peer);
|
||||
|
||||
switch (packet->data[0])
|
||||
{
|
||||
case ID_REMOTE_NEW_INCOMING_CONNECTION: // This comes from the connection graph plugin
|
||||
{
|
||||
RakNet::BitStream b(packet->data, packet->length, false);
|
||||
b.IgnoreBits(8);
|
||||
ConnectionGraphGroupID group1, group2;
|
||||
SystemAddress node1, node2;
|
||||
b.Read(node1);
|
||||
b.Read(group1);
|
||||
if (peer->IsConnected(node1,true)==false)
|
||||
{
|
||||
if (natPunchthrough)
|
||||
natPunchthrough->Connect(node1, pw, pw ? passwordLength : 0, facilitator);
|
||||
else
|
||||
peer->Connect(node1.ToString(false), node1.port, pw, pw ? passwordLength : 0);
|
||||
}
|
||||
b.Read(node2);
|
||||
b.Read(group2);
|
||||
if (peer->IsConnected(node2,true)==false)
|
||||
{
|
||||
if (natPunchthrough)
|
||||
natPunchthrough->Connect(node2, pw, pw ? passwordLength : 0, facilitator);
|
||||
else
|
||||
peer->Connect(node2.ToString(false), node2.port, pw, pw ? passwordLength : 0);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return RR_CONTINUE_PROCESSING;
|
||||
}
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#pragma warning( pop )
|
||||
#endif
|
Reference in New Issue
Block a user