This commit is contained in:
2025-11-24 14:19:51 +05:30
commit f5c1412b28
6734 changed files with 1527575 additions and 0 deletions

View File

@ -0,0 +1,11 @@
/*
* Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
*
*/
// Code is in Lobby2Client_Steam_Impl.cpp

View File

@ -0,0 +1,50 @@
/*
* Original work: Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
*
*
* Modified work: Copyright (c) 2017, SLikeSoft UG (haftungsbeschränkt)
*
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
* license found in the license.txt file in the root directory of this source tree.
*/
#ifndef __LOBBY_2_CLIENT_STEAM_H
#define __LOBBY_2_CLIENT_STEAM_H
#include "Lobby2Plugin.h"
#include "slikenet/DS_OrderedList.h"
#include "slikenet/types.h"
namespace SLNet
{
// This is a pure interface for Lobby2Client_SteamImpl
class RAK_DLL_EXPORT Lobby2Client_Steam : public SLNet::Lobby2Plugin
{
public:
// GetInstance() and DestroyInstance(instance*)
STATIC_FACTORY_DECLARATIONS(Lobby2Client_Steam)
virtual ~Lobby2Client_Steam() {}
virtual void SendMsg(Lobby2Message *msg)=0;
virtual void GetRoomMembers(DataStructures::OrderedList<uint64_t, uint64_t> &_roomMembers)=0;
virtual const char * GetRoomMemberName(uint64_t memberId)=0;
virtual bool IsRoomOwner(const uint64_t cSteamID)=0;
virtual bool IsInRoom(void) const=0;
virtual uint64_t GetNumRoomMembers(const uint64_t roomid)=0;
virtual uint64_t GetMyUserID(void)=0;
virtual const char* GetMyUserPersonalName(void)=0;
virtual uint64_t GetRoomID(void) const=0;
protected:
};
};
#endif

View File

@ -0,0 +1,621 @@
/*
* Original work: Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
*
*
* Modified work: Copyright (c) 2017-2020, SLikeSoft UG (haftungsbeschränkt)
*
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
* license found in the license.txt file in the root directory of this source tree.
*/
#include "Lobby2Client_Steam_Impl.h"
#include "Lobby2Message_Steam.h"
#include <stdlib.h>
#include "slikenet/NativeTypes.h"
#include "slikenet/MTUSize.h"
#include <windows.h>
using namespace SLNet;
STATIC_FACTORY_DEFINITIONS(Lobby2Client_Steam,Lobby2Client_Steam_Impl)
DEFINE_MULTILIST_PTR_TO_MEMBER_COMPARISONS(Lobby2Message,uint64_t,requestId);
int Lobby2Client_Steam_Impl::SystemAddressAndRoomMemberComp( const SystemAddress &key, const Lobby2Client_Steam_Impl::RoomMember &data )
{
if (key<data.systemAddress)
return -1;
if (key==data.systemAddress)
return 0;
return 1;
}
int Lobby2Client_Steam_Impl::SteamIDAndRoomMemberComp( const uint64_t &key, const Lobby2Client_Steam_Impl::RoomMember &data )
{
if (key<data.steamIDRemote)
return -1;
if (key==data.steamIDRemote)
return 0;
return 1;
}
Lobby2Client_Steam_Impl::Lobby2Client_Steam_Impl() :
m_CallbackLobbyDataUpdated(nullptr, nullptr),
m_CallbackPersonaStateChange(nullptr, nullptr),
m_CallbackLobbyDataUpdate(nullptr, nullptr),
m_CallbackChatDataUpdate(nullptr, nullptr),
m_CallbackChatMessageUpdate(nullptr, nullptr),
m_CallbackP2PSessionRequest(nullptr, nullptr),
m_CallbackP2PSessionConnectFail(nullptr, nullptr)
{
// Must recompile RakNet with MAXIMUM_MTU_SIZE set to 1200 in the preprocessor settings
RakAssert(MAXIMUM_MTU_SIZE<=1200);
roomId=0;
m_CallbackLobbyDataUpdated.Register(this, &Lobby2Client_Steam_Impl::OnLobbyDataUpdatedCallback);
m_CallbackPersonaStateChange.Register(this, &Lobby2Client_Steam_Impl::OnPersonaStateChange);
m_CallbackLobbyDataUpdate.Register(this, &Lobby2Client_Steam_Impl::OnLobbyDataUpdate);
m_CallbackChatDataUpdate.Register(this, &Lobby2Client_Steam_Impl::OnLobbyChatUpdate);
m_CallbackChatMessageUpdate.Register(this, &Lobby2Client_Steam_Impl::OnLobbyChatMessage);
m_CallbackP2PSessionRequest.Register(this, &Lobby2Client_Steam_Impl::OnP2PSessionRequest);
m_CallbackP2PSessionConnectFail.Register(this, &Lobby2Client_Steam_Impl::OnP2PSessionConnectFail);
}
Lobby2Client_Steam_Impl::~Lobby2Client_Steam_Impl()
{
}
void Lobby2Client_Steam_Impl::SendMsg(Lobby2Message *msg)
{
if (msg->ClientImpl(this))
{
for (unsigned long i=0; i < callbacks.Size(); i++)
{
if (msg->callbackId==(uint32_t)-1 || msg->callbackId==callbacks[i]->callbackId)
msg->CallCallback(callbacks[i]);
}
}
else
{
// Won't be deleted by the user's call to Deref.
msg->resultCode=L2RC_PROCESSING;
msg->AddRef();
PushDeferredCallback(msg);
}
}
void Lobby2Client_Steam_Impl::Update(void)
{
SteamAPI_RunCallbacks();
/*
// sending data
// must be a handle to a connected socket
// data is all sent via UDP, and thus send sizes are limited to 1200 bytes; after this, many routers will start dropping packets
// use the reliable flag with caution; although the resend rate is pretty aggressive,
// it can still cause stalls in receiving data (like TCP)
virtual bool SendDataOnSocket( SNetSocket_t hSocket, void *pubData, uint32 cubData, bool bReliable ) = 0;
// receiving data
// returns false if there is no data remaining
// fills out *pcubMsgSize with the size of the next message, in bytes
virtual bool IsDataAvailableOnSocket( SNetSocket_t hSocket, uint32 *pcubMsgSize ) = 0;
// fills in pubDest with the contents of the message
// messages are always complete, of the same size as was sent (i.e. packetized, not streaming)
// if *pcubMsgSize < cubDest, only partial data is written
// returns false if no data is available
virtual bool RetrieveDataFromSocket( SNetSocket_t hSocket, void *pubDest, uint32 cubDest, uint32 *pcubMsgSize ) = 0;
*/
}
void Lobby2Client_Steam_Impl::PushDeferredCallback(Lobby2Message *msg)
{
deferredCallbacks.Push(msg, msg->requestId, _FILE_AND_LINE_ );
}
void Lobby2Client_Steam_Impl::CallCBWithResultCode(Lobby2Message *msg, Lobby2ResultCode rc)
{
if (msg)
{
msg->resultCode=rc;
for (unsigned long i=0; i < callbacks.Size(); i++)
{
if (msg->callbackId==(uint32_t)-1 || msg->callbackId==callbacks[i]->callbackId)
msg->CallCallback(callbacks[i]);
}
}
}
void Lobby2Client_Steam_Impl::OnLobbyMatchListCallback( LobbyMatchList_t *pCallback, bool bIOFailure )
{
(void) bIOFailure;
uint32_t i;
for (i=0; i < deferredCallbacks.GetSize(); i++)
{
// Get any instance of Console_SearchRooms
if (deferredCallbacks[i]->GetID()==L2MID_Console_SearchRooms)
{
Console_SearchRooms_Steam *callbackResult = (Console_SearchRooms_Steam *) deferredCallbacks[i];
// iterate the returned lobbies with GetLobbyByIndex(), from values 0 to m_nLobbiesMatching-1
// lobbies are returned in order of closeness to the user, so add them to the list in that order
for ( uint32 iLobby = 0; iLobby < pCallback->m_nLobbiesMatching; iLobby++ )
{
CSteamID steamId = SteamMatchmaking()->GetLobbyByIndex( iLobby );
callbackResult->roomIds.Push(steamId.ConvertToUint64(), _FILE_AND_LINE_ );
SLNet::RakString s = SteamMatchmaking()->GetLobbyData( steamId, "name" );
callbackResult->roomNames.Push(s, _FILE_AND_LINE_ );
}
CallCBWithResultCode(callbackResult, L2RC_SUCCESS);
msgFactory->Dealloc(callbackResult);
deferredCallbacks.RemoveAtIndex(i);
break;
}
}
}
void Lobby2Client_Steam_Impl::OnLobbyDataUpdatedCallback( LobbyDataUpdate_t *pCallback )
{
uint32_t i;
for (i=0; i < deferredCallbacks.GetSize(); i++)
{
if (deferredCallbacks[i]->GetID()==L2MID_Console_GetRoomDetails)
{
Console_GetRoomDetails_Steam *callbackResult = (Console_GetRoomDetails_Steam *) deferredCallbacks[i];
if (callbackResult->roomId==pCallback->m_ulSteamIDLobby)
{
const char *pchLobbyName = SteamMatchmaking()->GetLobbyData( pCallback->m_ulSteamIDLobby, "name" );
if ( pchLobbyName[0] )
{
callbackResult->roomName=pchLobbyName;
}
if (pCallback->m_bSuccess)
CallCBWithResultCode(callbackResult, L2RC_SUCCESS);
else
CallCBWithResultCode(callbackResult, L2RC_Console_GetRoomDetails_NO_ROOMS_FOUND);
msgFactory->Dealloc(callbackResult);
deferredCallbacks.RemoveAtIndex(i);
break;
}
}
}
Console_GetRoomDetails_Steam notification;
const char *pchLobbyName = SteamMatchmaking()->GetLobbyData( pCallback->m_ulSteamIDLobby, "name" );
if ( pchLobbyName[0] )
{
notification.roomName=pchLobbyName;
}
notification.roomId=pCallback->m_ulSteamIDLobby;
CallCBWithResultCode(&notification, L2RC_SUCCESS);
}
void Lobby2Client_Steam_Impl::OnLobbyCreated( LobbyCreated_t *pCallback, bool bIOFailure )
{
(void) bIOFailure;
uint32_t i;
for (i=0; i < deferredCallbacks.GetSize(); i++)
{
if (deferredCallbacks[i]->GetID()==L2MID_Console_CreateRoom)
{
Console_CreateRoom_Steam *callbackResult = (Console_CreateRoom_Steam *) deferredCallbacks[i];
callbackResult->roomId=pCallback->m_ulSteamIDLobby;
SteamMatchmaking()->SetLobbyData( callbackResult->roomId, "name", callbackResult->roomName.C_String() );
roomId=pCallback->m_ulSteamIDLobby;
printf("\nNumber of Steam Lobby Members:%i in Lobby Name:%s\n", SteamMatchmaking()->GetNumLobbyMembers(roomId), callbackResult->roomName.C_String());
RoomMember roomMember;
roomMember.steamIDRemote=SteamMatchmaking()->GetLobbyOwner(roomId).ConvertToUint64();
roomMember.systemAddress.address.addr4.sin_addr.s_addr=nextFreeSystemAddress++;
roomMember.systemAddress.SetPortHostOrder(STEAM_UNUSED_PORT);
roomMembersByAddr.Insert(roomMember.systemAddress,roomMember,true,_FILE_AND_LINE_);
roomMembersById.Insert(roomMember.steamIDRemote,roomMember,true,_FILE_AND_LINE_);
callbackResult->extendedResultCode=pCallback->m_eResult;
if (pCallback->m_eResult==k_EResultOK)
{
CallCBWithResultCode(callbackResult, L2RC_SUCCESS);
}
else
{
CallCBWithResultCode(callbackResult, L2RC_GENERAL_ERROR);
}
msgFactory->Dealloc(callbackResult);
deferredCallbacks.RemoveAtIndex(i);
// Commented out: Do not send the notification for yourself
// CallRoomCallbacks();
break;
}
}
}
void Lobby2Client_Steam_Impl::OnLobbyJoined( LobbyEnter_t *pCallback, bool bIOFailure )
{
(void) bIOFailure;
uint32_t i;
for (i=0; i < deferredCallbacks.GetSize(); i++)
{
if (deferredCallbacks[i]->GetID()==L2MID_Console_JoinRoom)
{
Console_JoinRoom_Steam *callbackResult = (Console_JoinRoom_Steam *) deferredCallbacks[i];
if (pCallback->m_EChatRoomEnterResponse==k_EChatRoomEnterResponseSuccess)
{
roomId=pCallback->m_ulSteamIDLobby;
CallCBWithResultCode(callbackResult, L2RC_SUCCESS);
// First push to prevent being notified of ourselves
RoomMember roomMember;
roomMember.steamIDRemote=SteamUser()->GetSteamID().ConvertToUint64();
roomMember.systemAddress.address.addr4.sin_addr.s_addr=nextFreeSystemAddress++;
roomMember.systemAddress.SetPortHostOrder(STEAM_UNUSED_PORT);
roomMembersByAddr.Insert(roomMember.systemAddress,roomMember,true,_FILE_AND_LINE_);
roomMembersById.Insert(roomMember.steamIDRemote,roomMember,true,_FILE_AND_LINE_);
CallRoomCallbacks();
// In case the asynch lobby update didn't get it fast enough
uint64_t myId64=SteamUser()->GetSteamID().ConvertToUint64();
if (roomMembersById.HasData(myId64)==false)
{
roomMember.steamIDRemote=SteamMatchmaking()->GetLobbyOwner(roomId).ConvertToUint64();
roomMember.systemAddress.address.addr4.sin_addr.s_addr=nextFreeSystemAddress++;
roomMember.systemAddress.SetPortHostOrder(STEAM_UNUSED_PORT);
roomMembersByAddr.Insert(roomMember.systemAddress,roomMember,true,_FILE_AND_LINE_);
roomMembersById.Insert(roomMember.steamIDRemote,roomMember,true,_FILE_AND_LINE_);
}
}
else
{
CallCBWithResultCode(callbackResult, L2RC_Console_JoinRoom_NO_SUCH_ROOM);
}
msgFactory->Dealloc(callbackResult);
deferredCallbacks.RemoveAtIndex(i);
break;
}
}
}
bool Lobby2Client_Steam_Impl::IsCommandRunning( Lobby2MessageID msgId )
{
uint32_t i;
for (i=0; i < deferredCallbacks.GetSize(); i++)
{
if (deferredCallbacks[i]->GetID()==msgId)
{
return true;
}
}
return false;
}
void Lobby2Client_Steam_Impl::OnPersonaStateChange( PersonaStateChange_t *pCallback )
{
// callbacks are broadcast to all listeners, so we'll get this for every friend who changes state
// so make sure the user is in the lobby before acting
if ( !SteamFriends()->IsUserInSource( pCallback->m_ulSteamID, roomId ) )
return;
if ((pCallback->m_nChangeFlags & k_EPersonaChangeNameFirstSet) ||
(pCallback->m_nChangeFlags & k_EPersonaChangeName))
{
Notification_Friends_StatusChange_Steam notification;
notification.friendId=pCallback->m_ulSteamID;
const char *pchName = SteamFriends()->GetFriendPersonaName( notification.friendId );
notification.friendNewName=pchName;
CallCBWithResultCode(&notification, L2RC_SUCCESS);
}
}
void Lobby2Client_Steam_Impl::OnLobbyDataUpdate( LobbyDataUpdate_t *pCallback )
{
// callbacks are broadcast to all listeners, so we'll get this for every lobby we're requesting
if ( roomId != pCallback->m_ulSteamIDLobby )
return;
Notification_Console_UpdateRoomParameters_Steam notification;
notification.roomId=roomId;
notification.roomNewName=SteamMatchmaking()->GetLobbyData( roomId, "name" );
if (pCallback->m_bSuccess)
CallCBWithResultCode(&notification, L2RC_SUCCESS);
else
CallCBWithResultCode(&notification, L2RC_Console_GetRoomDetails_NO_ROOMS_FOUND);
}
void Lobby2Client_Steam_Impl::OnLobbyChatUpdate( LobbyChatUpdate_t *pCallback )
{
// callbacks are broadcast to all listeners, so we'll get this for every lobby we're requesting
if ( roomId != pCallback->m_ulSteamIDLobby )
return;
// Purpose: Handles users in the lobby joining or leaving ??????
CallRoomCallbacks();
}
void Lobby2Client_Steam_Impl::OnLobbyChatMessage( LobbyChatMsg_t *pCallback )
{
CSteamID speaker;
EChatEntryType entryType;
char data[2048];
int cubData=sizeof(data);
SteamMatchmaking()->GetLobbyChatEntry( roomId, pCallback->m_iChatID, &speaker, data, cubData, &entryType);
if (entryType==k_EChatEntryTypeChatMsg)
{
Notification_Console_RoomChatMessage_Steam notification;
notification.message=data;
CallCBWithResultCode(&notification, L2RC_SUCCESS);
}
}
void Lobby2Client_Steam_Impl::GetRoomMembers(DataStructures::OrderedList<uint64_t, uint64_t> &_roomMembers)
{
_roomMembers.Clear(true,_FILE_AND_LINE_);
int cLobbyMembers = SteamMatchmaking()->GetNumLobbyMembers( roomId );
for ( int i = 0; i < cLobbyMembers; i++ )
{
CSteamID steamIDLobbyMember = SteamMatchmaking()->GetLobbyMemberByIndex( roomId, i ) ;
uint64_t memberid=steamIDLobbyMember.ConvertToUint64();
_roomMembers.Insert(memberid,memberid,true,_FILE_AND_LINE_);
}
}
const char * Lobby2Client_Steam_Impl::GetRoomMemberName(uint64_t memberId)
{
return SteamFriends()->GetFriendPersonaName( memberId );
}
bool Lobby2Client_Steam_Impl::IsRoomOwner(const uint64_t cSteamID)
{
if(SteamUser()->GetSteamID() == SteamMatchmaking()->GetLobbyOwner(cSteamID))
return true;
return false;
}
bool Lobby2Client_Steam_Impl::IsInRoom(void) const
{
return roomMembersById.Size() > 0;
}
void Lobby2Client_Steam_Impl::CallRoomCallbacks()
{
DataStructures::OrderedList<uint64_t,uint64_t> currentMembers;
GetRoomMembers(currentMembers);
DataStructures::OrderedList<uint64_t, RoomMember, SteamIDAndRoomMemberComp> updatedRoomMembers;
bool anyChanges=false;
unsigned int currentMemberIndex=0, oldMemberIndex=0;
while (currentMemberIndex < currentMembers.Size() && oldMemberIndex < roomMembersById.Size())
{
if (currentMembers[currentMemberIndex]<roomMembersById[oldMemberIndex].steamIDRemote)
{
RoomMember roomMember;
roomMember.steamIDRemote=currentMembers[currentMemberIndex];
roomMember.systemAddress.address.addr4.sin_addr.s_addr=nextFreeSystemAddress++;
roomMember.systemAddress.SetPortHostOrder(STEAM_UNUSED_PORT);
updatedRoomMembers.Insert(roomMember.steamIDRemote,roomMember,true,_FILE_AND_LINE_);
anyChanges=true;
// new member
NotifyNewMember(currentMembers[currentMemberIndex], roomMember.systemAddress);
currentMemberIndex++;
}
else if (currentMembers[currentMemberIndex]>roomMembersById[oldMemberIndex].steamIDRemote)
{
anyChanges=true;
// dropped member
NotifyDroppedMember(roomMembersById[oldMemberIndex].steamIDRemote, roomMembersById[oldMemberIndex].systemAddress);
oldMemberIndex++;
}
else
{
updatedRoomMembers.Insert(roomMembersById[oldMemberIndex].steamIDRemote,roomMembersById[oldMemberIndex],true,_FILE_AND_LINE_);
currentMemberIndex++;
oldMemberIndex++;
}
}
while (oldMemberIndex < roomMembersById.Size())
{
anyChanges=true;
// dropped member
NotifyDroppedMember(roomMembersById[oldMemberIndex].steamIDRemote, roomMembersById[oldMemberIndex].systemAddress);
oldMemberIndex++;
}
while (currentMemberIndex < currentMembers.Size())
{
RoomMember roomMember;
roomMember.steamIDRemote=currentMembers[currentMemberIndex];
roomMember.systemAddress.address.addr4.sin_addr.s_addr=nextFreeSystemAddress++;
roomMember.systemAddress.SetPortHostOrder(STEAM_UNUSED_PORT);
updatedRoomMembers.Insert(roomMember.steamIDRemote,roomMember,true,_FILE_AND_LINE_);
anyChanges=true;
// new member
NotifyNewMember(currentMembers[currentMemberIndex], roomMember.systemAddress);
currentMemberIndex++;
}
if (anyChanges)
{
roomMembersById=updatedRoomMembers;
roomMembersByAddr.Clear(true, _FILE_AND_LINE_);
for (currentMemberIndex=0; currentMemberIndex < roomMembersById.Size(); currentMemberIndex++)
{
roomMembersByAddr.Insert(roomMembersById[currentMemberIndex].systemAddress, roomMembersById[currentMemberIndex], true, _FILE_AND_LINE_);
}
}
}
void Lobby2Client_Steam_Impl::NotifyNewMember(uint64_t memberId, SystemAddress remoteSystem)
{
// const char *pchName = SteamFriends()->GetFriendPersonaName( memberId );
Notification_Console_MemberJoinedRoom_Steam notification;
notification.roomId=roomId;
notification.srcMemberId=memberId;
notification.memberName=SteamFriends()->GetFriendPersonaName( memberId );
notification.remoteSystem=remoteSystem;
CallCBWithResultCode(&notification, L2RC_SUCCESS);
}
void Lobby2Client_Steam_Impl::NotifyDroppedMember(uint64_t memberId, SystemAddress remoteSystem)
{
/// const char *pchName = SteamFriends()->GetFriendPersonaName( memberId );
Notification_Console_MemberLeftRoom_Steam notification;
notification.roomId=roomId;
notification.srcMemberId=memberId;
notification.memberName=SteamFriends()->GetFriendPersonaName( memberId );
notification.remoteSystem=remoteSystem;
CallCBWithResultCode(&notification, L2RC_SUCCESS);
unsigned int i;
bool objectExists;
i = roomMembersById.GetIndexFromKey(memberId, &objectExists);
if (objectExists)
{
rakPeerInterface->CloseConnection(roomMembersById[i].systemAddress,false);
// Is this necessary?
SteamNetworking()->CloseP2PSessionWithUser( memberId );
}
}
void Lobby2Client_Steam_Impl::ClearRoom(void)
{
roomId=0;
if (SteamNetworking())
{
for (unsigned int i=0; i < roomMembersById.Size(); i++)
{
SteamNetworking()->CloseP2PSessionWithUser( roomMembersById[i].steamIDRemote );
}
}
roomMembersById.Clear(true,_FILE_AND_LINE_);
roomMembersByAddr.Clear(true,_FILE_AND_LINE_);
}
void Lobby2Client_Steam_Impl::OnP2PSessionRequest( P2PSessionRequest_t *pCallback )
{
// we'll accept a connection from anyone
SteamNetworking()->AcceptP2PSessionWithUser( pCallback->m_steamIDRemote );
}
void Lobby2Client_Steam_Impl::OnP2PSessionConnectFail( P2PSessionConnectFail_t *pCallback )
{
(void) pCallback;
// we've sent a packet to the user, but it never got through
// we can just use the normal timeout
}
void Lobby2Client_Steam_Impl::NotifyLeaveRoom(void)
{
ClearRoom();
}
int Lobby2Client_Steam_Impl::RakNetSendTo( const char *data, int length, const SystemAddress &systemAddress )
{
bool objectExists;
unsigned int i = roomMembersByAddr.GetIndexFromKey(systemAddress, &objectExists);
if (objectExists)
{
if (SteamNetworking()->SendP2PPacket(roomMembersByAddr[i].steamIDRemote, data, length, k_EP2PSendUnreliable))
return length;
else
return 0;
}
else if (systemAddress.GetPort()!=STEAM_UNUSED_PORT)
{
// return SocketLayer::SendTo_PC(s,data,length,systemAddress,_FILE_AND_LINE_);
return -1;
}
return 0;
}
int Lobby2Client_Steam_Impl::RakNetRecvFrom( char dataOut[ MAXIMUM_MTU_SIZE ], SystemAddress *senderOut, bool calledFromMainThread)
{
(void) calledFromMainThread;
uint32 pcubMsgSize;
if (SteamNetworking() && SteamNetworking()->IsP2PPacketAvailable(&pcubMsgSize))
{
CSteamID psteamIDRemote;
if (SteamNetworking()->ReadP2PPacket(dataOut, MAXIMUM_MTU_SIZE, &pcubMsgSize, &psteamIDRemote))
{
uint64_t steamIDRemote64=psteamIDRemote.ConvertToUint64();
unsigned int i;
bool objectExists;
i = roomMembersById.GetIndexFromKey(steamIDRemote64, &objectExists);
if (objectExists)
{
*senderOut=roomMembersById[i].systemAddress;
}
return pcubMsgSize;
}
}
return 0;
}
void Lobby2Client_Steam_Impl::OnRakPeerShutdown(void)
{
ClearRoom();
}
void Lobby2Client_Steam_Impl::OnClosedConnection(const SystemAddress &systemAddress, RakNetGUID rakNetGUID, PI2_LostConnectionReason lostConnectionReason )
{
(void) lostConnectionReason;
(void) rakNetGUID;
bool objectExists;
unsigned int i = roomMembersByAddr.GetIndexFromKey(systemAddress, &objectExists);
if (objectExists)
{
uint64_t steamIDRemote = roomMembersByAddr[i].steamIDRemote;
SteamNetworking()->CloseP2PSessionWithUser( steamIDRemote );
roomMembersByAddr.RemoveAtIndex(i);
i = roomMembersById.GetIndexFromKey(steamIDRemote, &objectExists);
RakAssert(objectExists);
roomMembersById.RemoveAtIndex(i);
}
}
void Lobby2Client_Steam_Impl::OnFailedConnectionAttempt(Packet *packet, PI2_FailedConnectionAttemptReason failedConnectionAttemptReason)
{
(void) failedConnectionAttemptReason;
bool objectExists;
unsigned int i = roomMembersByAddr.GetIndexFromKey(packet->systemAddress, &objectExists);
if (objectExists)
{
uint64_t steamIDRemote = roomMembersByAddr[i].steamIDRemote;
SteamNetworking()->CloseP2PSessionWithUser( steamIDRemote );
roomMembersByAddr.RemoveAtIndex(i);
i = roomMembersById.GetIndexFromKey(steamIDRemote, &objectExists);
RakAssert(objectExists);
roomMembersById.RemoveAtIndex(i);
}
}
void Lobby2Client_Steam_Impl::OnAttach(void)
{
nextFreeSystemAddress=(uint32_t) rakPeerInterface->GetMyGUID().g;
// If this asserts, call RakPeer::Startup() before attaching Lobby2Client_Steam
DataStructures::List<RakNetSocket2* > sockets;
rakPeerInterface->GetSockets(sockets);
RakAssert(sockets.Size());
((RNS2_Windows*)sockets[0])->SetSocketLayerOverride(this);
}
void Lobby2Client_Steam_Impl::OnDetach(void)
{
DataStructures::List<RakNetSocket2* > sockets;
rakPeerInterface->GetSockets(sockets);
RakAssert(sockets.Size());
((RNS2_Windows*)sockets[0])->SetSocketLayerOverride(nullptr);
}

View File

@ -0,0 +1,115 @@
/*
* Original work: Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
*
*
* Modified work: Copyright (c) 2017, SLikeSoft UG (haftungsbeschränkt)
*
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
* license found in the license.txt file in the root directory of this source tree.
*/
#ifndef __LOBBY_2_CLIENT_STEAM_IMPL_H
#define __LOBBY_2_CLIENT_STEAM_IMPL_H
#pragma warning( push )
#pragma warning(disable:4127) // conditional expression is constant (with Steamworks 1.23a)
#include "steam_api.h"
#pragma warning( pop )
#include "Lobby2Client_Steam.h"
#include "slikenet/DS_Multilist.h"
#include "slikenet/SocketLayer.h"
#include "slikenet/DS_OrderedList.h"
namespace SLNet
{
struct Lobby2Message;
#define STEAM_UNUSED_PORT 1
class RAK_DLL_EXPORT Lobby2Client_Steam_Impl : public Lobby2Client_Steam, public SocketLayerOverride
{
public:
Lobby2Client_Steam_Impl();
virtual ~Lobby2Client_Steam_Impl();
/// Send a command to the server
/// \param[in] msg The message that represents the command
virtual void SendMsg(Lobby2Message *msg);
// Base class implementation
virtual void Update(void);
virtual void OnLobbyMatchListCallback( LobbyMatchList_t *pCallback, bool bIOFailure );
virtual void OnLobbyCreated( LobbyCreated_t *pCallback, bool bIOFailure );
virtual void OnLobbyJoined( LobbyEnter_t *pCallback, bool bIOFailure );
virtual bool IsCommandRunning( Lobby2MessageID msgId );
virtual void GetRoomMembers(DataStructures::OrderedList<uint64_t, uint64_t> &_roomMembers);
virtual const char * GetRoomMemberName(uint64_t memberId);
virtual bool IsRoomOwner(const uint64_t cSteamID);
virtual bool IsInRoom(void) const;
virtual uint64_t GetNumRoomMembers(const uint64_t roomid){return SteamMatchmaking()->GetNumLobbyMembers(roomid);}
virtual uint64_t GetMyUserID(void){return SteamUser()->GetSteamID().ConvertToUint64();}
virtual const char* GetMyUserPersonalName(void) {return SteamFriends()->GetPersonaName();}
virtual void NotifyLeaveRoom(void);
// Returns 0 if none
virtual uint64_t GetRoomID(void) const {return roomId;}
/// Called when SendTo would otherwise occur.
virtual int RakNetSendTo( const char *data, int length, const SystemAddress &systemAddress );
/// Called when RecvFrom would otherwise occur. Return number of bytes read. Write data into dataOut
virtual int RakNetRecvFrom( char dataOut[ MAXIMUM_MTU_SIZE ], SystemAddress *senderOut, bool calledFromMainThread);
virtual void OnRakPeerShutdown(void);
virtual void OnClosedConnection(const SystemAddress &systemAddress, RakNetGUID rakNetGUID, PI2_LostConnectionReason lostConnectionReason );
virtual void OnFailedConnectionAttempt(Packet *packet, PI2_FailedConnectionAttemptReason failedConnectionAttemptReason);
virtual void OnAttach(void);
virtual void OnDetach(void);
struct RoomMember
{
SystemAddress systemAddress;
uint64_t steamIDRemote;
};
static int SystemAddressAndRoomMemberComp( const SystemAddress &key, const RoomMember &data );
static int SteamIDAndRoomMemberComp( const uint64_t &key, const RoomMember &data );
protected:
void CallCBWithResultCode(Lobby2Message *msg, Lobby2ResultCode rc);
void PushDeferredCallback(Lobby2Message *msg);
void CallRoomCallbacks(void);
void NotifyNewMember(uint64_t memberId, SystemAddress remoteSystem);
void NotifyDroppedMember(uint64_t memberId, SystemAddress remoteSystem);
void CallCompletedCallbacks(void);
STEAM_CALLBACK( Lobby2Client_Steam_Impl, OnLobbyDataUpdatedCallback, LobbyDataUpdate_t, m_CallbackLobbyDataUpdated );
STEAM_CALLBACK( Lobby2Client_Steam_Impl, OnPersonaStateChange, PersonaStateChange_t, m_CallbackPersonaStateChange );
STEAM_CALLBACK( Lobby2Client_Steam_Impl, OnLobbyDataUpdate, LobbyDataUpdate_t, m_CallbackLobbyDataUpdate );
STEAM_CALLBACK( Lobby2Client_Steam_Impl, OnLobbyChatUpdate, LobbyChatUpdate_t, m_CallbackChatDataUpdate );
STEAM_CALLBACK( Lobby2Client_Steam_Impl, OnLobbyChatMessage, LobbyChatMsg_t, m_CallbackChatMessageUpdate );
STEAM_CALLBACK( Lobby2Client_Steam_Impl, OnP2PSessionRequest, P2PSessionRequest_t, m_CallbackP2PSessionRequest );
STEAM_CALLBACK( Lobby2Client_Steam_Impl, OnP2PSessionConnectFail, P2PSessionConnectFail_t, m_CallbackP2PSessionConnectFail );
DataStructures::Multilist<ML_UNORDERED_LIST, Lobby2Message *, uint64_t > deferredCallbacks;
uint64_t roomId;
DataStructures::OrderedList<SystemAddress, RoomMember, SystemAddressAndRoomMemberComp> roomMembersByAddr;
DataStructures::OrderedList<uint64_t, RoomMember, SteamIDAndRoomMemberComp> roomMembersById;
DataStructures::Multilist<ML_ORDERED_LIST, uint64_t> rooms;
void ClearRoom(void);
uint32_t nextFreeSystemAddress;
};
};
#endif

View File

@ -0,0 +1,150 @@
/*
* Original work: Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
*
*
* Modified work: Copyright (c) 2017, SLikeSoft UG (haftungsbeschränkt)
*
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
* license found in the license.txt file in the root directory of this source tree.
*/
#include "Lobby2Message_Steam.h"
#pragma warning( push )
#pragma warning(disable:4127) // conditional expression is constant (with Steamworks 1.23a)
#include "steam_api.h"
#pragma warning( pop )
#include "Lobby2Client_Steam_Impl.h"
using namespace SLNet;
bool Client_Login_Steam::ClientImpl(SLNet::Lobby2Plugin *client)
{
(void) client;
if ( !SteamAPI_Init() )
resultCode=L2RC_GENERAL_ERROR;
else
resultCode=L2RC_SUCCESS;
return true; // Done immediately
}
bool Client_Logoff_Steam::ClientImpl(SLNet::Lobby2Plugin *client)
{
Lobby2Client_Steam_Impl *steam = (Lobby2Client_Steam_Impl *)client;
steam->NotifyLeaveRoom();
resultCode=L2RC_SUCCESS;
SteamAPI_Shutdown();
return true; // Done immediately
}
Console_SearchRooms_Steam::Console_SearchRooms_Steam()
{
m_SteamCallResultLobbyMatchList = SLNet::OP_NEW<CCallResult<Lobby2Client_Steam_Impl, LobbyMatchList_t> > (_FILE_AND_LINE_);
}
Console_SearchRooms_Steam::~Console_SearchRooms_Steam()
{
// Cast to make sure destructor gets called
SLNet::OP_DELETE((CCallResult<Lobby2Client_Steam_Impl, LobbyMatchList_t>*)m_SteamCallResultLobbyMatchList, _FILE_AND_LINE_);
}
bool Console_SearchRooms_Steam::ClientImpl(SLNet::Lobby2Plugin *client)
{
(void) client;
requestId = SteamMatchmaking()->RequestLobbyList();
((CCallResult<Lobby2Client_Steam_Impl, LobbyMatchList_t>*)m_SteamCallResultLobbyMatchList)->Set( requestId, (SLNet::Lobby2Client_Steam_Impl*) client, &Lobby2Client_Steam_Impl::OnLobbyMatchListCallback );
return false; // Asynch
}
void Console_SearchRooms_Steam::DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Console_SearchRooms::DebugMsg(out);
return;
}
out.Set("%i rooms found", roomNames.GetSize());
for (DataStructures::DefaultIndexType i=0; i < roomNames.GetSize(); i++)
{
out += SLNet::RakString("\n%i. %s. ID=%" PRINTF_64_BIT_MODIFIER "u", i+1, roomNames[i].C_String(), roomIds[i]);
}
}
bool Console_GetRoomDetails_Steam::ClientImpl(SLNet::Lobby2Plugin *client)
{
(void) client;
SteamMatchmaking()->RequestLobbyData( roomId );
return false; // Asynch
}
Console_CreateRoom_Steam::Console_CreateRoom_Steam()
{
m_SteamCallResultLobbyCreated = SLNet::OP_NEW<CCallResult<Lobby2Client_Steam_Impl, LobbyCreated_t> >(_FILE_AND_LINE_);
}
Console_CreateRoom_Steam::~Console_CreateRoom_Steam()
{
// Cast to make sure destructor gets called
SLNet::OP_DELETE((CCallResult<Lobby2Client_Steam_Impl, LobbyCreated_t>*)m_SteamCallResultLobbyCreated, _FILE_AND_LINE_);
}
bool Console_CreateRoom_Steam::ClientImpl(SLNet::Lobby2Plugin *client)
{
if (roomIsPublic)
requestId = SteamMatchmaking()->CreateLobby( k_ELobbyTypePublic, publicSlots );
else
requestId = SteamMatchmaking()->CreateLobby( k_ELobbyTypeFriendsOnly, publicSlots );
// set the function to call when this completes
((CCallResult<Lobby2Client_Steam_Impl, LobbyCreated_t>*)m_SteamCallResultLobbyCreated)->Set( requestId, (SLNet::Lobby2Client_Steam_Impl*) client, &Lobby2Client_Steam_Impl::OnLobbyCreated );
return false; // Asynch
}
Console_JoinRoom_Steam::Console_JoinRoom_Steam()
{
m_SteamCallResultLobbyEntered = SLNet::OP_NEW<CCallResult<Lobby2Client_Steam_Impl, LobbyEnter_t> > (_FILE_AND_LINE_);
}
Console_JoinRoom_Steam::~Console_JoinRoom_Steam()
{
// Cast to make sure destructor gets called
SLNet::OP_DELETE((CCallResult<Lobby2Client_Steam_Impl, LobbyEnter_t>*)m_SteamCallResultLobbyEntered, _FILE_AND_LINE_);
}
bool Console_JoinRoom_Steam::ClientImpl(SLNet::Lobby2Plugin *client)
{
requestId = SteamMatchmaking()->JoinLobby( roomId );
// set the function to call when this completes
((CCallResult<Lobby2Client_Steam_Impl, LobbyEnter_t>*)m_SteamCallResultLobbyEntered)->Set( requestId, (SLNet::Lobby2Client_Steam_Impl*) client, &Lobby2Client_Steam_Impl::OnLobbyJoined );
return false; // Asynch
}
bool Console_LeaveRoom_Steam::ClientImpl(SLNet::Lobby2Plugin *client)
{
SteamMatchmaking()->LeaveLobby( roomId );
Lobby2Client_Steam_Impl *steam = (Lobby2Client_Steam_Impl *)client;
steam->NotifyLeaveRoom();
resultCode=L2RC_SUCCESS;
return true; // Synchronous
}
bool Console_SendRoomChatMessage_Steam::ClientImpl(SLNet::Lobby2Plugin *client)
{
(void) client;
SteamMatchmaking()->SendLobbyChatMsg(roomId, message.C_String(), (int) message.GetLength()+1);
// ISteamMatchmaking.h
/*
// Broadcasts a chat message to the all the users in the lobby
// users in the lobby (including the local user) will receive a LobbyChatMsg_t callback
// returns true if the message is successfully sent
// pvMsgBody can be binary or text data, up to 4k
// if pvMsgBody is text, cubMsgBody should be strlen( text ) + 1, to include the null terminator
virtual bool SendLobbyChatMsg( CSteamID steamIDLobby, const void *pvMsgBody, int cubMsgBody ) = 0;
*/
resultCode=L2RC_SUCCESS;
return true; // Synchronous
}

View File

@ -0,0 +1,336 @@
/*
* Original work: Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
*
*
* Modified work: Copyright (c) 2017, SLikeSoft UG (haftungsbeschränkt)
*
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
* license found in the license.txt file in the root directory of this source tree.
*/
#ifndef __LOBBY_2_MESSAGE_STEAM_H
#define __LOBBY_2_MESSAGE_STEAM_H
#include "Lobby2Message.h"
#include "slikenet/DS_Multilist.h"
#include "Lobby2Client_Steam.h"
namespace SLNet
{
#define __L2_MSG_DB_HEADER(__NAME__,__DB__) \
struct __NAME__##_##__DB__ : public __NAME__
__L2_MSG_DB_HEADER(Client_Login, Steam)
{
virtual bool ClientImpl(SLNet::Lobby2Plugin *client);
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Client_Login::DebugMsg(out);
return;
}
out.Set("Login success");
}
};
__L2_MSG_DB_HEADER(Client_Logoff, Steam)
{
virtual bool ClientImpl(SLNet::Lobby2Plugin *client);
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Client_Logoff::DebugMsg(out);
return;
}
out.Set("Logoff success");
}
};
__L2_MSG_DB_HEADER(Console_SearchRooms, Steam)
{
Console_SearchRooms_Steam();
virtual ~Console_SearchRooms_Steam();
virtual bool ClientImpl(SLNet::Lobby2Plugin *client);
virtual void DebugMsg(SLNet::RakString &out) const;
// Output
// Use CConsoleCommand_GetRoomDetails to get room names for unknown rooms, which will have blank names
DataStructures::Multilist<ML_UNORDERED_LIST, SLNet::RakString> roomNames;
// Type of uint64_ts is uint64_t
DataStructures::Multilist<ML_UNORDERED_LIST, uint64_t> roomIds;
/// \internal
// uint32_t is LobbyMatchList_t
// CCallResult<Lobby2Client_Steam, uint32_t> m_SteamCallResultLobbyMatchList;
void *m_SteamCallResultLobbyMatchList;
};
__L2_MSG_DB_HEADER(Console_GetRoomDetails, Steam)
{
virtual bool ClientImpl(SLNet::Lobby2Plugin *client);
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Console_GetRoomDetails::DebugMsg(out);
return;
}
out.Set("GetRoomDetails: roomName=%s for id %" PRINTF_64_BIT_MODIFIER "u", roomName.C_String(), roomId);
}
/// Input
uint64_t roomId;
/// Output
SLNet::RakString roomName;
};
__L2_MSG_DB_HEADER(Console_CreateRoom, Steam)
{
Console_CreateRoom_Steam();
virtual ~Console_CreateRoom_Steam();
virtual bool ClientImpl(SLNet::Lobby2Plugin *client);
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Console_CreateRoom::DebugMsg(out);
return;
}
out.Set("Console_CreateRoom: roomName %s created for id %" PRINTF_64_BIT_MODIFIER "u", roomName.C_String(), roomId);
}
/// Input
/// If public, anyone can join. Else friends only
bool roomIsPublic;
SLNet::RakString roomName;
/// Output
uint64_t roomId;
/// \internal
// CCallResult<Lobby2Client_Steam, LobbyCreated_t> m_SteamCallResultLobbyCreated;
void *m_SteamCallResultLobbyCreated;
};
__L2_MSG_DB_HEADER(Console_JoinRoom, Steam)
{
Console_JoinRoom_Steam();
virtual ~Console_JoinRoom_Steam();
virtual bool ClientImpl(SLNet::Lobby2Plugin *client);
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Console_JoinRoom::DebugMsg(out);
return;
}
out.Set("Console_JoinRoom: Joined id %" PRINTF_64_BIT_MODIFIER "u", roomId);
}
/// Input
uint64_t roomId;
/// \internal
//CCallResult<Lobby2Client_Steam, LobbyEnter_t> m_SteamCallResultLobbyEntered;
void *m_SteamCallResultLobbyEntered;
};
__L2_MSG_DB_HEADER(Console_LeaveRoom, Steam)
{
virtual bool ClientImpl(SLNet::Lobby2Plugin *client);
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Console_LeaveRoom::DebugMsg(out);
return;
}
out.Set("Left room %" PRINTF_64_BIT_MODIFIER "u", roomId);
}
/// Input
uint64_t roomId;
};
__L2_MSG_DB_HEADER(Console_SendRoomChatMessage, Steam)
{
virtual bool ClientImpl(SLNet::Lobby2Plugin *client);
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Console_SendRoomChatMessage::DebugMsg(out);
return;
}
out.Set("Sent %s to room %" PRINTF_64_BIT_MODIFIER "u", message.C_String(), roomId);
}
/// Input
uint64_t roomId;
SLNet::RakString message;
};
__L2_MSG_DB_HEADER(Notification_Friends_StatusChange, Steam)
{
uint64_t friendId;
SLNet::RakString friendNewName;
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Notification_Friends_StatusChange::DebugMsg(out);
return;
}
out.Set("Friend renamed to %s with ID %" PRINTF_64_BIT_MODIFIER "u", friendNewName.C_String(), friendId);
}
};
__L2_MSG_DB_HEADER(Notification_Console_UpdateRoomParameters, Steam)
{
uint64_t roomId;
SLNet::RakString roomNewName;
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Notification_Console_UpdateRoomParameters::DebugMsg(out);
return;
}
out.Set("RoomStateChanged: Room named %s with ID %" PRINTF_64_BIT_MODIFIER "u", roomNewName.C_String(), roomId);
}
};
__L2_MSG_DB_HEADER(Notification_Console_MemberJoinedRoom, Steam)
{
uint64_t roomId;
uint64_t srcMemberId;
SLNet::RakString memberName;
SystemAddress remoteSystem;
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Notification_Console_MemberJoinedRoom::DebugMsg(out);
return;
}
out.Set("MemberJoinedRoom: Member named %s and ID %" PRINTF_64_BIT_MODIFIER "u joined room with ID %" PRINTF_64_BIT_MODIFIER "u", memberName.C_String(), srcMemberId, roomId);
}
};
__L2_MSG_DB_HEADER(Notification_Console_MemberLeftRoom, Steam)
{
uint64_t roomId;
uint64_t srcMemberId;
SLNet::RakString memberName;
SystemAddress remoteSystem;
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Notification_Console_MemberLeftRoom::DebugMsg(out);
return;
}
out.Set("MemberLeftRoom: Member named %s and ID %" PRINTF_64_BIT_MODIFIER "u left room with ID %" PRINTF_64_BIT_MODIFIER "u", memberName.C_String(), srcMemberId, roomId);
}
};
__L2_MSG_DB_HEADER(Notification_Console_RoomChatMessage, Steam)
{
SLNet::RakString message;
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Notification_Console_RoomChatMessage::DebugMsg(out);
return;
}
out=message;
}
};
/*
__L2_MSG_DB_HEADER(Notification_Console_RoomMemberConnectivityUpdate, Steam)
{
bool succeeded;
SystemAddress remoteSystem;
virtual void DebugMsg(SLNet::RakString &out) const
{
if (resultCode!=L2RC_SUCCESS)
{
Notification_Console_RoomMemberConnectivityUpdate::DebugMsg(out);
return;
}
if (succeeded)
{
out.Set("Signaling to %s succeeded.", remoteSystem.ToString(true));
}
else
{
out.Set("Signaling to %s failed.", remoteSystem.ToString(true));
}
}
};
*/
// --------------------------------------------- Database specific factory class for all messages --------------------------------------------
#define __L2_MSG_FACTORY_IMPL(__NAME__,__DB__) {case L2MID_##__NAME__ : Lobby2Message *m = SLNet::OP_NEW< __NAME__##_##__DB__ >(_FILE_AND_LINE_) ; return m;}
struct Lobby2MessageFactory_Steam : public Lobby2MessageFactory
{
Lobby2MessageFactory_Steam() {}
virtual ~Lobby2MessageFactory_Steam() {}
virtual Lobby2Message *Alloc(Lobby2MessageID id)
{
switch (id)
{
__L2_MSG_FACTORY_IMPL(Client_Login, Steam);
__L2_MSG_FACTORY_IMPL(Client_Logoff, Steam);
__L2_MSG_FACTORY_IMPL(Console_SearchRooms, Steam);
__L2_MSG_FACTORY_IMPL(Console_GetRoomDetails, Steam);
__L2_MSG_FACTORY_IMPL(Console_CreateRoom, Steam);
__L2_MSG_FACTORY_IMPL(Console_JoinRoom, Steam);
__L2_MSG_FACTORY_IMPL(Console_LeaveRoom, Steam);
__L2_MSG_FACTORY_IMPL(Console_SendRoomChatMessage, Steam);
__L2_MSG_FACTORY_IMPL(Notification_Friends_StatusChange, Steam);
__L2_MSG_FACTORY_IMPL(Notification_Console_UpdateRoomParameters, Steam);
__L2_MSG_FACTORY_IMPL(Notification_Console_MemberJoinedRoom, Steam);
__L2_MSG_FACTORY_IMPL(Notification_Console_MemberLeftRoom, Steam);
__L2_MSG_FACTORY_IMPL(Notification_Console_RoomChatMessage, Steam);
//__L2_MSG_FACTORY_IMPL(Notification_Console_RoomMemberConnectivityUpdate, Steam);
default:
return Lobby2MessageFactory::Alloc(id);
};
};
};
}; // namespace SLNet
#endif

View File

@ -0,0 +1,376 @@
<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{D54E74A9-6874-425F-9FCE-6EF8C5563343}</ProjectGuid>
<RootNamespace>steamconsole</RootNamespace>
<Keyword>Win32Proj</Keyword>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>NotSet</CharacterSet>
<WholeProgramOptimization>true</WholeProgramOptimization>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>Application</ConfigurationType>
<CharacterSet>NotSet</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<PropertyGroup Label="UserMacros" />
<PropertyGroup>
<_ProjectFileVersion>10.0.40219.1</_ProjectFileVersion>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</LinkIncremental>
<OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)</OutDir>
<IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(Configuration)\</IntDir>
<LinkIncremental Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</LinkIncremental>
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
<CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
<CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
<CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>.\;..\;..\..\..\Source;C:\Steam\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;_DEBUG;_CONSOLE;USE_STEAM_SOCKET_FUNCTIONS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>steam_api.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>C:\Steam\redistributable_bin;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<TargetMachine>MachineX86</TargetMachine>
</Link>
<PostBuildEvent>
<Command>copy C:\Steam\redistributable_bin\*.dll .\
copy C:\Steam\SteamworksExample\steam_appid.txt .\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<AdditionalIncludeDirectories>.\;..\;..\..\..\Source;C:\Steam\public;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>_CRT_SECURE_NO_DEPRECATE;WIN32;NDEBUG;_CONSOLE;USE_STEAM_SOCKET_FUNCTIONS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
</ClCompile>
<Link>
<AdditionalDependencies>steam_api.lib;ws2_32.lib;%(AdditionalDependencies)</AdditionalDependencies>
<AdditionalLibraryDirectories>C:\Steam\redistributable_bin;%(AdditionalLibraryDirectories)</AdditionalLibraryDirectories>
<GenerateDebugInformation>true</GenerateDebugInformation>
<SubSystem>Console</SubSystem>
<OptimizeReferences>true</OptimizeReferences>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<TargetMachine>MachineX86</TargetMachine>
</Link>
<PostBuildEvent>
<Command>copy C:\Steam\redistributable_bin\*.dll .\
copy C:\Steam\SteamworksExample\steam_appid.txt .\</Command>
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\src\_FindFirst.cpp" />
<ClCompile Include="..\..\..\Source\src\AsynchronousFileIO.cpp" />
<ClCompile Include="..\..\..\Source\src\AutoRPC.cpp" />
<ClCompile Include="..\..\..\Source\src\BigInt.cpp" />
<ClCompile Include="..\..\..\Source\src\BitStream.cpp" />
<ClCompile Include="..\..\..\Source\src\BitStream_NoTemplate.cpp" />
<ClCompile Include="..\..\..\Source\src\CheckSum.cpp" />
<ClCompile Include="..\..\..\Source\src\CommandParserInterface.cpp" />
<ClCompile Include="..\..\..\Source\src\ConnectionGraph.cpp" />
<ClCompile Include="..\..\..\Source\src\ConnectionGraph2.cpp" />
<ClCompile Include="..\..\..\Source\src\ConsoleServer.cpp" />
<ClCompile Include="..\..\..\Source\src\DataBlockEncryptor.cpp" />
<ClCompile Include="..\..\..\Source\src\DataCompressor.cpp" />
<ClCompile Include="..\..\..\Source\src\DirectoryDeltaTransfer.cpp" />
<ClCompile Include="..\..\..\Source\src\DS_BytePool.cpp" />
<ClCompile Include="..\..\..\Source\src\DS_ByteQueue.cpp" />
<ClCompile Include="..\..\..\Source\src\DS_HuffmanEncodingTree.cpp" />
<ClCompile Include="..\..\..\Source\src\DS_Table.cpp" />
<ClCompile Include="..\..\..\Source\src\EmailSender.cpp" />
<ClCompile Include="..\..\..\Source\src\EncodeClassName.cpp" />
<ClCompile Include="..\..\..\Source\src\EpochTimeToString.cpp" />
<ClCompile Include="..\..\..\Source\src\ExtendedOverlappedPool.cpp" />
<ClCompile Include="..\..\..\Source\src\FileList.cpp" />
<ClCompile Include="..\..\..\Source\src\FileListTransfer.cpp" />
<ClCompile Include="..\..\..\Source\src\FileOperations.cpp" />
<ClCompile Include="..\..\..\Source\src\FormatString.cpp" />
<ClCompile Include="..\..\..\Source\src\FullyConnectedMesh.cpp" />
<ClCompile Include="..\..\..\Source\src\FullyConnectedMesh2.cpp" />
<ClCompile Include="..\..\..\Source\src\FunctionThread.cpp" />
<ClCompile Include="..\..\..\Source\src\Gen_RPC8.cpp" />
<ClCompile Include="..\..\..\Source\src\GetTime.cpp" />
<ClCompile Include="..\..\..\Source\src\gettimeofday.cpp" />
<ClCompile Include="..\..\..\Source\src\GridSectorizer.cpp" />
<ClCompile Include="..\..\..\Source\src\HTTPConnection.cpp" />
<ClCompile Include="..\..\..\Source\src\IncrementalReadInterface.cpp" />
<ClCompile Include="..\..\..\Source\src\InlineFunctor.cpp" />
<ClCompile Include="..\..\..\Source\src\Itoa.cpp" />
<ClCompile Include="..\..\..\Source\src\LightweightDatabaseClient.cpp" />
<ClCompile Include="..\..\..\Source\src\LightweightDatabaseCommon.cpp" />
<ClCompile Include="..\..\..\Source\src\LightweightDatabaseServer.cpp" />
<ClCompile Include="..\..\..\Source\src\LinuxStrings.cpp" />
<ClCompile Include="..\..\..\Source\src\LogCommandParser.cpp" />
<ClCompile Include="..\..\..\Source\src\MessageFilter.cpp" />
<ClCompile Include="..\..\..\Source\src\NatPunchthroughClient.cpp" />
<ClCompile Include="..\..\..\Source\src\NatPunchthroughServer.cpp" />
<ClCompile Include="..\..\..\Source\src\NetworkIDManager.cpp" />
<ClCompile Include="..\..\..\Source\src\NetworkIDObject.cpp" />
<ClCompile Include="..\..\..\Source\src\PacketConsoleLogger.cpp" />
<ClCompile Include="..\..\..\Source\src\PacketFileLogger.cpp" />
<ClCompile Include="..\..\..\Source\src\PacketizedTCP.cpp" />
<ClCompile Include="..\..\..\Source\src\PacketLogger.cpp" />
<ClCompile Include="..\..\..\Source\src\PacketOutputWindowLogger.cpp" />
<ClCompile Include="..\..\..\Source\src\PluginInterface.cpp" />
<ClCompile Include="..\..\..\Source\src\PluginInterface2.cpp" />
<ClCompile Include="..\..\..\Source\src\RakMemoryOverride.cpp" />
<ClCompile Include="..\..\..\Source\src\RakNetCommandParser.cpp" />
<ClCompile Include="..\..\..\Source\src\RakNetSocket.cpp" />
<ClCompile Include="..\..\..\Source\src\RakNetStatistics.cpp" />
<ClCompile Include="..\..\..\Source\src\RakNetTransport.cpp" />
<ClCompile Include="..\..\..\Source\src\RakNetTransport2.cpp" />
<ClCompile Include="..\..\..\Source\src\RakNetTypes.cpp" />
<ClCompile Include="..\..\..\Source\src\RakNetworkFactory.cpp" />
<ClCompile Include="..\..\..\Source\src\RakPeer.cpp" />
<ClCompile Include="..\..\..\Source\src\RakSleep.cpp" />
<ClCompile Include="..\..\..\Source\src\RakString.cpp" />
<ClCompile Include="..\..\..\Source\src\RakThread.cpp" />
<ClCompile Include="..\..\..\Source\src\Rand.cpp" />
<ClCompile Include="..\..\..\Source\src\ReadyEvent.cpp" />
<ClCompile Include="..\..\..\Source\src\ReliabilityLayer.cpp" />
<ClCompile Include="..\..\..\Source\src\ReplicaManager.cpp" />
<ClCompile Include="..\..\..\Source\src\ReplicaManager2.cpp" />
<ClCompile Include="..\..\..\Source\src\ReplicaManager3.cpp" />
<ClCompile Include="..\..\..\Source\src\rijndael.cpp" />
<ClCompile Include="..\..\..\Source\src\Router.cpp" />
<ClCompile Include="..\..\..\Source\src\Router2.cpp" />
<ClCompile Include="..\..\..\Source\src\RPCMap.cpp" />
<ClCompile Include="..\..\..\Source\src\RSACrypt.cpp" />
<ClCompile Include="..\..\..\Source\src\DR_SHA1.cpp" />
<ClCompile Include="..\..\..\Source\src\SimpleMutex.cpp" />
<ClCompile Include="..\..\..\Source\src\SocketLayer.cpp" />
<ClCompile Include="..\..\..\Source\src\StringCompressor.cpp" />
<ClCompile Include="..\..\..\Source\src\StringTable.cpp" />
<ClCompile Include="..\..\..\Source\src\SuperFastHash.cpp" />
<ClCompile Include="..\..\..\Source\src\SystemAddressList.cpp" />
<ClCompile Include="..\..\..\Source\src\TableSerializer.cpp" />
<ClCompile Include="..\..\..\Source\src\TCPInterface.cpp" />
<ClCompile Include="..\..\..\Source\src\TelnetTransport.cpp" />
<ClCompile Include="..\..\..\Source\src\ThreadsafePacketLogger.cpp" />
<ClCompile Include="..\..\..\Source\src\UDPForwarder.cpp" />
<ClCompile Include="..\..\..\Source\src\UDPProxyClient.cpp" />
<ClCompile Include="..\..\..\Source\src\UDPProxyCoordinator.cpp" />
<ClCompile Include="..\..\..\Source\src\UDPProxyServer.cpp" />
<ClCompile Include="..\..\..\Source\src\WSAStartupSingleton.cpp" />
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Client.cpp" />
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Steam\Lobby2Client_Steam.cpp" />
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Message.cpp" />
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Steam\Lobby2Message_Steam.cpp" />
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Plugin.cpp" />
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2ResultCode.cpp" />
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\include\slikenet\_FindFirst.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\AsynchronousFileIO.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\AutopatcherPatchContext.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\AutopatcherRepositoryInterface.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\AutoRPC.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\BigInt.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\BitStream.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\BitStream_NoTemplate.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\CheckSum.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ClientContextStruct.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\CommandParserInterface.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ConnectionGraph.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ConnectionGraph2.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ConsoleServer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DataBlockEncryptor.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DataCompressor.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DirectoryDeltaTransfer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_BinarySearchTree.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_BPlusTree.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_BytePool.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_ByteQueue.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Heap.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_HuffmanEncodingTree.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_HuffmanEncodingTreeFactory.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_HuffmanEncodingTreeNode.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_LinkedList.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_List.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Map.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_MemoryPool.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Multilist.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_OrderedChannelHeap.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_OrderedList.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Queue.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_QueueLinkedList.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_RangeList.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Table.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Tree.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DS_WeightedGraph.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\EmailSender.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\EpochTimeToString.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\Export.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ExtendedOverlappedPool.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\FileList.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\FileListNodeContext.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\FileListTransfer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\FileListTransferCBInterface.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\FileOperations.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\FormatString.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\FullyConnectedMesh.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\FullyConnectedMesh2.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\FunctionThread.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\Gen_RPC8.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\GetTime.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\gettimeofday.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\GridSectorizer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\HTTPConnection.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\IncrementalReadInterface.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\InlineFunctor.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\InternalPacket.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\Itoa.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\Kbhit.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\LightweightDatabaseClient.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\LightweightDatabaseCommon.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\LightweightDatabaseServer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\LinuxStrings.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\LogCommandParser.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\MessageFilter.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\MessageIdentifiers.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\MTUSize.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\NativeTypes.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\NatPunchthroughClient.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\NatPunchthroughServer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\NetworkIDManager.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\NetworkIDObject.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\PacketConsoleLogger.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\PacketFileLogger.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\PacketizedTCP.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\PacketLogger.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\PacketOutputWindowLogger.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\PacketPool.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\PacketPriority.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\Platform.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\PluginInterface.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\PluginInterface2.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\alloca.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\assert.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\memoryoverride.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\commandparser.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\defines.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\smartptr.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\socket.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\statistics.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\time.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\transport.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\transport2.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\types.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\version.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\peer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\peerinterface.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\sleep.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\string.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\thread.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\Rand.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ReadyEvent.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\RefCountedObj.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ReliabilityLayer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\Replica.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ReplicaEnums.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ReplicaManager.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ReplicaManager2.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ReplicaManager3.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\Rijndael-Boxes.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\Rijndael.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\Router.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\Router2.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\RouterInterface.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\RPCMap.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\RPCNode.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\RSACrypt.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\DR_SHA1.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\SimpleMutex.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\SimpleTCPServer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\SingleProducerConsumer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\SocketIncludes.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\SocketLayer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\StringCompressor.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\StringTable.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\SuperFastHash.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\SystemAddressList.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\TableSerializer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\TCPInterface.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\TelnetTransport.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ThreadPool.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\ThreadsafePacketLogger.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\TransportInterface.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\UDPForwarder.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\UDPProxyClient.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\UDPProxyCommon.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\UDPProxyCoordinator.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\UDPProxyServer.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\WindowsIncludes.h" />
<ClInclude Include="..\..\..\Source\include\slikenet\WSAStartupSingleton.h" />
<ClInclude Include="C:\Steam\public\steam\isteamapps.h" />
<ClInclude Include="C:\Steam\public\steam\isteamclient.h" />
<ClInclude Include="C:\Steam\public\steam\isteamfriends.h" />
<ClInclude Include="C:\Steam\public\steam\isteamgameserver.h" />
<ClInclude Include="C:\Steam\public\steam\isteammasterserverupdater.h" />
<ClInclude Include="C:\Steam\public\steam\isteammatchmaking.h" />
<ClInclude Include="C:\Steam\public\steam\isteamnetworking.h" />
<ClInclude Include="C:\Steam\public\steam\isteamremotestorage.h" />
<ClInclude Include="C:\Steam\public\steam\isteamuser.h" />
<ClInclude Include="C:\Steam\public\steam\isteamuserstats.h" />
<ClInclude Include="C:\Steam\public\steam\isteamutils.h" />
<ClInclude Include="C:\Steam\public\steam\matchmakingtypes.h" />
<ClInclude Include="C:\Steam\public\steam\steam_api.h" />
<ClInclude Include="C:\Steam\public\steam\steam_gameserver.h" />
<ClInclude Include="C:\Steam\public\steam\steamclientpublic.h" />
<ClInclude Include="C:\Steam\public\steam\steamtypes.h" />
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Client.h" />
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Steam\Lobby2Client_Steam.h" />
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Message.h" />
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Steam\Lobby2Message_Steam.h" />
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Plugin.h" />
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2ResultCode.h" />
</ItemGroup>
<ItemGroup>
<None Include="readme.txt" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>

View File

@ -0,0 +1,811 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="RakNet">
<UniqueIdentifier>{e1041313-c177-4742-a818-f020c6aee669}</UniqueIdentifier>
</Filter>
<Filter Include="Steam">
<UniqueIdentifier>{2d9abebe-e69a-45df-9713-54f601e1913b}</UniqueIdentifier>
</Filter>
<Filter Include="Lobby2">
<UniqueIdentifier>{8c10e916-087a-4426-98dc-a3da5d86026a}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\..\Source\src\_FindFirst.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\AsynchronousFileIO.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\AutoRPC.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\BigInt.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\BitStream.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\BitStream_NoTemplate.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\CheckSum.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\CommandParserInterface.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\ConnectionGraph.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\ConnectionGraph2.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\ConsoleServer.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\DataBlockEncryptor.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\DataCompressor.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\DirectoryDeltaTransfer.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\DS_BytePool.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\DS_ByteQueue.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\DS_HuffmanEncodingTree.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\DS_Table.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\EmailSender.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\EncodeClassName.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\EpochTimeToString.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\ExtendedOverlappedPool.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\FileList.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\FileListTransfer.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\FileOperations.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\FormatString.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\FullyConnectedMesh.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\FullyConnectedMesh2.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\FunctionThread.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\Gen_RPC8.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\GetTime.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\gettimeofday.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\GridSectorizer.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\HTTPConnection.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\IncrementalReadInterface.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\InlineFunctor.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\Itoa.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\LightweightDatabaseClient.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\LightweightDatabaseCommon.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\LightweightDatabaseServer.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\LinuxStrings.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\LogCommandParser.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\MessageFilter.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\NatPunchthroughClient.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\NatPunchthroughServer.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\NetworkIDManager.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\NetworkIDObject.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\PacketConsoleLogger.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\PacketFileLogger.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\PacketizedTCP.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\PacketLogger.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\PacketOutputWindowLogger.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\PluginInterface.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\PluginInterface2.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakMemoryOverride.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakNetCommandParser.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakNetSocket.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakNetStatistics.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakNetTransport.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakNetTransport2.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakNetTypes.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakNetworkFactory.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakPeer.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakSleep.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakString.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RakThread.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\Rand.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\ReadyEvent.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\ReliabilityLayer.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\ReplicaManager.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\ReplicaManager2.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\ReplicaManager3.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\rijndael.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\Router.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\Router2.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RPCMap.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\RSACrypt.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\DR_SHA1.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\SimpleMutex.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\SocketLayer.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\StringCompressor.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\StringTable.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\SuperFastHash.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\SystemAddressList.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\TableSerializer.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\TCPInterface.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\TelnetTransport.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\ThreadsafePacketLogger.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\UDPForwarder.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\UDPProxyClient.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\UDPProxyCoordinator.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\UDPProxyServer.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="..\..\..\Source\src\WSAStartupSingleton.cpp">
<Filter>RakNet</Filter>
</ClCompile>
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Client.cpp">
<Filter>Lobby2</Filter>
</ClCompile>
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Steam\Lobby2Client_Steam.cpp">
<Filter>Lobby2</Filter>
</ClCompile>
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Message.cpp">
<Filter>Lobby2</Filter>
</ClCompile>
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Steam\Lobby2Message_Steam.cpp">
<Filter>Lobby2</Filter>
</ClCompile>
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Plugin.cpp">
<Filter>Lobby2</Filter>
</ClCompile>
<ClCompile Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2ResultCode.cpp">
<Filter>Lobby2</Filter>
</ClCompile>
<ClCompile Include="main.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\..\Source\include\slikenet\_FindFirst.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\AsynchronousFileIO.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\AutopatcherPatchContext.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\AutopatcherRepositoryInterface.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\AutoRPC.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\BigInt.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\BitStream.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\BitStream_NoTemplate.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\CheckSum.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ClientContextStruct.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\CommandParserInterface.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ConnectionGraph.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ConnectionGraph2.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ConsoleServer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DataBlockEncryptor.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DataCompressor.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DirectoryDeltaTransfer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_BinarySearchTree.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_BPlusTree.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_BytePool.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_ByteQueue.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Heap.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_HuffmanEncodingTree.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_HuffmanEncodingTreeFactory.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_HuffmanEncodingTreeNode.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_LinkedList.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_List.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Map.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_MemoryPool.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Multilist.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_OrderedChannelHeap.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_OrderedList.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Queue.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_QueueLinkedList.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_RangeList.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Table.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_Tree.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DS_WeightedGraph.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\EmailSender.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\EpochTimeToString.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\Export.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ExtendedOverlappedPool.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\FileList.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\FileListNodeContext.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\FileListTransfer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\FileListTransferCBInterface.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\FileOperations.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\FormatString.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\FullyConnectedMesh.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\FullyConnectedMesh2.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\FunctionThread.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\Gen_RPC8.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\GetTime.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\gettimeofday.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\GridSectorizer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\HTTPConnection.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\IncrementalReadInterface.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\InlineFunctor.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\InternalPacket.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\Itoa.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\Kbhit.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\LightweightDatabaseClient.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\LightweightDatabaseCommon.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\LightweightDatabaseServer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\LinuxStrings.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\LogCommandParser.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\MessageFilter.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\MessageIdentifiers.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\MTUSize.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\NativeTypes.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\NatPunchthroughClient.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\NatPunchthroughServer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\NetworkIDManager.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\NetworkIDObject.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\PacketConsoleLogger.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\PacketFileLogger.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\PacketizedTCP.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\PacketLogger.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\PacketOutputWindowLogger.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\PacketPool.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\PacketPriority.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\Platform.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\PluginInterface.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\PluginInterface2.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\alloca.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\assert.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\memoryoverride.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\commandparser.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\defines.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\smartptr.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\socket.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\statistics.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\time.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\transport.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\transport2.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\types.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\version.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\peer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\peerinterface.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\sleep.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\string.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\thread.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\Rand.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ReadyEvent.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\RefCountedObj.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ReliabilityLayer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\Replica.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ReplicaEnums.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ReplicaManager.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ReplicaManager2.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ReplicaManager3.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\Rijndael-Boxes.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\Rijndael.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\Router.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\Router2.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\RouterInterface.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\RPCMap.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\RPCNode.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\RSACrypt.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\DR_SHA1.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\SimpleMutex.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\SimpleTCPServer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\SingleProducerConsumer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\SocketIncludes.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\SocketLayer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\StringCompressor.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\StringTable.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\SuperFastHash.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\SystemAddressList.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\TableSerializer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\TCPInterface.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\TelnetTransport.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ThreadPool.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\ThreadsafePacketLogger.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\TransportInterface.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\UDPForwarder.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\UDPProxyClient.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\UDPProxyCommon.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\UDPProxyCoordinator.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\UDPProxyServer.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\WindowsIncludes.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="..\..\..\Source\include\slikenet\WSAStartupSingleton.h">
<Filter>RakNet</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\isteamapps.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\isteamclient.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\isteamfriends.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\isteamgameserver.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\isteammasterserverupdater.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\isteammatchmaking.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\isteamnetworking.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\isteamremotestorage.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\isteamuser.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\isteamuserstats.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\isteamutils.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\matchmakingtypes.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\steam_api.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\steam_gameserver.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\steamclientpublic.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="C:\Steam\public\steam\steamtypes.h">
<Filter>Steam</Filter>
</ClInclude>
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Client.h">
<Filter>Lobby2</Filter>
</ClInclude>
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Steam\Lobby2Client_Steam.h">
<Filter>Lobby2</Filter>
</ClInclude>
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Message.h">
<Filter>Lobby2</Filter>
</ClInclude>
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Steam\Lobby2Message_Steam.h">
<Filter>Lobby2</Filter>
</ClInclude>
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2Plugin.h">
<Filter>Lobby2</Filter>
</ClInclude>
<ClInclude Include="X:\p4\ob1\Data\DHEngine\Code\sdks\RakNet\DependentExtensions\Lobby2\Lobby2ResultCode.h">
<Filter>Lobby2</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<None Include="readme.txt" />
</ItemGroup>
</Project>