summaryrefslogtreecommitdiff
path: root/utils/vmpi/testapps/ThreadedTCPSocketTest
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /utils/vmpi/testapps/ThreadedTCPSocketTest
downloadarchived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz
archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip
Diffstat (limited to 'utils/vmpi/testapps/ThreadedTCPSocketTest')
-rw-r--r--utils/vmpi/testapps/ThreadedTCPSocketTest/StdAfx.cpp15
-rw-r--r--utils/vmpi/testapps/ThreadedTCPSocketTest/StdAfx.h31
-rw-r--r--utils/vmpi/testapps/ThreadedTCPSocketTest/ThreadedTCPSocketTest.cpp198
-rw-r--r--utils/vmpi/testapps/ThreadedTCPSocketTest/ThreadedTCPSocketTest.vcproj253
4 files changed, 497 insertions, 0 deletions
diff --git a/utils/vmpi/testapps/ThreadedTCPSocketTest/StdAfx.cpp b/utils/vmpi/testapps/ThreadedTCPSocketTest/StdAfx.cpp
new file mode 100644
index 0000000..538b0e0
--- /dev/null
+++ b/utils/vmpi/testapps/ThreadedTCPSocketTest/StdAfx.cpp
@@ -0,0 +1,15 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+// stdafx.cpp : source file that includes just the standard includes
+// ThreadedTCPSocketTest.pch will be the pre-compiled header
+// stdafx.obj will contain the pre-compiled type information
+
+#include "stdafx.h"
+
+// TODO: reference any additional headers you need in STDAFX.H
+// and not in this file
diff --git a/utils/vmpi/testapps/ThreadedTCPSocketTest/StdAfx.h b/utils/vmpi/testapps/ThreadedTCPSocketTest/StdAfx.h
new file mode 100644
index 0000000..e29801c
--- /dev/null
+++ b/utils/vmpi/testapps/ThreadedTCPSocketTest/StdAfx.h
@@ -0,0 +1,31 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+// stdafx.h : include file for standard system include files,
+// or project specific include files that are used frequently, but
+// are changed infrequently
+//
+
+#if !defined(AFX_STDAFX_H__AA10D99C_786F_4324_86C6_4D7CDE546561__INCLUDED_)
+#define AFX_STDAFX_H__AA10D99C_786F_4324_86C6_4D7CDE546561__INCLUDED_
+
+#if _MSC_VER > 1000
+#pragma once
+#endif // _MSC_VER > 1000
+
+#define WIN32_LEAN_AND_MEAN // Exclude rarely-used stuff from Windows headers
+
+#include <stdio.h>
+#include <windows.h>
+#include <conio.h>
+
+// TODO: reference additional headers your program requires here
+
+//{{AFX_INSERT_LOCATION}}
+// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
+
+#endif // !defined(AFX_STDAFX_H__AA10D99C_786F_4324_86C6_4D7CDE546561__INCLUDED_)
diff --git a/utils/vmpi/testapps/ThreadedTCPSocketTest/ThreadedTCPSocketTest.cpp b/utils/vmpi/testapps/ThreadedTCPSocketTest/ThreadedTCPSocketTest.cpp
new file mode 100644
index 0000000..0b82c56
--- /dev/null
+++ b/utils/vmpi/testapps/ThreadedTCPSocketTest/ThreadedTCPSocketTest.cpp
@@ -0,0 +1,198 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//
+//=============================================================================//
+// ThreadedTCPSocketTest.cpp : Defines the entry point for the console application.
+//
+
+#include "stdafx.h"
+#include "IThreadedTCPSocket.h"
+#include "threadhelpers.h"
+#include "vstdlib/random.h"
+
+
+CCriticalSection g_MsgCS;
+
+
+IThreadedTCPSocket *g_pClientSocket = NULL;
+IThreadedTCPSocket *g_pServerSocket = NULL;
+
+CEvent g_ClientPacketEvent;
+CUtlVector<char> g_ClientPacket;
+
+
+
+SpewRetval_t MySpewFunc( SpewType_t type, char const *pMsg )
+{
+ CCriticalSectionLock csLock( &g_MsgCS );
+ csLock.Lock();
+
+ printf( "%s", pMsg );
+ OutputDebugString( pMsg );
+
+ csLock.Unlock();
+
+ if( type == SPEW_ASSERT )
+ return SPEW_DEBUGGER;
+ else if( type == SPEW_ERROR )
+ return SPEW_ABORT;
+ else
+ return SPEW_CONTINUE;
+}
+
+
+class CHandler_Server : public ITCPSocketHandler
+{
+public:
+ virtual void Init( IThreadedTCPSocket *pSocket )
+ {
+ }
+
+ virtual void OnPacketReceived( CTCPPacket *pPacket )
+ {
+ // Echo the data back.
+ g_pServerSocket->Send( pPacket->GetData(), pPacket->GetLen() );
+ pPacket->Release();
+ }
+
+ virtual void OnError( int errorCode, const char *pErrorString )
+ {
+ Msg( "Server error: %s\n", pErrorString );
+ }
+};
+
+
+
+class CHandler_Client : public ITCPSocketHandler
+{
+public:
+ virtual void Init( IThreadedTCPSocket *pSocket )
+ {
+ }
+
+ virtual void OnPacketReceived( CTCPPacket *pPacket )
+ {
+ if ( g_ClientPacket.Count() < pPacket->GetLen() )
+ g_ClientPacket.SetSize( pPacket->GetLen() );
+
+ memcpy( g_ClientPacket.Base(), pPacket->GetData(), pPacket->GetLen() );
+ g_ClientPacketEvent.SetEvent();
+ pPacket->Release();
+ }
+
+ virtual void OnError( int errorCode, const char *pErrorString )
+ {
+ Msg( "Client error: %s\n", pErrorString );
+ }
+};
+
+
+
+class CHandlerCreator_Server : public IHandlerCreator
+{
+public:
+ virtual ITCPSocketHandler* CreateNewHandler()
+ {
+ return new CHandler_Server;
+ }
+};
+
+class CHandlerCreator_Client : public IHandlerCreator
+{
+public:
+ virtual ITCPSocketHandler* CreateNewHandler()
+ {
+ return new CHandler_Client;
+ }
+};
+
+
+
+int main(int argc, char* argv[])
+{
+ SpewOutputFunc( MySpewFunc );
+
+ // Figure out a random port to use.
+ CCycleCount cnt;
+ cnt.Sample();
+ CUniformRandomStream randomStream;
+ randomStream.SetSeed( cnt.GetMicroseconds() );
+ int iPort = randomStream.RandomInt( 20000, 30000 );
+
+
+ g_ClientPacketEvent.Init( false, false );
+
+
+ // Setup the "server".
+ CHandlerCreator_Server serverHandler;
+ CIPAddr addr( 127, 0, 0, 1, iPort );
+
+ ITCPConnectSocket *pListener = ThreadedTCP_CreateListener(
+ &serverHandler,
+ (unsigned short)iPort );
+
+
+ // Setup the "client".
+ CHandlerCreator_Client clientCreator;
+ ITCPConnectSocket *pConnector = ThreadedTCP_CreateConnector(
+ CIPAddr( 127, 0, 0, 1, iPort ),
+ CIPAddr(),
+ &clientCreator );
+
+
+ // Wait for them to connect.
+ while ( !g_pClientSocket )
+ {
+ if ( !pConnector->Update( &g_pClientSocket ) )
+ {
+ Error( "Error in client connector!\n" );
+ }
+ }
+ pConnector->Release();
+
+
+ while ( !g_pServerSocket )
+ {
+ if ( !pListener->Update( &g_pServerSocket ) )
+ Error( "Error in server connector!\n" );
+ }
+ pListener->Release();
+
+
+ // Send some data.
+ __int64 totalBytes = 0;
+ CCycleCount startTime;
+ int iPacket = 1;
+
+ startTime.Sample();
+ CUtlVector<char> buf;
+
+ while ( (GetAsyncKeyState( VK_SHIFT ) & 0x8000) == 0 )
+ {
+ int size = randomStream.RandomInt( 1024*0, 1024*320 );
+ if ( buf.Count() < size )
+ buf.SetSize( size );
+
+ if ( g_pClientSocket->Send( buf.Base(), size ) )
+ {
+ // Server receives the data and echoes it back. Verify that the data is good.
+ WaitForSingleObject( g_ClientPacketEvent.GetEventHandle(), INFINITE );
+ Assert( memcmp( g_ClientPacket.Base(), buf.Base(), size ) == 0 );
+
+ totalBytes += size;
+ CCycleCount curTime, elapsed;
+ curTime.Sample();
+ CCycleCount::Sub( curTime, startTime, elapsed );
+ double flSeconds = elapsed.GetSeconds();
+ Msg( "Packet %d, %d bytes, %dk/sec\n", iPacket++, size, (int)(((totalBytes+511)/1024) / flSeconds) );
+ }
+ }
+
+ g_pClientSocket->Release();
+ g_pServerSocket->Release();
+ return 0;
+}
+
diff --git a/utils/vmpi/testapps/ThreadedTCPSocketTest/ThreadedTCPSocketTest.vcproj b/utils/vmpi/testapps/ThreadedTCPSocketTest/ThreadedTCPSocketTest.vcproj
new file mode 100644
index 0000000..60c80d4
--- /dev/null
+++ b/utils/vmpi/testapps/ThreadedTCPSocketTest/ThreadedTCPSocketTest.vcproj
@@ -0,0 +1,253 @@
+<?xml version="1.0" encoding="Windows-1252"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="ThreadedTCPSocketTest"
+ ProjectGUID="{6973F221-D381-4569-901F-6D5311FB4CD5}"
+ SccProjectName=""
+ SccAuxPath=""
+ SccLocalPath=""
+ SccProvider="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory=".\Debug"
+ IntermediateDirectory=".\Debug"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="..,..\..\..\public,..\..\..\public\tier1"
+ PreprocessorDefinitions="_DEBUG;WIN32;_CONSOLE;PROTECTED_THINGS_DISABLE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="1"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="stdafx.h"
+ PrecompiledHeaderFile=".\Debug/ThreadedTCPSocketTest.pch"
+ AssemblerListingLocation=".\Debug/"
+ ObjectFile=".\Debug/"
+ ProgramDataBaseFileName=".\Debug/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ws2_32.lib odbc32.lib odbccp32.lib"
+ OutputFile=".\Debug/ThreadedTCPSocketTest.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Debug/ThreadedTCPSocketTest.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Debug/ThreadedTCPSocketTest.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_DEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory=".\Release"
+ IntermediateDirectory=".\Release"
+ ConfigurationType="1"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="2">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ InlineFunctionExpansion="1"
+ AdditionalIncludeDirectories="..,..\..\..\public,..\..\..\public\tier1"
+ PreprocessorDefinitions="NDEBUG;WIN32;_CONSOLE;PROTECTED_THINGS_DISABLE"
+ StringPooling="TRUE"
+ RuntimeLibrary="0"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="stdafx.h"
+ PrecompiledHeaderFile=".\Release/ThreadedTCPSocketTest.pch"
+ AssemblerListingLocation=".\Release/"
+ ObjectFile=".\Release/"
+ ProgramDataBaseFileName=".\Release/"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="3"
+ CompileAs="0"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="ws2_32.lib odbc32.lib odbccp32.lib"
+ OutputFile=".\Release/ThreadedTCPSocketTest.exe"
+ LinkIncremental="1"
+ SuppressStartupBanner="TRUE"
+ GenerateDebugInformation="TRUE"
+ ProgramDatabaseFile=".\Release/ThreadedTCPSocketTest.pdb"
+ SubSystem="1"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ TypeLibraryName=".\Release/ThreadedTCPSocketTest.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1033"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath="StdAfx.cpp">
+ </File>
+ <File
+ RelativePath="..\ThreadedTCPSocket.cpp">
+ </File>
+ <File
+ RelativePath="..\ThreadedTCPSocketEmu.cpp">
+ </File>
+ <File
+ RelativePath="ThreadedTCPSocketTest.cpp">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="..\IThreadedTCPSocket.h">
+ </File>
+ <File
+ RelativePath="StdAfx.h">
+ </File>
+ <File
+ RelativePath="..\ThreadedTCPSocketEmu.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ </Filter>
+ <File
+ RelativePath="..\..\..\lib\public\dbg.lib">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description=""
+ CommandLine=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description=""
+ CommandLine=""/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\lib\public\platform.lib">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description=""
+ CommandLine=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description=""
+ CommandLine=""/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="ReadMe.txt">
+ </File>
+ <File
+ RelativePath="..\..\..\lib\public\vmpi.lib">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description=""
+ CommandLine=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description=""
+ CommandLine=""/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="..\..\..\lib\public\vstdlib.lib">
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description=""
+ CommandLine=""/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCustomBuildTool"
+ Description=""
+ CommandLine=""/>
+ </FileConfiguration>
+ </File>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>