This commit is contained in:
2025-04-17 17:28:47 -05:00
parent a1e9401aaa
commit a79f40c66c
8 changed files with 135 additions and 4 deletions

View File

@@ -58,6 +58,7 @@
''; '';
}; };
Print = pkgs.stdenvNoCC.mkDerivation { Print = pkgs.stdenvNoCC.mkDerivation {
name = "Print"; name = "Print";
@@ -168,7 +169,6 @@
$imgui/*.cpp \ $imgui/*.cpp \
-DRENDERER_OPENGL \ -DRENDERER_OPENGL \
-DWINDOW_GLFW \ -DWINDOW_GLFW \
-DGUIMODULE \
-DTESTIMGUI_DYNAMIC \ -DTESTIMGUI_DYNAMIC \
-fpic -shared \ -fpic -shared \
-I src -I include -I $imgui -I . \ -I src -I include -I $imgui -I . \
@@ -214,4 +214,83 @@
''; '';
}; };
ChatServer = pkgs.stdenvNoCC.mkDerivation {
name = "ChatServer";
src = ./.;
nativeBuildInputs = with pkgs; [
clang
];
buildInputs = with pkgs; [
gamenetworkingsockets
];
buildPhase = ''
clang++ \
modules/examples/ChatServer/src/*.cpp \
modules/ServerModule/src/*.cpp \
-fpic -shared \
-I src -I include \
-I ${pkgs.gamenetworkingsockets}/include/GameNetworkingSockets \
-lGameNetworkingSockets \
-DCHATSERVER_DYNAMIC \
-Wall \
-o $name
'';
installPhase = ''
mkdir -p $out/bin
cp $name $out/bin
'';
};
ChatClient = pkgs.stdenvNoCC.mkDerivation {
name = "ChatClient";
src = ./.;
imgui = inputs.imgui;
nativeBuildInputs = with pkgs; [
clang
];
buildInputs = with pkgs; [
gamenetworkingsockets
];
buildPhase = ''
clang++ \
modules/examples/ChatClient/src/*.cpp \
modules/ClientModule/src/*.cpp \
-I ${pkgs.gamenetworkingsockets}/include/GameNetworkingSockets \
-lGameNetworkingSockets \
-DCLIENTMODULE_DYNAMIC \
modules/WindowModule/src/*.cpp \
modules/ImguiModule/src/*.cpp \
$imgui/backends/imgui_impl_glfw.cpp \
$imgui/backends/imgui_impl_opengl3.cpp \
$imgui/misc/cpp/*.cpp \
$imgui/*.cpp \
-DRENDERER_OPENGL \
-DWINDOW_GLFW \
-fpic -shared \
-I src -I include -I $imgui -I . \
-lGL -lglfw -lGLEW \
-Wall \
-o $name
'';
installPhase = ''
mkdir -p $out/bin
cp $name $out/bin
'';
};
} }

View File

@@ -90,6 +90,7 @@
''; '';
}; };
WindowModule = pkgs.stdenvNoCC.mkDerivation { WindowModule = pkgs.stdenvNoCC.mkDerivation {
name = "WindowModule"; name = "WindowModule";

View File

@@ -28,6 +28,8 @@ class ClientModule : public Archimedes::Module {
} }
bool isRunning() const { return running; }
void pollIncomingData(); void pollIncomingData();
void shouldHandleEvents(unsigned int events) { eventsToHandle = events; } void shouldHandleEvents(unsigned int events) { eventsToHandle = events; }

View File

@@ -48,7 +48,7 @@ void ServerModule::startServer(int p) {
pollGroup = interface->CreatePollGroup(); pollGroup = interface->CreatePollGroup();
if ( pollGroup == k_HSteamNetPollGroup_Invalid ) if ( pollGroup == k_HSteamNetPollGroup_Invalid )
std::cerr << "Failed to listen on port " << port << std::endl; std::cerr << "Failed to listen on port " << port << std::endl;
//Printf( "Server listening on port %d\n", port ); std::cerr << "Server listening on port " << port << std::endl;
running = true; running = true;
} }

View File

@@ -30,6 +30,8 @@ class ServerModule : public Archimedes::Module {
DataSent = 1 << 2 DataSent = 1 << 2
}; };
bool isRunning() const { return running; }
void shouldHandleEvents(unsigned int events) { eventsToHandle = events; } void shouldHandleEvents(unsigned int events) { eventsToHandle = events; }
void sendReliable(HSteamNetConnection client, const void* data, uint32 byteCount) { void sendReliable(HSteamNetConnection client, const void* data, uint32 byteCount) {

View File

@@ -23,7 +23,43 @@ void ChatClient::run() {
static ClientModule* cm; { cm = (ClientModule*) moduleInstances[ClientModule()]; } static ClientModule* cm; { cm = (ClientModule*) moduleInstances[ClientModule()]; }
(void)cm; if(open) {
static std::string s, addr;
ImGui::Begin("ChatClient Module", &open);
ImGui::InputText("Server Address: ", &addr);
if(cm->isRunning()) {
if(ImGui::Button("Disconnect") && cm->isRunning()) {
cm->stopClient();
}
} else {
if(ImGui::Button("Connect") && !cm->isRunning()) {
static SteamNetworkingIPAddr serverAddr;
serverAddr.ParseString(addr.c_str());
cm->startClient(serverAddr);
}
}
ImGui::Text("%s", messages.c_str());
ImGui::InputText("Message: ", &s);
ImGui::SameLine();
if(ImGui::Button("send")) {
cm->sendReliable(s.c_str(), (uint32) s.length());
}
ImGui::End();
} else {
app->stopModule(name);
}
} }
bool ChatClient::onEvent(const Archimedes::Event& event) { bool ChatClient::onEvent(const Archimedes::Event& event) {

View File

@@ -23,5 +23,11 @@ class ChatClient : public Archimedes::Module {
bool onEvent(const Archimedes::Event&); bool onEvent(const Archimedes::Event&);
private: private:
std::string messages; std::string messages = "";
bool open = true;
}; };
#ifdef CHATCLIENT_DYNAMIC
#define MODULE_TYPE ChatClient
#include "endModule.h"
#endif

View File

@@ -27,3 +27,8 @@ class ChatServer : public Archimedes::Module {
bool onEvent(const Archimedes::Event&); bool onEvent(const Archimedes::Event&);
}; };
#ifdef CHATSERVER_DYNAMIC
#define MODULE_TYPE ChatServer
#include "endModule.h"
#endif