Skip to content

Commit 4bf642b

Browse files
authored
Added remote server client list
Client now sends nickname to remote server, and remote server has new /list and /quit commands. Also updated Linux build for server.
2 parents fb3f5ba + ef1c878 commit 4bf642b

17 files changed

+654
-275
lines changed
Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
name: Build CS2RemoteConsole-server (Linux)
2+
3+
on:
4+
push:
5+
branches: [ master ]
6+
paths:
7+
- 'CS2RemoteConsole-server/**'
8+
pull_request:
9+
branches: [ master ]
10+
paths:
11+
- 'CS2RemoteConsole-server/**'
12+
workflow_dispatch:
13+
14+
jobs:
15+
build-cs2remoteconsole-server-linux:
16+
runs-on: ubuntu-latest
17+
18+
steps:
19+
- name: Checkout code
20+
uses: actions/checkout@v2
21+
22+
- name: Set up GCC
23+
uses: egor-tensin/setup-gcc@v1
24+
with:
25+
version: latest
26+
platform: x64
27+
28+
- name: Build CS2RemoteConsole-server
29+
run: |
30+
cd CS2RemoteConsole-server
31+
make
32+
33+
- name: Prepare artifact directory
34+
run: |
35+
mkdir -p artifact
36+
cp CS2RemoteConsole-server/CS2RemoteConsole-server artifact/
37+
38+
- name: Verify artifact contents
39+
run: |
40+
echo "Verifying artifact contents:"
41+
ls -l artifact
42+
43+
- name: Upload CS2RemoteConsole-server artifact
44+
uses: actions/upload-artifact@v2
45+
with:
46+
name: CS2RemoteConsole-server-linux-build
47+
path: artifact

CS2RemoteConsole-client/CS2RemoteConsole-client.vcxproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,6 @@
106106
<ClInclude Include="src\connection\connection_cs2console.h"/>
107107
<ClInclude Include="src\connection\connection_remoteserver.h"/>
108108
<ClInclude Include="src\constants.h" />
109-
<ClInclude Include="src\logging.h"/>
110109
<ClInclude Include="src\singletons.h" />
111110
<ClInclude Include="src\tui\tui.h"/>
112111
<ClInclude Include="src\utils.h"/>

CS2RemoteConsole-client/CS2RemoteConsole-client.vcxproj.filters

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@
4444
<ClInclude Include="src\connection_remoteserver.h">
4545
<Filter>Header Files</Filter>
4646
</ClInclude>
47-
<ClInclude Include="src\logging.h">
48-
<Filter>Header Files</Filter>
49-
</ClInclude>
5047
<ClInclude Include="src\payloads.h">
5148
<Filter>Header Files</Filter>
5249
</ClInclude>

CS2RemoteConsole-client/src/connection/connection_cs2console.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ void cs2ConsoleConnectorLoop()
5555
cs2ListenerThread.join();
5656
}
5757
cs2ListenerThread = std::thread(listenForCS2ConsoleData);
58+
vconsole.sendCmd("name"); // Get current player's in-game name
5859
}
5960
else
6061
{

CS2RemoteConsole-client/src/connection/connection_remoteserver.cpp

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
#include "connection_remoteserver.h"
22
#include <iostream>
3-
#include <ws2tcpip.h>
43
#include <chrono>
54
#include <spdlog/spdlog.h>
65

@@ -10,6 +9,8 @@ std::atomic<bool> remoteServerConnected(false);
109
std::thread remoteServerListenerThread;
1110
std::thread remoteServerConnectorThread;
1211

12+
ClientInfo globalClientInfo("");
13+
1314
bool connectToRemoteServer()
1415
{
1516
const std::string ip = Config::getInstance().get("remote_server_ip", "127.0.0.1");
@@ -39,6 +40,24 @@ bool connectToRemoteServer()
3940
return true;
4041
}
4142

43+
bool sendMessageToRemoteServer(const std::string& message)
44+
{
45+
if (remoteServerSock == INVALID_SOCKET)
46+
{
47+
spdlog::error("[RemoteServerConnection] Cannot send message: Not connected to remote server");
48+
return false;
49+
}
50+
51+
int sendResult = send(remoteServerSock, message.c_str(), static_cast<int>(message.length()), 0);
52+
if (sendResult == SOCKET_ERROR)
53+
{
54+
spdlog::error("[RemoteServerConnection] Failed to send message to remote server: {}", WSAGetLastError());
55+
return false;
56+
}
57+
58+
return true;
59+
}
60+
4261
void remoteServerConnectorLoop()
4362
{
4463
const int reconnect_delay = Config::getInstance().getInt("remote_server_reconnect_delay", 5000);
@@ -56,6 +75,20 @@ void remoteServerConnectorLoop()
5675
remoteServerListenerThread.join();
5776
}
5877
remoteServerListenerThread = std::thread(listenForRemoteServerData);
78+
79+
// Send player name if available
80+
if (!globalClientInfo.name.empty())
81+
{
82+
std::string nameMessage = "PLAYERNAME:" + globalClientInfo.name;
83+
if (sendMessageToRemoteServer(nameMessage))
84+
{
85+
spdlog::info("[RemoteServerConnection] Sent player name to remote server.");
86+
}
87+
else
88+
{
89+
spdlog::error("[RemoteServerConnection] Failed to send player name to remote server.");
90+
}
91+
}
5992
}
6093
else
6194
{

CS2RemoteConsole-client/src/connection/connection_remoteserver.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,18 @@ extern std::thread remoteServerConnectorThread;
2121
bool connectToRemoteServer();
2222
void remoteServerConnectorLoop();
2323
void listenForRemoteServerData();
24+
bool sendMessageToRemoteServer(const std::string& message);
2425
void cleanupRemoteServer();
2526

27+
struct ClientInfo
28+
{
29+
std::string name;
30+
31+
ClientInfo(const std::string& i): name(i)
32+
{
33+
}
34+
};
35+
36+
extern ClientInfo globalClientInfo;
37+
2638
#endif // CONNECTION_REMOTESERVER_H

CS2RemoteConsole-client/src/main.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
#include <atomic>
33
#include <thread>
44
#include <csignal>
5+
#include <regex>
56
#include <spdlog/spdlog.h>
67
#include <spdlog/sinks/basic_file_sink.h>
78
#include <spdlog/sinks/callback_sink.h>
@@ -40,6 +41,29 @@ void gracefulShutdown()
4041
std::cout << "CS2RemoteConsole shutdown complete. Bye-bye!..." << std::endl;
4142
}
4243

44+
void handlePRNT(const PRNT& prnt)
45+
{
46+
static const std::regex nameRegex(R"(name = (.+))");
47+
std::smatch match;
48+
49+
if (std::regex_search(prnt.message, match, nameRegex))
50+
{
51+
globalClientInfo.name = match[1].str();
52+
std::cout << "Player name updated: " << globalClientInfo.name << std::endl;
53+
54+
// Send the name to the remote server
55+
std::string nameMessage = "PLAYERNAME:" + globalClientInfo.name;
56+
if (sendMessageToRemoteServer(nameMessage))
57+
{
58+
std::cout << "Sent player name to remote server." << std::endl;
59+
}
60+
else
61+
{
62+
std::cerr << "Failed to send player name to remote server." << std::endl;
63+
}
64+
}
65+
}
66+
4367
int main()
4468
{
4569
try
@@ -80,6 +104,10 @@ int main()
80104
vconsole.setOnPRNTReceived([&](const PRNT& PRNT)
81105
{
82106
tui.addConsoleMessage(PRNT.channelID, PRNT.message, PRNT.color);
107+
if (globalClientInfo.name.empty())
108+
{
109+
handlePRNT(PRNT);
110+
}
83111
});
84112

85113
spdlog::info("[Main] Starting {}", application_name);

CS2RemoteConsole-server/CS2RemoteConsole-server.vcxproj

Lines changed: 9 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -87,78 +87,15 @@
8787
</Link>
8888
</ItemDefinitionGroup>
8989
<ItemGroup>
90-
<ClCompile Include="main.cpp">
91-
<RuntimeLibrary>MultiThreadedDebugDll</RuntimeLibrary>
92-
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
93-
<Optimization>Disabled</Optimization>
94-
<SupportJustMyCode>true</SupportJustMyCode>
95-
<AssemblerOutput>NoListing</AssemblerOutput>
96-
<AssemblerListingLocation>x64\Debug\</AssemblerListingLocation>
97-
<UndefineAllPreprocessorDefinitions>false</UndefineAllPreprocessorDefinitions>
98-
<BrowseInformation>false</BrowseInformation>
99-
<BrowseInformationFile>x64\Debug\</BrowseInformationFile>
100-
<CompileAs>Default</CompileAs>
101-
<ConformanceMode>true</ConformanceMode>
102-
<DiagnosticsFormat>Column</DiagnosticsFormat>
103-
<DisableLanguageExtensions>false</DisableLanguageExtensions>
104-
<ErrorReporting>Prompt</ErrorReporting>
105-
<ExpandAttributedSource>false</ExpandAttributedSource>
106-
<ExceptionHandling>Sync</ExceptionHandling>
107-
<EnableASAN>false</EnableASAN>
108-
<EnableFiberSafeOptimizations>false</EnableFiberSafeOptimizations>
109-
<EnableEnhancedInstructionSet>NotSet</EnableEnhancedInstructionSet>
110-
<FloatingPointModel>Precise</FloatingPointModel>
111-
<ForceConformanceInForLoopScope>true</ForceConformanceInForLoopScope>
112-
<GenerateModuleDependencies>false</GenerateModuleDependencies>
113-
<GenerateSourceDependencies>false</GenerateSourceDependencies>
114-
<GenerateXMLDocumentationFiles>false</GenerateXMLDocumentationFiles>
115-
<InlineFunctionExpansion>Default</InlineFunctionExpansion>
116-
<IntrinsicFunctions>false</IntrinsicFunctions>
117-
<IgnoreStandardIncludePath>false</IgnoreStandardIncludePath>
118-
<LanguageStandard>Default</LanguageStandard>
119-
<LanguageStandard_C>Default</LanguageStandard_C>
120-
<MinimalRebuild>false</MinimalRebuild>
121-
<ModuleDependenciesFile>x64\Debug\</ModuleDependenciesFile>
122-
<ModuleOutputFile>x64\Debug\</ModuleOutputFile>
123-
<OmitDefaultLibName>false</OmitDefaultLibName>
124-
<FavorSizeOrSpeed>Neither</FavorSizeOrSpeed>
125-
<WholeProgramOptimization>false</WholeProgramOptimization>
126-
<ObjectFileName>x64\Debug\</ObjectFileName>
127-
<CallingConvention>Cdecl</CallingConvention>
128-
<ProgramDataBaseFileName>x64\Debug\vc142.pdb</ProgramDataBaseFileName>
129-
<PrecompiledHeader>NotUsing</PrecompiledHeader>
130-
<PrecompiledHeaderFile>pch.h</PrecompiledHeaderFile>
131-
<PrecompiledHeaderOutputFile>x64\Debug\CS2RemoteConsole-server.pch</PrecompiledHeaderOutputFile>
132-
<PreprocessToFile>false</PreprocessToFile>
133-
<PreprocessKeepComments>false</PreprocessKeepComments>
134-
<PreprocessSuppressLineNumbers>false</PreprocessSuppressLineNumbers>
135-
<RemoveUnreferencedCodeData>true</RemoveUnreferencedCodeData>
136-
<ScanSourceForModuleDependencies>false</ScanSourceForModuleDependencies>
137-
<ShowIncludes>false</ShowIncludes>
138-
<SourceDependenciesFile>x64\Debug\</SourceDependenciesFile>
139-
<SuppressStartupBanner>true</SuppressStartupBanner>
140-
<BufferSecurityCheck>true</BufferSecurityCheck>
141-
<SmallerTypeCheck>false</SmallerTypeCheck>
142-
<SpectreMitigation>false</SpectreMitigation>
143-
<StructMemberAlignment>Default</StructMemberAlignment>
144-
<TrackerLogDirectory>x64\Debug\CS2Remot.3FAB76DA.tlog\</TrackerLogDirectory>
145-
<TranslateIncludes>false</TranslateIncludes>
146-
<MinimalRebuildFromTracking>true</MinimalRebuildFromTracking>
147-
<TreatWarningAsError>false</TreatWarningAsError>
148-
<TreatWChar_tAsBuiltInType>true</TreatWChar_tAsBuiltInType>
149-
<UseFullPaths>true</UseFullPaths>
150-
<WarningLevel>Level3</WarningLevel>
151-
<XMLDocumentationFileName>x64\Debug\</XMLDocumentationFileName>
152-
<DebugInformationFormat>EditAndContinue</DebugInformationFormat>
153-
<IntelJCCErratum>false</IntelJCCErratum>
154-
<TreatAngleIncludeAsExternal>false</TreatAngleIncludeAsExternal>
155-
<ExternalWarningLevel>InheritWarningLevel</ExternalWarningLevel>
156-
<TreatExternalTemplatesAsInternal>true</TreatExternalTemplatesAsInternal>
157-
<DisableAnalyzeExternal>false</DisableAnalyzeExternal>
158-
<PreprocessorDefinitions>_DEBUG;_CONSOLE;_UNICODE;UNICODE;</PreprocessorDefinitions>
159-
<SDLCheck>true</SDLCheck>
160-
<LinkCompiled>true</LinkCompiled>
161-
</ClCompile>
90+
<ClCompile Include="src\client_handler.cpp" />
91+
<ClCompile Include="src\main.cpp"/>
92+
<ClCompile Include="src\server.cpp" />
93+
<ClCompile Include="src\utils.cpp" />
94+
</ItemGroup>
95+
<ItemGroup>
96+
<ClInclude Include="src\client_handler.h" />
97+
<ClInclude Include="src\server.h" />
98+
<ClInclude Include="src\utils.h" />
16299
</ItemGroup>
163100
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
164101
<ImportGroup Label="ExtensionTargets">

CS2RemoteConsole-server/Makefile

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
CXX = g++
2+
CXXFLAGS = -std=c++17 -Wall -Wextra -pedantic
3+
LDFLAGS = -pthread
4+
5+
SRC_DIR = src
6+
OBJ_DIR = obj
7+
8+
SOURCES = $(wildcard $(SRC_DIR)/*.cpp)
9+
OBJECTS = $(SOURCES:$(SRC_DIR)/%.cpp=$(OBJ_DIR)/%.o)
10+
11+
TARGET = CS2RemoteConsole-server
12+
13+
.PHONY: all clean
14+
15+
all: $(TARGET)
16+
17+
$(TARGET): $(OBJECTS)
18+
$(CXX) $(OBJECTS) -o $@ $(LDFLAGS)
19+
20+
$(OBJ_DIR)/%.o: $(SRC_DIR)/%.cpp | $(OBJ_DIR)
21+
$(CXX) $(CXXFLAGS) -c $< -o $@
22+
23+
$(OBJ_DIR):
24+
mkdir -p $@
25+
26+
clean:
27+
rm -rf $(OBJ_DIR) $(TARGET)

0 commit comments

Comments
 (0)