← Back to ratslair.com
aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--nships.c85
-rw-r--r--server.c47
2 files changed, 80 insertions, 52 deletions
diff --git a/nships.c b/nships.c
index f2957d6..667328d 100644
--- a/nships.c
+++ b/nships.c
@@ -1,6 +1,12 @@
#include <ncurses.h>
#include <stdlib.h>
#include <time.h>
+#include <stdio.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <arpa/inet.h>
+#include <unistd.h>
+#include <string.h>
#include "server.c"
@@ -74,42 +80,91 @@ int menu(int y, int x, int h, int w, int aLen, char it[][15], char *title)
wrefresh(menu);
}
delwin(menu);
+ clear();
if(o == 1)
return c;
else
return -1;
}
+void getstrwin(char * ip, char *title)
+{
+ char str[80];
+ echo();
+ WINDOW * getip = newwin(3, 20, (LINES - 3) / 2, (COLS - 20) / 2);
+ box(getip, 0, 0);
+ refresh();
+ mvwprintw(getip, 0, 1, title);
+ wmove(getip, 1, 1);
+ wgetnstr(getip, str, 13);
+ strncpy(ip, str, 128);
+ delwin(getip);
+ noecho();
+}
+
int main()
{
- struct player p1, p2, hostID;
+ struct player p1, p2;
struct items start = {3, {"Host Game", "Join Game", "Exit"}};
- int state = 0;
- char title[15] = "nships";
- bool exit = false;
+ int state = 0, e = 0, sfd, host;
+ char title[15] = "nships", nameTitle[20] = "Enter Name", ipTitle[20] = "Enter IP", ip[128];
initscr();
+ curs_set(0);
noecho();
- while(!exit)
+ WINDOW * g = newwin(100, 200, (LINES - 100) / 2, (COLS - 200) / 2);
+ refresh();
+ while(e == 0)
{
switch(state)
{
case 0:
- state = menu((LINES - 15) / 2, (COLS - 10) / 2, 5, 15, start.len, start.items, title);
- if(state == 0)
- state = 1;
- break;
- if(state == 1)
- state = 2;
- break;
- if(state == 2)
- exit = true;
+ state = menu((LINES - 5) / 2, (COLS - 15) / 2, 5, 15, start.len, start.items, title) + 1;
+ if(state == 3)
+ state = 4;
break;
case 1:
- hostID = fork()
+ clear();
+ printw("Waiting for client to connect");
+ refresh();
+ sfd = hostGame();
+ clear();
+ if(sfd == 0) {
+ printw("Failed to host");
+ state = 0;
+ }
+ else {
+ host = 1;
+ getstrwin(p1.name, "Enter your name");
+ state = 4;
+ }
break;
case 2:
+ getstrwin(ip, ipTitle);
+ sfd = joinGame(ip);
+ clear();
+ if(sfd == 0) {
+ printw("Failed to connect");
+ state = 0;
+ }
+ else {
+ host = 0;
+ getstrwin(p2.name, "Enter your name");
+ state = 4;
+ }
+ break;
+ case 3:
+ state = 4;
+ break;
+ case 4:
+ e = 1;
break;
}
+ refresh();
}
+ if(sfd != 0)
+ close(sfd);
+
+ endwin();
+ return 0;
}
diff --git a/server.c b/server.c
index 97f4c6d..5ccb94f 100644
--- a/server.c
+++ b/server.c
@@ -1,13 +1,6 @@
-#include <stdio.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <unistd.h>
-#include <string.h>
-
#define PORT 8888
-void hostGame()
+int hostGame()
{
int sfd, cfd, len, err = 0;
struct sockaddr_in addr, cli;
@@ -18,39 +11,26 @@ void hostGame()
err = (sfd = socket(AF_INET, SOCK_STREAM, 0));
if(err == -1)
- printf("Failed to create socket\n");
- else
- printf("Created socket\n");
+ return 0;
err = bind(sfd, (struct sockaddr*)&addr, sizeof(addr));
if(err == -1)
- printf("Failed to bind\n");
- else
- printf("Binded to socket\n");
+ return 0;
err = listen(sfd, 2);
if(err == -1)
- printf("Failed to listen");
- else
- printf("Listening...\n");
+ return 0;
len = sizeof(cli);
cfd = accept(sfd, (struct sockaddr*)&cli, &len);
if(cfd < 0)
- printf("Failed to accept connection");
- else
- printf("Accepted client\n");
-
- char buff[2048];
-
- read(cfd, buff, 2048);
- printf("%s", buff);
+ return 0;
- close(sfd);
+ return cfd;
}
-void joinGame(char *ip)
+int joinGame(char *ip)
{
int sfd, err = 0;
struct sockaddr_in addr;
@@ -62,18 +42,11 @@ void joinGame(char *ip)
err = (sfd = socket(AF_INET, SOCK_STREAM, 0));
if(err == -1)
- printf("Failed to create socket\n");
- else
- printf("Created socket\n");
+ return 0;
err = (connect(sfd, (struct sockaddr*)&addr, sizeof(addr)));
if(err == -1)
- printf("Failed to connect to server\n");
- else
- printf("Connected to server...\n");
-
- send(sfd, buff, strlen(buff), 0);
- printf("Sent message!\n");
+ return 0;
- close(sfd);
+ return sfd;
}