Files
o3de/Gems/Multiplayer/Code/Source/GridMateServiceWrapper/GridMateLANServiceWrapper.cpp
T
2021-03-08 14:30:57 -08:00

91 lines
3.9 KiB
C++

/*
* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
* its licensors.
*
* For complete copyright and license terms please see the LICENSE at the root of this
* distribution (the "License"). All use of this software is governed by the License,
* or, if provided, by the license below or the license accompanying this file. Do not
* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
*/
#include "Multiplayer_precompiled.h"
#include <GridMate/Session/LANSession.h>
#include "Multiplayer/GridMateServiceWrapper/GridMateLANServiceWrapper.h"
#include "Multiplayer/MultiplayerUtils.h"
#include <Multiplayer_Traits_Platform.h>
namespace Multiplayer
{
bool GridMateLANServiceWrapper::SanityCheck(GridMate::IGridMate* gridMate)
{
// Nothing in LAN Session Service we need to sanity check
(void)gridMate;
return true;
}
bool GridMateLANServiceWrapper::StartSessionService(GridMate::IGridMate* gridMate)
{
Multiplayer::LAN::StartSessionService(gridMate);
return GridMate::HasGridMateService<GridMate::LANSessionService>(gridMate);
}
void GridMateLANServiceWrapper::StopSessionService(GridMate::IGridMate* gridMate)
{
Multiplayer::LAN::StopSessionService(gridMate);
}
GridMate::GridSession* GridMateLANServiceWrapper::CreateServerForService(GridMate::IGridMate* gridMate, GridMate::CarrierDesc& carrierDesc, const GridMateServiceParams& params)
{
GridMate::GridSession* gridSession = nullptr;
// Setup and create the LANSessionParams
GridMate::LANSessionParams sessionParams;
params.AssignSessionParams(sessionParams);
sessionParams.m_port = GetServerPort(params);
EBUS_EVENT_ID_RESULT(gridSession,gridMate,GridMate::LANSessionServiceBus,HostSession,sessionParams,carrierDesc);
return gridSession;
}
GridMate::GridSearch* GridMateLANServiceWrapper::ListServersForService(GridMate::IGridMate* gridMate, const GridMateServiceParams& params)
{
GridMate::GridSearch* retVal = nullptr;
GridMate::LANSearchParams searchParams;
searchParams.m_serverPort = GetServerPort(params);
searchParams.m_listenPort = 0;
searchParams.m_version = params.m_version;
searchParams.m_familyType = static_cast<GridMate::Driver::BSDSocketFamilyType>(params.FetchValueOrDefault<int>("gm_ipversion", GridMate::Driver::BSDSocketFamilyType::BSD_AF_INET));
#if AZ_TRAIT_MULTIPLAYER_ASSIGN_NETWORK_FAMILY
AZ_Error(AZ_TRAIT_MULTIPLAYER_SESSION_NAME, searchParams.m_familyType == AZ_TRAIT_MULTIPLAYER_ADDRESS_TYPE, AZ_TRAIT_MULTIPLAYER_DRIVER_MESSAGE);
searchParams.m_familyType = AZ_TRAIT_MULTIPLAYER_ADDRESS_TYPE;
#endif
EBUS_EVENT_ID_RESULT(retVal, gridMate, GridMate::LANSessionServiceBus, StartGridSearch, searchParams);
return retVal;
}
GridMate::GridSession* GridMateLANServiceWrapper::JoinSessionForService(GridMate::IGridMate* gridMate, GridMate::CarrierDesc& carrierDesc, const GridMate::SearchInfo* searchInfo)
{
GridMate::GridSession* gridSession = nullptr;
const GridMate::LANSearchInfo& lanSearchInfo = static_cast<const GridMate::LANSearchInfo&>(*searchInfo);
GridMate::JoinParams joinParams;
EBUS_EVENT_ID_RESULT(gridSession, gridMate, GridMate::LANSessionServiceBus, JoinSessionBySearchInfo, lanSearchInfo, joinParams, carrierDesc);
return gridSession;
}
int GridMateLANServiceWrapper::GetServerPort(const GridMateServiceParams& params) const
{
// GamePort is reserved for game traffic, we want to go 1 above it to manage our server duties. i.e. Responding to search requests.
return params.FetchValueOrDefault<int>("cl_clientport", 0) + 1;
}
}