BVB Source Codes

CRYENGINE Show CommunicationChannelManager.cpp Source code

Return Download CRYENGINE: download CommunicationChannelManager.cpp Source code - Download CRYENGINE Source code - Type:.cpp
  1. // Copyright 2001-2016 Crytek GmbH / Crytek Group. All rights reserved.
  2.  
  3. #include "StdAfx.h"
  4. #include "CommunicationChannelManager.h"
  5.  
  6. #include <CryString/StringUtils.h>
  7.  
  8. bool CommunicationChannelManager::LoadChannel(const XmlNodeRef& channelNode, const CommChannelID& parentID)
  9. {
  10.         if (!stricmp(channelNode->getTag(), "Channel"))
  11.         {
  12.                 const char* name = 0;
  13.  
  14.                 if (!channelNode->getAttr("name", &name))
  15.                 {
  16.                         AIWarning("Missing 'name' attribute for 'Channel' tag at line %d...",
  17.                                   channelNode->getLine());
  18.  
  19.                         return false;
  20.                 }
  21.  
  22.                 float minSilence = 0.0f;
  23.                 channelNode->getAttr("minSilence", minSilence);
  24.  
  25.                 float flushSilence = minSilence;
  26.                 channelNode->getAttr("flushSilence", flushSilence);
  27.  
  28.                 float actorMinSilence = 0.0f;
  29.                 channelNode->getAttr("actorMinSilence", actorMinSilence);
  30.  
  31.                 bool ignoreActorSilence = false;
  32.                 channelNode->getAttr("ignoreActorSilence", ignoreActorSilence);
  33.  
  34.                 //By default channels flush state on an abort request
  35.                 size_t priority = 0;
  36.                 channelNode->getAttr("priority", priority);
  37.  
  38.                 SCommunicationChannelParams params;
  39.                 params.name = name;
  40.                 params.minSilence = minSilence;
  41.                 params.flushSilence = flushSilence;
  42.                 params.parentID = parentID;
  43.                 params.priority = static_cast<uint8>(priority);
  44.                 params.type = SCommunicationChannelParams::Global;
  45.                 params.actorMinSilence = actorMinSilence;
  46.                 params.ignoreActorSilence = ignoreActorSilence;
  47.  
  48.                 if (channelNode->haveAttr("type"))
  49.                 {
  50.                         const char* type;
  51.                         channelNode->getAttr("type", &type);
  52.  
  53.                         if (!stricmp(type, "global"))
  54.                                 params.type = SCommunicationChannelParams::Global;
  55.                         else if (!stricmp(type, "group"))
  56.                                 params.type = SCommunicationChannelParams::Group;
  57.                         else if (!stricmp(type, "personal"))
  58.                                 params.type = SCommunicationChannelParams::Personal;
  59.                         else
  60.                         {
  61.                                 AIWarning("Invalid 'type' attribute for 'Channel' tag at line %d...",
  62.                                           channelNode->getLine());
  63.  
  64.                                 return false;
  65.                         }
  66.                 }
  67.  
  68.                 std::pair<ChannelParams::iterator, bool> iresult = m_params.insert(
  69.                   ChannelParams::value_type(GetChannelID(params.name.c_str()), params));
  70.  
  71.                 if (!iresult.second)
  72.                 {
  73.                         if (iresult.first->second.name == name)
  74.                                 AIWarning("Channel '%s' redefinition at line %d...", name, channelNode->getLine());
  75.                         else
  76.                                 AIWarning("Channel name '%s' hash collision!", name);
  77.  
  78.                         return false;
  79.                 }
  80.  
  81.                 int childCount = channelNode->getChildCount();
  82.  
  83.                 CommChannelID channelID = GetChannelID(name);
  84.  
  85.                 for (int i = 0; i < childCount; ++i)
  86.                 {
  87.                         XmlNodeRef childChannelNode = channelNode->getChild(i);
  88.  
  89.                         if (!LoadChannel(childChannelNode, channelID))
  90.                                 return false;
  91.                 }
  92.         }
  93.         else
  94.         {
  95.                 AIWarning("Unexpected tag '%s' found at line %d...", channelNode->getTag(), channelNode->getLine());
  96.  
  97.                 return false;
  98.         }
  99.  
  100.         return true;
  101. }
  102.  
  103. void CommunicationChannelManager::Clear()
  104. {
  105.         Reset();
  106.  
  107.         m_params.clear();
  108. }
  109.  
  110. void CommunicationChannelManager::Reset()
  111. {
  112.         m_globalChannels.clear();
  113.         m_groupChannels.clear();
  114.         m_personalChannels.clear();
  115. }
  116.  
  117. void CommunicationChannelManager::Update(float updateTime)
  118. {
  119.         FUNCTION_PROFILER(gEnv->pSystem, PROFILE_AI);
  120.  
  121.         Channels::iterator glit = m_globalChannels.begin();
  122.         Channels::iterator glend = m_globalChannels.end();
  123.  
  124.         for (; glit != glend; ++glit)
  125.                 glit->second->Update(updateTime);
  126.  
  127.         GroupChannels::iterator grit = m_groupChannels.begin();
  128.         GroupChannels::iterator grend = m_groupChannels.end();
  129.  
  130.         for (; grit != grend; ++grit)
  131.         {
  132.                 Channels::iterator it = grit->second.begin();
  133.                 Channels::iterator end = grit->second.end();
  134.  
  135.                 for (; it != end; ++it)
  136.                         it->second->Update(updateTime);
  137.         }
  138.  
  139.         PersonalChannels::iterator prit = m_personalChannels.begin();
  140.         PersonalChannels::iterator prend = m_personalChannels.end();
  141.  
  142.         for (; prit != prend; ++prit)
  143.         {
  144.                 Channels::iterator it = prit->second.begin();
  145.                 Channels::iterator end = prit->second.end();
  146.  
  147.                 for (; it != end; ++it)
  148.                         it->second->Update(updateTime);
  149.         }
  150. }
  151.  
  152. CommChannelID CommunicationChannelManager::GetChannelID(const char* name) const
  153. {
  154.         return CommChannelID(CryStringUtils::CalculateHashLowerCase(name));
  155. }
  156.  
  157. const SCommunicationChannelParams& CommunicationChannelManager::GetChannelParams(const CommChannelID& channelID) const
  158. {
  159.         ChannelParams::const_iterator it = m_params.find(channelID);
  160.  
  161.         static SCommunicationChannelParams noChannel;
  162.  
  163.         if (it == m_params.end())
  164.                 return noChannel;
  165.         else
  166.                 return it->second;
  167. }
  168.  
  169. CommunicationChannel::Ptr CommunicationChannelManager::GetChannel(const CommChannelID& channelID,
  170.                                                                   EntityId sourceId)
  171. {
  172.         ChannelParams::iterator it = m_params.find(channelID);
  173.         if (it != m_params.end())
  174.         {
  175.                 const SCommunicationChannelParams& params = it->second;
  176.  
  177.                 switch (params.type)
  178.                 {
  179.                 case SCommunicationChannelParams::Global:
  180.                         {
  181.                                 CommunicationChannel::Ptr& channel = stl::map_insert_or_get(m_globalChannels, channelID);
  182.                                 if (!channel)
  183.                                 {
  184.                                         CommunicationChannel::Ptr parent =
  185.                                           params.parentID ? GetChannel(params.parentID, sourceId) : CommunicationChannel::Ptr(0);
  186.  
  187.                                         channel.reset(new CommunicationChannel(parent, params, channelID));
  188.                                 }
  189.  
  190.                                 return channel;
  191.                         }
  192.                 case SCommunicationChannelParams::Group:
  193.                         {
  194.                                 int groupID = 0;
  195.                                 Channels& groupChannels = stl::map_insert_or_get(m_groupChannels, groupID);
  196.  
  197.                                 CommunicationChannel::Ptr& channel = stl::map_insert_or_get(groupChannels, channelID);
  198.                                 if (!channel)
  199.                                 {
  200.                                         CommunicationChannel::Ptr parent =
  201.                                           params.parentID ? GetChannel(params.parentID, sourceId) : CommunicationChannel::Ptr(0);
  202.  
  203.                                         channel.reset(new CommunicationChannel(parent, params, channelID));
  204.                                 }
  205.  
  206.                                 return channel;
  207.                         }
  208.                 case SCommunicationChannelParams::Personal:
  209.                         {
  210.                                 Channels& personalChannels = stl::map_insert_or_get(m_personalChannels, sourceId);
  211.  
  212.                                 CommunicationChannel::Ptr& channel = stl::map_insert_or_get(personalChannels, channelID);
  213.                                 if (!channel)
  214.                                 {
  215.                                         CommunicationChannel::Ptr parent =
  216.                                           params.parentID ? GetChannel(params.parentID, sourceId) : CommunicationChannel::Ptr(0);
  217.  
  218.                                         channel.reset(new CommunicationChannel(parent, params, channelID));
  219.                                 }
  220.  
  221.                                 return channel;
  222.                         }
  223.                 default:
  224.                         assert(0);
  225.                         break;
  226.                 }
  227.         }
  228.  
  229.         assert(0);
  230.  
  231.         return 0;
  232. }
  233.  
downloadCommunicationChannelManager.cpp Source code - Download CRYENGINE Source code
Related Source Codes/Software:
postal - 2017-06-11
reactide - Reactide is the first dedicated IDE for React web ... 2017-06-11
rkt - rkt is a pod-native container engine for Linux. It... 2017-06-11
uWebSockets - Tiny WebSockets https://for... 2017-06-11
realworld - TodoMVC for the RealWorld - Exemplary fullstack Me... 2017-06-11
CRYENGINE - CRYENGINE is a powerful real-time game development... 2017-06-11
goreplay - GoReplay is an open-source tool for capturing and ... 2017-06-10
pyenv - Simple Python version management 2017-06-10
redux-saga - An alternative side effect model for Redux apps ... 2017-06-10
angular-starter - 2017-06-10

 Back to top