Merge branch 'Network' of https://github.com/dean11/Danbias into Network

This commit is contained in:
Pontus Fransson 2013-12-06 10:46:05 +01:00
commit bbb79a4ba9
4 changed files with 587 additions and 0 deletions

View File

@ -10,6 +10,8 @@ ThreadedClient::ThreadedClient()
this->connection = new Connection();
this->sendPostBox = new PostBox<SmartPointer<OysterByte>>();
this->recvPostBox = NULL;
connection->SetBlockingMode(false);
}
ThreadedClient::ThreadedClient(unsigned int socket)

View File

@ -0,0 +1,296 @@
/////////////////////////////////////////////////////////////////////
// Created by [Dennis Andersen] [2013]
/////////////////////////////////////////////////////////////////////
#include "CustomNetProtocol.h"
#include <map>
using namespace Network;
enum NetContainerType
{
NetContainer_Array,
NetContainer_Single,
NetContainer_UNKNOWN,
};
struct NetAttributeArray
{
NetAttributeContainer *value;
int count;
NetAttributeArray()
:value(0)
, count(0)
{}
};
union NetAttributeData
{
struct { NetAttributeContainer singleVal; };
struct { NetAttributeArray arrayVal; };
};
struct NetDataValue
{
NetContainerType containerType;
NetAttributeData attributeData;
NetDataValue()
{
//memset(&attributeData, 0, sizeof(NetAttributeData));
containerType = NetContainer_UNKNOWN;
attributeData.singleVal.type = NetAttributeType_UNKNOWN;
}
};
struct CustomNetProtocol::PrivateData
{
std::map<int, NetDataValue> attributes;
//DataValue *val;
//unsigned int size;
PrivateData()
{
//val = new DataValue[_size];
//size = _size;
}
~PrivateData()
{
for (auto i = attributes.begin(); i != attributes.end(); i++)
{
RemoveAttribute(i->first);
}
}
void RemoveAttribute(int ID)
{
auto i = attributes.find(ID);
if(i == attributes.end()) return;
if(i->second.containerType == NetContainer_Single)
{
switch (i->second.attributeData.singleVal.type)
{
case NetAttributeType_CharArray:
delete [] i->second.attributeData.singleVal.value.netCharPtr;
break;
}
}
else if(i->second.containerType == NetContainer_Array)
{
}
}
//Do network stuff
};
CustomNetProtocol::CustomNetProtocol()
{
this->privateData = new PrivateData();
}
CustomNetProtocol::~CustomNetProtocol()
{
delete this->privateData;
}
NetAttributeContainer* CustomNetProtocol::operator[](int ID)
{
NetAttributeContainer *retVal = 0;
if(this->privateData->attributes.find(ID) == this->privateData->attributes.end())
return retVal;
if(this->privateData->attributes[ID].containerType == NetContainer_Single)
retVal = &this->privateData->attributes[ID].attributeData.singleVal;
if(this->privateData->attributes[ID].containerType == NetContainer_Array)
retVal = this->privateData->attributes[ID].attributeData.arrayVal.value;
return retVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(NetAttributeContainer val, short ID)
{
if(val.type == NetAttributeType_UNKNOWN) return 0;
this->privateData->RemoveAttribute(ID);
this->privateData->attributes[ID].attributeData.singleVal = val;
return &this->privateData->attributes[ID].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(NetAttributeValue value, NetAttributeType type, short ID)
{
if(type == NetAttributeType_UNKNOWN) return 0;
this->privateData->RemoveAttribute(ID);
this->privateData->attributes[ID].attributeData.singleVal.value = value;
this->privateData->attributes[ID].attributeData.singleVal.type = type;
return &this->privateData->attributes[ID].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const bool & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netBool = attribute;
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_Bool;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const char & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netChar = attribute;
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_Char;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const unsigned char & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netUChar = attribute;
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_UnsignedChar;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const short & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netShort = attribute;
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_Short;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const unsigned short & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netUShort = attribute;
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_UnsignedShort;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const int & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netInt = attribute;
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_Int;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const unsigned int & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netUInt = attribute;
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_UnsignedInt;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const __int64 & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netInt64 = attribute;
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_Int64;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const unsigned __int64 & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netUInt64 = attribute;
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_UnsignedInt64;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const float & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netFloat = attribute;
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_Float;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const double & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netDouble = attribute;
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_Double;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const std::string & attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netCharPtr = _strdup(attribute.c_str());
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_CharArray;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
NetAttributeContainer* CustomNetProtocol::BuildValue(const char* attribute, short attributeId)
{
this->privateData->RemoveAttribute(attributeId);
this->privateData->attributes[attributeId].attributeData.singleVal.value.netCharPtr = _strdup(attribute);
this->privateData->attributes[attributeId].attributeData.singleVal.type = NetAttributeType_CharArray;
this->privateData->attributes[attributeId].containerType = NetContainer_Single;
return &this->privateData->attributes[attributeId].attributeData.singleVal;
}
//void CustomNetProtocol::SetArrayValue(NetAttributeContainer attribute[], unsigned int attributeCount, int ID)
//{
// if(this->privateData->attributes.find(ID) == this->privateData->attributes.end())
// {
// this->privateData->attributes[ID] = NetDataValue();
// }
//
// if(this->privateData->attributes[ID].containerType == NetContainer_UNKNOWN)
// this->privateData->attributes[ID].containerType = NetContainer_Array;
//
// this->privateData->attributes[ID].attributeData.arrayVal.value = attribute;
//}
NetAttributeContainer& CustomNetProtocol::GetSingleValue(int attributeID)
{
return this->privateData->attributes[attributeID].attributeData.singleVal;
}
//NetAttributeContainer* CustomNetProtocol::GetArrayValue(int attributeID)
//{
// return this->privateData->attributes[attributeID].attributeData.arrayVal.value;
//}

View File

@ -0,0 +1,118 @@
/////////////////////////////////////////////////////////////////////
// Created by [Dennis Andersen] [2013]
/////////////////////////////////////////////////////////////////////
#ifndef NETWORK_CUSTOM_NETWORK_PROTOCOL_H
#define NETWORK_CUSTOM_NETWORK_PROTOCOL_H
#include <string>
#ifdef CUSTOM_NET_PROTOCOL_EXPORT
#define NET_PROTOCOL_EXPORT __declspec(dllexport)
#else
#define NET_PROTOCOL_EXPORT __declspec(dllimport)
#endif
namespace Network
{
extern "C"
{
enum NetAttributeType
{
NetAttributeType_Bool,
NetAttributeType_Char,
NetAttributeType_UnsignedChar,
NetAttributeType_Short,
NetAttributeType_UnsignedShort,
NetAttributeType_Int,
NetAttributeType_UnsignedInt,
NetAttributeType_Int64,
NetAttributeType_UnsignedInt64,
NetAttributeType_Float,
NetAttributeType_Double,
NetAttributeType_CharArray,
NetAttributeType_UNKNOWN,
};
union NetAttributeValue
{
bool netBool;
char netChar;
unsigned char netUChar;
short netShort;
unsigned short netUShort;
int netInt;
unsigned int netUInt;
__int64 netInt64;
unsigned __int64 netUInt64;
float netFloat;
double netDouble;
char* netCharPtr;
NetAttributeValue(){ memset(this, 0, sizeof(NetAttributeValue)); }
NetAttributeValue(bool v) : netBool (v) {}
NetAttributeValue(char v) : netChar (v) {}
NetAttributeValue(unsigned char v) : netUChar (v) {}
NetAttributeValue(short v) : netShort (v) {}
NetAttributeValue(unsigned short v) : netUShort (v) {}
NetAttributeValue(int v) : netInt (v) {}
NetAttributeValue(unsigned int v) : netUInt (v) {}
NetAttributeValue(__int64 v) : netInt64 (v) {}
NetAttributeValue(unsigned __int64 v) : netUInt64 (v) {}
NetAttributeValue(float v) : netFloat (v) {}
NetAttributeValue(double v) : netDouble (v) {}
NetAttributeValue(char* v) : netCharPtr(v) {}
};
struct NetAttributeContainer
{
NetAttributeType type;
NetAttributeValue value;
NetAttributeContainer() { type = NetAttributeType_UNKNOWN; }
};
class NET_PROTOCOL_EXPORT CustomNetProtocol
{
public:
CustomNetProtocol();
~CustomNetProtocol();
NetAttributeContainer* operator[](int ID);
NetAttributeContainer* BuildValue(NetAttributeContainer value, short attributeId);
NetAttributeContainer* BuildValue(NetAttributeValue value, NetAttributeType type, short attributeId);
NetAttributeContainer* BuildValue(const bool & attribute, short attributeId);
NetAttributeContainer* BuildValue(const char & attribute, short attributeId);
NetAttributeContainer* BuildValue(const unsigned char & attribute, short attributeId);
NetAttributeContainer* BuildValue(const short & attribute, short attributeId);
NetAttributeContainer* BuildValue(const unsigned short & attribute, short attributeId);
NetAttributeContainer* BuildValue(const int & attribute, short attributeId);
NetAttributeContainer* BuildValue(const unsigned int & attribute, short attributeId);
NetAttributeContainer* BuildValue(const __int64 & attribute, short attributeId);
NetAttributeContainer* BuildValue(const unsigned __int64 & attribute, short attributeId);
NetAttributeContainer* BuildValue(const float & attribute, short attributeId);
NetAttributeContainer* BuildValue(const double & attribute, short attributeId);
NetAttributeContainer* BuildValue(const std::string & attribute, short attributeId);
NetAttributeContainer* BuildValue(const char * attribute, short attributeId);
//void SetArrayValue(NetAttributeContainer attribute[], unsigned int attributeCount, int attributeId);
NetAttributeContainer& GetSingleValue(int attributeID);
//NetAttributeContainer* GetArrayValue(int attributeID);
private:
struct PrivateData;
PrivateData* privateData;
};
}//End extern "C"
} //End namespace Network
#endif // !NETWORK_CUSTOM_NETWORK_PROTOCOL_H

View File

@ -0,0 +1,171 @@
<?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="Debug|x64">
<Configuration>Debug</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration>
<Platform>x64</Platform>
</ProjectConfiguration>
</ItemGroup>
<PropertyGroup Label="Globals">
<ProjectGuid>{460D625F-2AC9-4559-B809-0BA89CEAEDF4}</ProjectGuid>
<Keyword>Win32Proj</Keyword>
<RootNamespace>NetworkProtocol</RootNamespace>
<ProjectName>NetworkProtocol</ProjectName>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>true</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<ConfigurationType>DynamicLibrary</ConfigurationType>
<UseDebugLibraries>false</UseDebugLibraries>
<PlatformToolset>v110</PlatformToolset>
<WholeProgramOptimization>true</WholeProgramOptimization>
<CharacterSet>Unicode</CharacterSet>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<ImportGroup Label="ExtensionSettings">
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
</ImportGroup>
<ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" 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 Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>C:\Program Files %28x86%29\Visual Leak Detector\include;$(IncludePath)</IncludePath>
<LibraryPath>C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath)</LibraryPath>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir>
<TargetName>$(ProjectName)_$(PlatformShortName)D</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<LinkIncremental>true</LinkIncremental>
<IncludePath>C:\Program Files %28x86%29\Visual Leak Detector\include;$(IncludePath)</IncludePath>
<LibraryPath>C:\Program Files %28x86%29\Visual Leak Detector\lib\Win32;$(LibraryPath)</LibraryPath>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir>
<TargetName>$(ProjectName)_$(PlatformShortName)D</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<LinkIncremental>false</LinkIncremental>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir>
<TargetName>$(ProjectName)_$(PlatformShortName)</TargetName>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<LinkIncremental>false</LinkIncremental>
<IntDir>$(SolutionDir)..\Obj\$(ProjectName)\$(PlatformShortName)\$(Configuration)\</IntDir>
<OutDir>$(SolutionDir)..\Bin\DLL\</OutDir>
<TargetName>$(ProjectName)_$(PlatformShortName)</TargetName>
</PropertyGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>CUSTOM_NET_PROTOCOL_EXPORT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile>
<PrecompiledHeader>
</PrecompiledHeader>
<WarningLevel>Level3</WarningLevel>
<Optimization>Disabled</Optimization>
<PreprocessorDefinitions>CUSTOM_NET_PROTOCOL_EXPORT;WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>CUSTOM_NET_PROTOCOL_EXPORT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ClCompile>
<WarningLevel>Level3</WarningLevel>
<PrecompiledHeader>
</PrecompiledHeader>
<Optimization>MaxSpeed</Optimization>
<FunctionLevelLinking>true</FunctionLevelLinking>
<IntrinsicFunctions>true</IntrinsicFunctions>
<PreprocessorDefinitions>CUSTOM_NET_PROTOCOL_EXPORT;WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<SDLCheck>true</SDLCheck>
</ClCompile>
<Link>
<SubSystem>Console</SubSystem>
<GenerateDebugInformation>true</GenerateDebugInformation>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="CustomNetProtocol.cpp" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="CustomNetProtocol.h" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project>