diff --git a/Makefile b/Makefile index e1478ab..f35ca9a 100644 --- a/Makefile +++ b/Makefile @@ -4,9 +4,10 @@ clientsrc = $(wildcard src/*.c) \ clientobj = $(clientsrc:.c=.o) serversrc = $(wildcard src/*.c) \ src/server/SilverMUDServer.c -serverobj = $(serversrc:.c=.o) -CLIENTLDFLAGS= -lpthread -lncurses -lgnutls -SERVERLDFLAGS= -lpthread -lncurses -lgnutls +serverobj = $(serversrc:.c=.o) +CFLAGS = `pkg-config --cflags guile-3.0` +CLIENTLDFLAGS= -lpthread -lncurses -lgnutls `pkg-config --libs guile-3.0` +SERVERLDFLAGS= -lpthread -lncurses -lgnutls `pkg-config --libs guile-3.0` SilverMUDClient: $(clientobj) gcc -o $@ $^ $(CLIENTLDFLAGS) diff --git a/src/areadata.h b/src/areadata.h index 327db34..26356fe 100644 --- a/src/areadata.h +++ b/src/areadata.h @@ -12,6 +12,7 @@ // Let the compiler know that we're going to define these types: typedef struct playerPath playerPath; typedef struct playerArea playerArea; +typedef struct list list; // A path, which contains a name, and a pointer to the area which the player will travel to: struct playerPath diff --git a/src/schemeintegration.c b/src/schemeintegration.c new file mode 100644 index 0000000..cb72202 --- /dev/null +++ b/src/schemeintegration.c @@ -0,0 +1,11 @@ +// schemeintegration.h: Function definitions for SilverMUD's Scheme integration. +// Barra Ó Catháin, 2023. +#include +#include "schemeintegration.h" + +void * schemeHandler(void * parameters) +{ + scm_init_guile(); + scm_shell(0, NULL); +} + diff --git a/src/schemeintegration.h b/src/schemeintegration.h new file mode 100644 index 0000000..feef3f9 --- /dev/null +++ b/src/schemeintegration.h @@ -0,0 +1,16 @@ +// schemeintegration.h: Data-structures and function prototypes for SilverMUD's Scheme integration. +// Barra Ó Catháin, 2023. +#ifndef SCHEMEINTEGRATION_H +#define SCHEMEINTEGRATION_H +#include "linkedlist.h" + +typedef struct list list; + +typedef struct SchemeThreadParameters +{ + list * areaList, * skillList; +} SchemeThreadParameters; + +void * schemeHandler(void * parameters); + +#endif diff --git a/src/server/SilverMUDServer.c b/src/server/SilverMUDServer.c index 5b18ccf..a4bd6b2 100644 --- a/src/server/SilverMUDServer.c +++ b/src/server/SilverMUDServer.c @@ -26,6 +26,7 @@ #include "../linkedlist.h" #include "../texteffects.h" #include "../inputoutput.h" +#include "../schemeintegration.h" typedef struct sockaddr sockaddr; void sigintHandler(int signal) @@ -41,7 +42,7 @@ int main(int argc, char ** argv) int socketFileDesc, connectionFileDesc, length, clientsAmount, socketCheck, activityCheck, returnVal; fd_set connectedClients; - pthread_t gameLogicThread, outputThread; + pthread_t gameLogicThread, outputThread, schemeThread; int clientSockets[PLAYERCOUNT]; userMessage sendBuffer, receiveBuffer; playerInfo connectedPlayers[PLAYERCOUNT]; @@ -223,10 +224,13 @@ int main(int argc, char ** argv) outputParameters->tlssessions = tlssessions; outputParameters->connectedPlayers = connectedPlayers; pthread_create(&outputThread, NULL, &outputThreadHandler, outputParameters); - slowPrint("\tOutput Thread is:\t\033[32;40mGREEN.\033[0m\n", delay); - slowPrint("=====\n", delay); + + pthread_create(&schemeThread, NULL, &schemeHandler, NULL); + slowPrint("\tScheme Thread is:\t\033[32;40mGREEN.\033[0m\n", delay); + + slowPrint("=====\n", delay); while(true) { // Clear the set of file descriptors and add the master socket: