network stuff
This commit is contained in:
parent
770f0783ec
commit
9627247bdc
@ -3,6 +3,8 @@ Microsoft Visual Studio Solution File, Format Version 11.00
|
|||||||
# Visual C++ Express 2010
|
# Visual C++ Express 2010
|
||||||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Salmon Engine", "Salmon Engine\Salmon Engine.vcxproj", "{48ADCE9F-9539-4D3A-BCFA-C2ABABAF0B20}"
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Salmon Engine", "Salmon Engine\Salmon Engine.vcxproj", "{48ADCE9F-9539-4D3A-BCFA-C2ABABAF0B20}"
|
||||||
EndProject
|
EndProject
|
||||||
|
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "UtilsEngine", "UtilsEngine\UtilsEngine.vcxproj", "{C29A7BA8-207A-46B8-AAAF-368AED22EC2A}"
|
||||||
|
EndProject
|
||||||
Global
|
Global
|
||||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||||
Debug_nosound|Win32 = Debug_nosound|Win32
|
Debug_nosound|Win32 = Debug_nosound|Win32
|
||||||
@ -16,6 +18,12 @@ Global
|
|||||||
{48ADCE9F-9539-4D3A-BCFA-C2ABABAF0B20}.Debug|Win32.Build.0 = Debug|Win32
|
{48ADCE9F-9539-4D3A-BCFA-C2ABABAF0B20}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
{48ADCE9F-9539-4D3A-BCFA-C2ABABAF0B20}.Release|Win32.ActiveCfg = Release|Win32
|
{48ADCE9F-9539-4D3A-BCFA-C2ABABAF0B20}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
{48ADCE9F-9539-4D3A-BCFA-C2ABABAF0B20}.Release|Win32.Build.0 = Release|Win32
|
{48ADCE9F-9539-4D3A-BCFA-C2ABABAF0B20}.Release|Win32.Build.0 = Release|Win32
|
||||||
|
{C29A7BA8-207A-46B8-AAAF-368AED22EC2A}.Debug_nosound|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{C29A7BA8-207A-46B8-AAAF-368AED22EC2A}.Debug_nosound|Win32.Build.0 = Debug|Win32
|
||||||
|
{C29A7BA8-207A-46B8-AAAF-368AED22EC2A}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||||
|
{C29A7BA8-207A-46B8-AAAF-368AED22EC2A}.Debug|Win32.Build.0 = Debug|Win32
|
||||||
|
{C29A7BA8-207A-46B8-AAAF-368AED22EC2A}.Release|Win32.ActiveCfg = Release|Win32
|
||||||
|
{C29A7BA8-207A-46B8-AAAF-368AED22EC2A}.Release|Win32.Build.0 = Release|Win32
|
||||||
EndGlobalSection
|
EndGlobalSection
|
||||||
GlobalSection(SolutionProperties) = preSolution
|
GlobalSection(SolutionProperties) = preSolution
|
||||||
HideSolutionNode = FALSE
|
HideSolutionNode = FALSE
|
||||||
|
@ -52,6 +52,8 @@
|
|||||||
<ClInclude Include="..\include\Utils\DataTypes\NewDataTypes.h" />
|
<ClInclude Include="..\include\Utils\DataTypes\NewDataTypes.h" />
|
||||||
<ClInclude Include="..\include\Utils\ErrorTypes\ErrorTypes.h" />
|
<ClInclude Include="..\include\Utils\ErrorTypes\ErrorTypes.h" />
|
||||||
<ClInclude Include="..\include\Utils\FileUtils\FileUtils.h" />
|
<ClInclude Include="..\include\Utils\FileUtils\FileUtils.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\Network\Network.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\Network\SignalSender.h" />
|
||||||
<ClInclude Include="..\include\Utils\PngHelper.h" />
|
<ClInclude Include="..\include\Utils\PngHelper.h" />
|
||||||
<ClInclude Include="..\include\Utils\SerializeInterface\SerializeInterface.h" />
|
<ClInclude Include="..\include\Utils\SerializeInterface\SerializeInterface.h" />
|
||||||
<ClInclude Include="..\include\Utils\ThreadUtils.h" />
|
<ClInclude Include="..\include\Utils\ThreadUtils.h" />
|
||||||
@ -92,6 +94,7 @@
|
|||||||
<ClCompile Include="..\src\Utils\DataTypes\DataTypes.cpp" />
|
<ClCompile Include="..\src\Utils\DataTypes\DataTypes.cpp" />
|
||||||
<ClCompile Include="..\src\Utils\DataTypes\NewDataTypes.cpp" />
|
<ClCompile Include="..\src\Utils\DataTypes\NewDataTypes.cpp" />
|
||||||
<ClCompile Include="..\src\Utils\FileUtils\FileUtils.cpp" />
|
<ClCompile Include="..\src\Utils\FileUtils\FileUtils.cpp" />
|
||||||
|
<ClCompile Include="..\src\Utils\Network\Network.cpp" />
|
||||||
<ClCompile Include="..\src\Utils\PngHelper.cpp" />
|
<ClCompile Include="..\src\Utils\PngHelper.cpp" />
|
||||||
<ClCompile Include="..\src\Utils\SerializeInterface\SerializeInterface.cpp" />
|
<ClCompile Include="..\src\Utils\SerializeInterface\SerializeInterface.cpp" />
|
||||||
<ClCompile Include="..\src\Utils\SimpleTimer.cpp" />
|
<ClCompile Include="..\src\Utils\SimpleTimer.cpp" />
|
||||||
|
95
UtilsEngine/UtilsEngine.vcxproj
Normal file
95
UtilsEngine/UtilsEngine.vcxproj
Normal file
@ -0,0 +1,95 @@
|
|||||||
|
<?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>{C29A7BA8-207A-46B8-AAAF-368AED22EC2A}</ProjectGuid>
|
||||||
|
<RootNamespace>UtilsEngine</RootNamespace>
|
||||||
|
</PropertyGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>true</UseDebugLibraries>
|
||||||
|
<CharacterSet>NotSet</CharacterSet>
|
||||||
|
</PropertyGroup>
|
||||||
|
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
|
||||||
|
<ConfigurationType>StaticLibrary</ConfigurationType>
|
||||||
|
<UseDebugLibraries>false</UseDebugLibraries>
|
||||||
|
<WholeProgramOptimization>true</WholeProgramOptimization>
|
||||||
|
<CharacterSet>NotSet</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 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>
|
||||||
|
<PropertyGroup Label="UserMacros" />
|
||||||
|
<PropertyGroup />
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>Disabled</Optimization>
|
||||||
|
<AdditionalIncludeDirectories>$(SalmonEnginePath);$(LibsPath)\boost_1_52_0;$(LibsPath)\openal\OpenAL11_windows_sdk;$(LibsPath)\libogg-1.3.0\include;$(LibsPath)\libvorbis-1.3.2\include;$(LibsPath)\sqplus\sqplus;$(LibsPath)\sqplus\include;$(LibsPath)\DirectXsdk\Include;$(LibsPath)\lpng1510</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>UTILS_ENGINE;TARGET_WIN32;WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0501;DEBUG</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||||
|
<ClCompile>
|
||||||
|
<WarningLevel>Level3</WarningLevel>
|
||||||
|
<Optimization>MaxSpeed</Optimization>
|
||||||
|
<FunctionLevelLinking>true</FunctionLevelLinking>
|
||||||
|
<IntrinsicFunctions>true</IntrinsicFunctions>
|
||||||
|
<AdditionalIncludeDirectories>$(SalmonEnginePath);$(LibsPath)\boost_1_52_0;$(LibsPath)\openal\OpenAL11_windows_sdk;$(LibsPath)\libogg-1.3.0\include;$(LibsPath)\libvorbis-1.3.2\include;$(LibsPath)\sqplus\sqplus;$(LibsPath)\sqplus\include;$(LibsPath)\DirectXsdk\Include;$(LibsPath)\lpng1510</AdditionalIncludeDirectories>
|
||||||
|
<PreprocessorDefinitions>UTILS_ENGINE;TARGET_WIN32;WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0501</PreprocessorDefinitions>
|
||||||
|
</ClCompile>
|
||||||
|
<Link>
|
||||||
|
<GenerateDebugInformation>true</GenerateDebugInformation>
|
||||||
|
<EnableCOMDATFolding>true</EnableCOMDATFolding>
|
||||||
|
<OptimizeReferences>true</OptimizeReferences>
|
||||||
|
</Link>
|
||||||
|
</ItemDefinitionGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClCompile Include="..\src\Utils\Console\Console.cpp" />
|
||||||
|
<ClCompile Include="..\src\Utils\DataTypes\DataTypes.cpp" />
|
||||||
|
<ClCompile Include="..\src\Utils\DataTypes\NewDataTypes.cpp" />
|
||||||
|
<ClCompile Include="..\src\Utils\FileUtils\FileUtils.cpp" />
|
||||||
|
<ClCompile Include="..\src\Utils\Network\Network.cpp" />
|
||||||
|
<ClCompile Include="..\src\Utils\SerializeInterface\SerializeInterface.cpp" />
|
||||||
|
<ClCompile Include="..\src\Utils\SimpleTimer.cpp" />
|
||||||
|
<ClCompile Include="..\src\Utils\ThreadUtils.cpp" />
|
||||||
|
<ClCompile Include="..\src\Utils\WinApi\WinApi.cpp" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<ClInclude Include="..\include\Utils\BindableVar.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\Console\console.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\DataTypes\DataTypes.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\DataTypes\NewDataTypes.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\ErrorTypes\ErrorTypes.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\FileUtils\FileUtils.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\Network\Network.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\Network\SignalSender.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\SerializeInterface\SerializeInterface.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\SimpleTimer.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\ThreadUtils.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\Utils.h" />
|
||||||
|
<ClInclude Include="..\include\Utils\WinApi\WinApi.h" />
|
||||||
|
</ItemGroup>
|
||||||
|
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||||
|
<ImportGroup Label="ExtensionTargets">
|
||||||
|
</ImportGroup>
|
||||||
|
</Project>
|
137
include/Utils/Network/Network.h
Normal file
137
include/Utils/Network/Network.h
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
#ifndef NETWORK_H_INCLUDED
|
||||||
|
#define NETWORK_H_INCLUDED
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
#include <map>
|
||||||
|
#include <vector>
|
||||||
|
#include "boost/shared_array.hpp"
|
||||||
|
#include "boost/property_tree/ptree.hpp"
|
||||||
|
#include "boost/foreach.hpp"
|
||||||
|
|
||||||
|
#include "boost/asio.hpp"
|
||||||
|
#include "boost/date_time/posix_time/posix_time.hpp"
|
||||||
|
#include "boost/signal.hpp"
|
||||||
|
#include "boost/variant.hpp"
|
||||||
|
|
||||||
|
#include "include/Utils/Network/SignalSender.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace SE
|
||||||
|
{
|
||||||
|
|
||||||
|
const int CONST_CONNECTION_TIMEOUT_SECONDS = 300;
|
||||||
|
|
||||||
|
|
||||||
|
void SendPropertyTree(boost::asio::io_service& ioService, boost::asio::ip::tcp::socket& socket, boost::property_tree::ptree pTree);
|
||||||
|
|
||||||
|
|
||||||
|
//Must be stored in shared_ptr only
|
||||||
|
struct TDataReader : public boost::enable_shared_from_this<TDataReader>
|
||||||
|
{
|
||||||
|
boost::asio::ip::tcp::socket& Socket;
|
||||||
|
|
||||||
|
int DataSize;
|
||||||
|
|
||||||
|
std::vector<char> Data;
|
||||||
|
|
||||||
|
TDataReader(boost::asio::ip::tcp::socket& socket);
|
||||||
|
|
||||||
|
void StartRead();
|
||||||
|
|
||||||
|
void HandleReadDataSize(const boost::system::error_code& error);
|
||||||
|
|
||||||
|
void HandleReadData(const boost::system::error_code& error);
|
||||||
|
|
||||||
|
boost::signal<void(boost::property_tree::ptree)> DataReadSignal;
|
||||||
|
boost::signal<void()> ErrorSignal;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
class TAuthorizationInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
virtual void Authorize() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
class TSimpleAuthorization : public TAuthorizationInterface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
|
||||||
|
boost::asio::io_service& IoService;
|
||||||
|
|
||||||
|
boost::asio::ip::tcp::socket& Socket;
|
||||||
|
|
||||||
|
//std::shared_ptr<TDataReader> DataReader;
|
||||||
|
|
||||||
|
std::string Login;
|
||||||
|
std::string Password;
|
||||||
|
|
||||||
|
|
||||||
|
TSimpleAuthorization(boost::asio::io_service& ioService, boost::asio::ip::tcp::socket& socket);
|
||||||
|
|
||||||
|
virtual void Authorize();
|
||||||
|
|
||||||
|
void HandleGetData(boost::property_tree::ptree pTree);
|
||||||
|
|
||||||
|
boost::signal<void()> AuthorizedSignal;
|
||||||
|
boost::signal<void(std::string, std::string)> SaveLoginPasswordSignal;
|
||||||
|
boost::signal<void()> ErrorSignal;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef boost::variant<std::shared_ptr<TSimpleAuthorization>> TAuthorizationVariant;
|
||||||
|
|
||||||
|
class TClientSocket : public boost::enable_shared_from_this<TClientSocket>
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
|
||||||
|
boost::asio::io_service IoService; //IoService must be declared before Socket
|
||||||
|
|
||||||
|
boost::thread IoServiceThread;
|
||||||
|
|
||||||
|
boost::asio::ip::tcp::socket Socket;
|
||||||
|
|
||||||
|
int ReadDataLenLong;
|
||||||
|
|
||||||
|
std::vector<char> ReadData;
|
||||||
|
|
||||||
|
boost::shared_ptr<boost::asio::deadline_timer> ConnectionTimeoutTimer;
|
||||||
|
|
||||||
|
bool Opened;
|
||||||
|
|
||||||
|
public:
|
||||||
|
boost::signal<void()> OnAddressNotResolvedSignal;
|
||||||
|
boost::signal<void()> OnConnectedSignal;
|
||||||
|
boost::signal<void()> OnAutorizedSignal;
|
||||||
|
boost::signal<void()> OnDisconnectedSignal;
|
||||||
|
|
||||||
|
TAuthorizationVariant Authorization;
|
||||||
|
|
||||||
|
TClientSocket();
|
||||||
|
~TClientSocket();
|
||||||
|
|
||||||
|
void IoServiceRun();
|
||||||
|
|
||||||
|
void Open(const std::string address, const std::string& port);
|
||||||
|
|
||||||
|
void Close();
|
||||||
|
|
||||||
|
void HandleConnectTimeout(const boost::system::error_code& error);
|
||||||
|
void HandleConnect(const boost::system::error_code& error);
|
||||||
|
|
||||||
|
void HandleAuthorized();
|
||||||
|
void HandleAuthorizationError();
|
||||||
|
};
|
||||||
|
|
||||||
|
class TServerSocket
|
||||||
|
{
|
||||||
|
protected:
|
||||||
|
public:
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
} //namespace SE
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
54
include/Utils/Network/SignalSender.h
Normal file
54
include/Utils/Network/SignalSender.h
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
#ifndef SIGNAL_SENDER_H_INCLUDED
|
||||||
|
#define SIGNAL_SENDER_H_INCLUDED
|
||||||
|
|
||||||
|
#include "boost/asio.hpp"
|
||||||
|
#include "boost/bind.hpp"
|
||||||
|
#include "boost/shared_ptr.hpp"
|
||||||
|
#include "boost/array.hpp"
|
||||||
|
#include "boost/enable_shared_from_this.hpp"
|
||||||
|
#include "boost/signal.hpp"
|
||||||
|
#include "boost/thread.hpp"
|
||||||
|
#include "boost/date_time/posix_time/posix_time.hpp"
|
||||||
|
#include "boost/property_tree/ptree.hpp"
|
||||||
|
#include "boost/property_tree/xml_parser.hpp"
|
||||||
|
|
||||||
|
namespace SE
|
||||||
|
{
|
||||||
|
//Xperimental -- need to optimize this
|
||||||
|
|
||||||
|
struct TSignalSender
|
||||||
|
: public boost::enable_shared_from_this<TSignalSender>
|
||||||
|
{
|
||||||
|
boost::asio::ip::tcp::socket& Socket;
|
||||||
|
|
||||||
|
int Length;
|
||||||
|
|
||||||
|
std::string Data;
|
||||||
|
|
||||||
|
boost::signal<void()> ErrorSignal;
|
||||||
|
|
||||||
|
TSignalSender(boost::asio::ip::tcp::socket& socket, int length, std::string data)
|
||||||
|
: Socket(socket)
|
||||||
|
, Length(length)
|
||||||
|
, Data(data)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void Send()
|
||||||
|
{
|
||||||
|
boost::asio::async_write(Socket, boost::asio::buffer(&Length, 4), boost::bind(&TSignalSender::Handle, shared_from_this(), boost::asio::placeholders::error));
|
||||||
|
boost::asio::async_write(Socket, boost::asio::buffer(Data.c_str(), Data.size()), boost::bind(&TSignalSender::Handle, shared_from_this(), boost::asio::placeholders::error));
|
||||||
|
}
|
||||||
|
|
||||||
|
void Handle(const boost::system::error_code& error)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
ErrorSignal();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
} //namespace SE
|
||||||
|
|
||||||
|
#endif
|
@ -26,6 +26,7 @@ This code combines additional routines (such as console/log, exceptions, math ut
|
|||||||
#include "include/Utils/BindableVar.h"
|
#include "include/Utils/BindableVar.h"
|
||||||
#include "include/Utils/SimpleTimer.h"
|
#include "include/Utils/SimpleTimer.h"
|
||||||
#include "include/Utils/ThreadUtils.h"
|
#include "include/Utils/ThreadUtils.h"
|
||||||
|
#include "include/Utils/Network/Network.h"
|
||||||
|
|
||||||
#ifdef TARGET_WIN32
|
#ifdef TARGET_WIN32
|
||||||
#include "WinApi/WinApi.h"
|
#include "WinApi/WinApi.h"
|
||||||
|
@ -501,9 +501,11 @@ TEdit* TEdit::CreateEditWithFillers(vec2 posFrom, vec2 posTo, std::vector<boost:
|
|||||||
|
|
||||||
void TEdit::EditFiller(vec2 posFrom, vec2 posTo, const std::string& texName, TTextParams textParams, TEdit* edit)
|
void TEdit::EditFiller(vec2 posFrom, vec2 posTo, const std::string& texName, TTextParams textParams, TEdit* edit)
|
||||||
{
|
{
|
||||||
TRenderParams renderParams = textParams.RenderParams;
|
|
||||||
|
TRenderParams renderParams;
|
||||||
|
|
||||||
renderParams.SamplerMap[CONST_STRING_TEXTURE_UNIFORM] = texName;
|
renderParams.SamplerMap[CONST_STRING_TEXTURE_UNIFORM] = texName;
|
||||||
|
renderParams.FloatMap[CONST_STRING_TRANSPARENCY_UNIFORM] = 1.f;
|
||||||
|
|
||||||
TTriangleList triangleList = MakeTriangleList(posFrom, posTo);
|
TTriangleList triangleList = MakeTriangleList(posFrom, posTo);
|
||||||
|
|
||||||
@ -512,6 +514,8 @@ void TEdit::EditFiller(vec2 posFrom, vec2 posTo, const std::string& texName, TTe
|
|||||||
edit->TriangleListVector.insert(edit->TriangleListVector.end(), TRenderPair(renderParams, triangleList));
|
edit->TriangleListVector.insert(edit->TriangleListVector.end(), TRenderPair(renderParams, triangleList));
|
||||||
|
|
||||||
|
|
||||||
|
renderParams = textParams.RenderParams;
|
||||||
|
|
||||||
if (textParams.FontName == "")
|
if (textParams.FontName == "")
|
||||||
{
|
{
|
||||||
textParams.FontName = ResourceManager->FontManager.GetCurrentFontName();
|
textParams.FontName = ResourceManager->FontManager.GetCurrentFontName();
|
||||||
@ -519,17 +523,19 @@ void TEdit::EditFiller(vec2 posFrom, vec2 posTo, const std::string& texName, TTe
|
|||||||
|
|
||||||
ResourceManager->FontManager.PushFont(textParams.FontName);
|
ResourceManager->FontManager.PushFont(textParams.FontName);
|
||||||
|
|
||||||
triangleList = CreateTriangleListForText(posFrom, posTo, textParams);
|
TTriangleList textTriangleList = CreateTriangleListForText(posFrom, posTo, textParams);
|
||||||
|
|
||||||
|
textTriangleList.RefreshBuffer();
|
||||||
|
|
||||||
renderParams.SamplerMap[CONST_STRING_TEXTURE_UNIFORM] = ResourceManager->FontManager.GetCurrentFontTextureName();
|
renderParams.SamplerMap[CONST_STRING_TEXTURE_UNIFORM] = ResourceManager->FontManager.GetCurrentFontTextureName();
|
||||||
|
|
||||||
edit->TextIterator = (edit->TriangleListVector.insert(edit->TriangleListVector.end(),TRenderPair(renderParams, triangleList)));
|
edit->TextIterator = (edit->TriangleListVector.insert(edit->TriangleListVector.end(),TRenderPair(renderParams, textTriangleList)));
|
||||||
triangleList.RefreshBuffer();
|
|
||||||
ResourceManager->FontManager.PopFont();
|
ResourceManager->FontManager.PopFont();
|
||||||
|
|
||||||
|
|
||||||
edit->TextParams = textParams;
|
edit->TextParams = textParams;
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TEdit::SmartValueTextFiller(const std::string& dictionaryName, const std::string& smartValueName, TEdit* edit)
|
void TEdit::SmartValueTextFiller(const std::string& dictionaryName, const std::string& smartValueName, TEdit* edit)
|
||||||
|
@ -129,6 +129,10 @@ void TApplication::OnKeyPress(cardinal key)
|
|||||||
Console->ConsoleInput = "";
|
Console->ConsoleInput = "";
|
||||||
Console->ConsoleCursor = Console->ConsoleInput.size();
|
Console->ConsoleCursor = Console->ConsoleInput.size();
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ResourceManager->GUIManager.KeyPressedSignal(static_cast<int>(key));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
242
src/Utils/Network/Network.cpp
Normal file
242
src/Utils/Network/Network.cpp
Normal file
@ -0,0 +1,242 @@
|
|||||||
|
#include "include/Utils/Utils.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace SE
|
||||||
|
{
|
||||||
|
|
||||||
|
void SendPropertyTree(boost::asio::io_service& ioService, boost::asio::ip::tcp::socket& socket, boost::property_tree::ptree pTree)
|
||||||
|
{
|
||||||
|
//Xperimental -- need to optimize this
|
||||||
|
|
||||||
|
std::stringstream o_stream;
|
||||||
|
|
||||||
|
boost::property_tree::write_xml(o_stream, pTree);
|
||||||
|
|
||||||
|
std::string data = o_stream.str();
|
||||||
|
|
||||||
|
int len = data.size();
|
||||||
|
|
||||||
|
boost::shared_ptr<TSignalSender> signalSender(new TSignalSender(socket, len, data));
|
||||||
|
|
||||||
|
ioService.post(boost::bind(&TSignalSender::Send, signalSender));
|
||||||
|
}
|
||||||
|
|
||||||
|
TDataReader::TDataReader(boost::asio::ip::tcp::socket& socket)
|
||||||
|
: Socket(socket)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDataReader::StartRead()
|
||||||
|
{
|
||||||
|
boost::asio::async_read(Socket, boost::asio::buffer(&DataSize, 4), boost::bind(&TDataReader::HandleReadDataSize, shared_from_this(), boost::asio::placeholders::error));
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDataReader::HandleReadDataSize(const boost::system::error_code& error)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
ErrorSignal();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (DataSize > 65536 || DataSize <= 0)
|
||||||
|
{
|
||||||
|
// len>65536 is something unbelievable. Prevent this just in case;
|
||||||
|
ErrorSignal();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Data.resize(DataSize);
|
||||||
|
|
||||||
|
boost::asio::async_read(Socket, boost::asio::buffer(Data), boost::bind(&TDataReader::HandleReadData, shared_from_this(), boost::asio::placeholders::error));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void TDataReader::HandleReadData(const boost::system::error_code& error)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
ErrorSignal();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//Xperimental - Might be optimized a lot:
|
||||||
|
|
||||||
|
std::string xmlCode = std::string(&Data[0], &Data[0] + Data.size());
|
||||||
|
|
||||||
|
std::stringstream stream(xmlCode);
|
||||||
|
|
||||||
|
boost::property_tree::ptree propertyTree;
|
||||||
|
|
||||||
|
boost::property_tree::read_xml(stream, propertyTree);
|
||||||
|
|
||||||
|
DataReadSignal(propertyTree);
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(boost::property_tree::ptree_error)
|
||||||
|
{
|
||||||
|
ErrorSignal();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TSimpleAuthorization::TSimpleAuthorization(boost::asio::io_service& ioService, boost::asio::ip::tcp::socket& socket)
|
||||||
|
: Socket(socket)
|
||||||
|
, IoService(ioService)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TSimpleAuthorization::Authorize()
|
||||||
|
{
|
||||||
|
std::shared_ptr<TDataReader> dataReader(new TDataReader(Socket));
|
||||||
|
|
||||||
|
dataReader->DataReadSignal.connect(boost::bind(&TSimpleAuthorization::HandleGetData, this, _1));
|
||||||
|
|
||||||
|
dataReader->ErrorSignal.connect(ErrorSignal);
|
||||||
|
|
||||||
|
boost::property_tree::ptree pt;
|
||||||
|
|
||||||
|
pt.put("Hello", "");
|
||||||
|
|
||||||
|
SendPropertyTree(IoService, Socket, pt);
|
||||||
|
|
||||||
|
dataReader->StartRead();
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TSimpleAuthorization::HandleGetData(boost::property_tree::ptree pTree)
|
||||||
|
{
|
||||||
|
if (pTree.find("OnHello") != pTree.not_found())
|
||||||
|
{
|
||||||
|
Login = p.get<std::string>("OnHello.Login");
|
||||||
|
Password = p.get<std::string>("OnHello.Password");
|
||||||
|
|
||||||
|
SaveLoginPasswordSignal(Login, Password);
|
||||||
|
AuthorizedSignal();
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ErrorSignal();
|
||||||
|
}
|
||||||
|
|
||||||
|
TClientSocket::TClientSocket()
|
||||||
|
: Socket(IoService)
|
||||||
|
, ReadDataLenLong(0)
|
||||||
|
, Opened(false)
|
||||||
|
, Authorization(std::shared_ptr<TSimpleAuthorization>(new TSimpleAuthorization(IoService, Socket)))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
TClientSocket::~TClientSocket()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void TClientSocket::IoServiceRun()
|
||||||
|
{
|
||||||
|
//Need try-catch here!
|
||||||
|
|
||||||
|
|
||||||
|
//To be run in separated thread
|
||||||
|
|
||||||
|
IoService.run();
|
||||||
|
|
||||||
|
IoService.reset();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TClientSocket::Open(const std::string address, const std::string& port)
|
||||||
|
{
|
||||||
|
boost::asio::ip::tcp::resolver resolver(IoService);
|
||||||
|
|
||||||
|
boost::asio::ip::tcp::resolver::query query(address.c_str(), port.c_str());
|
||||||
|
|
||||||
|
boost::system::error_code ec;
|
||||||
|
|
||||||
|
boost::asio::ip::tcp::resolver::iterator iterator = resolver.resolve(query, ec);
|
||||||
|
|
||||||
|
boost::asio::ip::tcp::resolver::iterator end;
|
||||||
|
|
||||||
|
if (ec)
|
||||||
|
{
|
||||||
|
OnAddressNotResolvedSignal();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boost::asio::async_connect(Socket, iterator, boost::bind(&TClientSocket::HandleConnect, shared_from_this(), boost::asio::placeholders::error));
|
||||||
|
|
||||||
|
ConnectionTimeoutTimer = boost::shared_ptr<boost::asio::deadline_timer>(new boost::asio::deadline_timer(IoService, boost::posix_time::seconds(CONST_CONNECTION_TIMEOUT_SECONDS)));
|
||||||
|
|
||||||
|
ConnectionTimeoutTimer->async_wait(boost::bind(&TClientSocket::HandleConnectTimeout, this, boost::asio::placeholders::error));
|
||||||
|
|
||||||
|
IoServiceThread = boost::thread(boost::bind(&TClientSocket::IoServiceRun, this));
|
||||||
|
}
|
||||||
|
|
||||||
|
void TClientSocket::Close()
|
||||||
|
{
|
||||||
|
if (Opened)
|
||||||
|
{
|
||||||
|
|
||||||
|
Opened = false;
|
||||||
|
|
||||||
|
ConnectionTimeoutTimer->cancel();
|
||||||
|
|
||||||
|
Socket.close();
|
||||||
|
|
||||||
|
OnDisconnectedSignal();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void TClientSocket::HandleConnectTimeout(const boost::system::error_code& error)
|
||||||
|
{
|
||||||
|
if (!error)
|
||||||
|
{
|
||||||
|
|
||||||
|
Socket.cancel();
|
||||||
|
|
||||||
|
IoService.stop();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void TClientSocket::HandleConnect(const boost::system::error_code& error)
|
||||||
|
{
|
||||||
|
if (error)
|
||||||
|
{
|
||||||
|
Socket.close();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
Opened = true;
|
||||||
|
|
||||||
|
OnConnectedSignal();
|
||||||
|
|
||||||
|
std::shared_ptr<TSimpleAuthorization> authorization = boost::get<std::shared_ptr<TSimpleAuthorization>>(Authorization);
|
||||||
|
|
||||||
|
authorization->AuthorizedSignal.connect(boost::bind(&TClientSocket::HandleAuthorized, this));
|
||||||
|
authorization->ErrorSignal.connect(boost::bind(&TClientSocket::HandleAuthorizationError, this));
|
||||||
|
|
||||||
|
authorization->Authorize();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void TClientSocket::HandleAuthorized()
|
||||||
|
{
|
||||||
|
OnAutorizedSignal();
|
||||||
|
}
|
||||||
|
|
||||||
|
void TClientSocket::HandleAuthorizationError()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
} //namspace SE
|
Loading…
Reference in New Issue
Block a user