Merge #eh20 stuff

This commit is contained in:
oxmox 2023-04-22 09:47:49 +02:00
commit 7774e7149b
4 changed files with 53 additions and 51 deletions

View file

@ -1,4 +1,6 @@
#include <nng/nng.h>
#include <nng/protocol/pubsub0/pub.h>
#include <nng/protocol/pubsub0/sub.h>
#include <imgui.h>
#include <imgui_internal.h>
@ -804,8 +806,33 @@ int main(int argc, char *argv[])
nng_set_resolve_thread_max(1);
ControllerContext ctx;
ctx.pub = make_ctrl_pub(CtrlUrlIpc);
ctx.sub = make_ctrl_sub(DoomUrlIpc);
// ctrl pub socket: ctrl -> dooms
if (int res = nng_pub0_open(&ctx.pub))
dp_nng_fatal("ctrl/nng_pub0_open", res);
if (int res = nng_listen(ctx.pub, CtrlUrlIpc, nullptr, 0))
dp_nng_fatal("ctrl/nng_listen/ipc", res);
if (int res = nng_listen(ctx.pub, CtrlUrlTcp, nullptr, 0))
dp_nng_fatal("ctrl/nng_listen/tcp4", res);
// ctrl sub socket: dooms -> ctrl
if (int res = nng_sub0_open(&ctx.sub))
dp_nng_fatal("ctrl/nng_sub0_open", res);
if (int res = nng_setopt(ctx.sub, NNG_OPT_SUB_SUBSCRIBE, "", 0))
dp_nng_fatal("ctrl/subscribe", res);
if (int res = nng_socket_set_ms(ctx.sub, NNG_OPT_RECVTIMEO, 100))
dp_nng_fatal("ctrl/recvtimeo", res);
if (int res = nng_listen(ctx.sub, DoomUrlIpc, NULL, 0))
dp_nng_fatal("make_ctrl_sub/nng_listen", res);
if (int res = nng_listen(ctx.sub, DoomUrlTcp, nullptr, 0))
dp_nng_fatal("ctrl/nng_listen/tcp4", res);
ctx.window = window;
ctx.renderer = renderer;
ctx.inputs.head.msgType = DP_MT_Inputs;

View file

@ -28,41 +28,6 @@ void dp_nng_init_limits(int ncpu_max, int pool_thread_limit_max, int resolv_thre
nng_set_resolve_thread_max(resolv_thread_limit);
}
nng_socket make_ctrl_pub(const char *url)
{
nng_socket sock;
int res = 0;
if ((res = nng_pub0_open(&sock)))
dp_nng_fatal("make_ctrl_pub/nng_pub0_open", res);
if ((res = nng_listen(sock, url, NULL, 0)))
dp_nng_fatal("make_ctrl_pub/nng_listen", res);
return sock;
}
nng_socket make_ctrl_sub(const char *url)
{
nng_socket sock;
int res = 0;
if ((res = nng_sub0_open(&sock)))
dp_nng_fatal("make_ctrl_sub/nng_sub0_open", res);
if ((res = nng_setopt(sock, NNG_OPT_SUB_SUBSCRIBE, "", 0)))
dp_nng_fatal("make_ctrl_sub/subscribe", res);
if ((res = nng_socket_set_ms(sock, NNG_OPT_RECVTIMEO, 100)))
dp_nng_fatal("make_ctrl_sub/recvtimeo", res);
if ((res = nng_listen(sock, url, NULL, 0)))
dp_nng_fatal("make_ctrl_sub/nng_listen", res);
return sock;
}
nng_socket make_doom_pub(const char *url)
{
nng_socket sock;

View file

@ -116,14 +116,14 @@ static inline bool dp_nng_is_timeout(int res)
return res == NNG_ETIMEDOUT || res == NNG_EAGAIN;
}
// Controller listens, Dooms dial.
// Controller listens, dooms dial.
static const char *const CtrlUrlIpc = "ipc://666_ctrl.socket"; // controller publishes here
static const char *const DoomUrlIpc = "ipc://666_doom.socket"; // dooms publish here
static const char *const CtrlUrlTcp = "tcp4://:42666"; // controller publishes here
static const char *const DoomUrlTcp = "tcp4://:42667"; // dooms publish here
static const char *const CtrlUrlTcp = "tcp://:42666"; // controller publishes here
static const char *const DoomUrlTcp = "tcp://:42667"; // dooms publish here
static const int CtrlPort = 42666; // controller publishes on this port
static const int DoomPort = 42667; // dooms publish here
nng_socket make_ctrl_pub(const char *url);
nng_socket make_ctrl_sub(const char *url);
nng_socket make_doom_pub(const char *url);
nng_socket make_doom_sub(const char *url);

View file

@ -209,12 +209,6 @@ DoomContext g_doomContext;
//
void IB_StartTic (void)
{
/* TODO: post input events (could this be done in IB_FinishUpdate? try it)
case SDL_KEYDOWN:
event.type = ev_keydown;
event.data1 = xlatekey(sdl_event.key.keysym.sym);
D_PostEvent(&event);
*/
}
void IB_GetFramebuffer(unsigned char **pixels, size_t *pitch)
@ -347,11 +341,27 @@ void IB_InitGraphics(const char *title, size_t screen_width, size_t screen_heigh
signal(SIGINT, I_Quit_Wrapper);
dp_nng_init_limits(1, 1, 1);
g_doomContext.pub = make_doom_pub(DoomUrlIpc);
g_doomContext.sub = make_doom_sub(CtrlUrlIpc);
int p = M_CheckParm("-dp-host");
if (p)
{
// use tcp transport with the host given on the command line
char url[1024];
snprintf(url, 1024, "tcp://%s:%d", myargv[p+1], DoomPort);
g_doomContext.pub = make_doom_pub(url);
snprintf(url, 1024, "tcp://%s:%d", myargv[p+1], CtrlPort);
g_doomContext.sub = make_doom_sub(url);
}
else
{
assert(false);
// use unix domain sockets
g_doomContext.pub = make_doom_pub(DoomUrlIpc);
g_doomContext.sub = make_doom_sub(CtrlUrlIpc);
}
g_doomContext.id = getpid();
g_doomContext.state = DP_DS_Ready;
g_doomContext.f = do_doom_ready;