Started on server. Can listen on socket, nothing else
This commit is contained in:
parent
19562a51d0
commit
ecf6115dd1
|
@ -3,4 +3,5 @@
|
||||||
main
|
main
|
||||||
*.o
|
*.o
|
||||||
vgcore*
|
vgcore*
|
||||||
*.core
|
*.core
|
||||||
|
open_card_table
|
8
Makefile
8
Makefile
|
@ -4,7 +4,11 @@ INC=-I/usr/local/include
|
||||||
BIN=main
|
BIN=main
|
||||||
DEBUG=-g
|
DEBUG=-g
|
||||||
|
|
||||||
all:
|
open_card_table: main.o oct_networking.o
|
||||||
$(CC) $(INC) $(CLIB) main.c -o $(BIN) $(DEBUG)
|
$(CC) $(INC) $(CLIB) -o open_card_table main.o oct_networking.o
|
||||||
|
|
||||||
|
%.o: %.c
|
||||||
|
$(CC) $(INC) $(CLIB) -c -o $@ $<
|
||||||
|
|
||||||
test:
|
test:
|
||||||
$(CC) $(INC) $(CLIB) test.c -o test $(DEBUG)
|
$(CC) $(INC) $(CLIB) test.c -o test $(DEBUG)
|
||||||
|
|
19
main.c
19
main.c
|
@ -3,6 +3,7 @@
|
||||||
#include <lua5.3/lauxlib.h>
|
#include <lua5.3/lauxlib.h>
|
||||||
#include "termbox_render.h"
|
#include "termbox_render.h"
|
||||||
#include "oct_termbox_sprite.h"
|
#include "oct_termbox_sprite.h"
|
||||||
|
#include "oct_networking.h"
|
||||||
|
|
||||||
#define TB_IMPL
|
#define TB_IMPL
|
||||||
#include "termbox.h"
|
#include "termbox.h"
|
||||||
|
@ -73,7 +74,23 @@ int initialize_everything(char* lua_file) {
|
||||||
oct_tb_initialize_lua(L);
|
oct_tb_initialize_lua(L);
|
||||||
if (luaL_dofile(L, lua_file)) return OCT_LUA_FILE_NOT_FOUND;
|
if (luaL_dofile(L, lua_file)) return OCT_LUA_FILE_NOT_FOUND;
|
||||||
lua_getglobal(L, "oct_init");
|
lua_getglobal(L, "oct_init");
|
||||||
lua_call(L, 0, 0);
|
lua_call(L, 0, 1);
|
||||||
|
int type = lua_tointeger(L, -1);
|
||||||
|
//printf("TYPE: %d\n", type);
|
||||||
|
if (type == OCT_TYPE_SERVER) {
|
||||||
|
// TODO make port a command line argument
|
||||||
|
if (!oct_network_server_init("1234")) {
|
||||||
|
printf("Could not establish a socket on port 1234\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (type == OCT_TYPE_CLIENT) {
|
||||||
|
//oct_network_client_init();
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Do nothing, offline
|
||||||
|
}
|
||||||
|
|
||||||
tb_init();
|
tb_init();
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,77 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <netdb.h>
|
||||||
|
#include <sys/socket.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "oct_networking.h"
|
||||||
|
|
||||||
|
struct {
|
||||||
|
int needs_recv;
|
||||||
|
int needs_send;
|
||||||
|
char recv_buffer[BUFFER_SIZE];
|
||||||
|
char send_buffer[BUFFER_SIZE];
|
||||||
|
|
||||||
|
int sock_fd;
|
||||||
|
|
||||||
|
} oct_network_client;
|
||||||
|
|
||||||
|
struct {
|
||||||
|
int needs_recv;
|
||||||
|
int needs_send;
|
||||||
|
char recv_buffer[BUFFER_SIZE];
|
||||||
|
char send_buffer[BUFFER_SIZE];
|
||||||
|
|
||||||
|
int sfd;
|
||||||
|
} oct_network_server;
|
||||||
|
|
||||||
|
int oct_network_server_init(char* port) {
|
||||||
|
oct_network_server.needs_recv = 0;
|
||||||
|
oct_network_server.needs_send = 0;
|
||||||
|
|
||||||
|
struct addrinfo hints;
|
||||||
|
memset(&hints, 0, sizeof(hints));
|
||||||
|
hints.ai_family = AF_UNSPEC; // ipv4 or ipv6
|
||||||
|
hints.ai_socktype = SOCK_DGRAM; // datagram
|
||||||
|
hints.ai_flags = AI_PASSIVE; // any IP address
|
||||||
|
hints.ai_protocol = 0; // any protocol
|
||||||
|
hints.ai_canonname = NULL;
|
||||||
|
hints.ai_addr = NULL;
|
||||||
|
hints.ai_next = NULL;
|
||||||
|
|
||||||
|
struct addrinfo* result;
|
||||||
|
int s = getaddrinfo(NULL, port, &hints, &result);
|
||||||
|
if (s != 0) {
|
||||||
|
//fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* getaddrinfo() returns a list of address structures.
|
||||||
|
Try each address until we successfully bind(2).
|
||||||
|
If socket(2) (or bind(2)) fails, we (close the socket
|
||||||
|
and) try the next address. */
|
||||||
|
|
||||||
|
struct addrinfo *rp;
|
||||||
|
|
||||||
|
for (rp = result; rp != NULL; rp = rp->ai_next) {
|
||||||
|
oct_network_server.sfd = socket(rp->ai_family, rp->ai_socktype,
|
||||||
|
rp->ai_protocol);
|
||||||
|
if (oct_network_server.sfd == -1)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (bind(oct_network_server.sfd, rp->ai_addr, rp->ai_addrlen) == 0)
|
||||||
|
break; /* Success */
|
||||||
|
|
||||||
|
close(oct_network_server.sfd);
|
||||||
|
}
|
||||||
|
|
||||||
|
freeaddrinfo(result);
|
||||||
|
if (!rp) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef OCT_NETWORKING_H
|
||||||
|
#define OCT_NETWORKING_H
|
||||||
|
|
||||||
|
#include <sys/socket.h>
|
||||||
|
|
||||||
|
#define BUFFER_SIZE 1024
|
||||||
|
|
||||||
|
#define OCT_TYPE_SERVER 1
|
||||||
|
#define OCT_TYPE_CLIENT 2
|
||||||
|
|
||||||
|
struct oct_network_client;
|
||||||
|
struct oct_network_server;
|
||||||
|
|
||||||
|
|
||||||
|
int oct_network_client_init();
|
||||||
|
int oct_network_server_init(char* port);
|
||||||
|
|
||||||
|
#endif
|
|
@ -6,3 +6,6 @@ function load_termbox_sprite(file_name)
|
||||||
io.close(file);
|
io.close(file);
|
||||||
return contents;
|
return contents;
|
||||||
end
|
end
|
||||||
|
|
||||||
|
OCT_TYPE_SERVER = 1;
|
||||||
|
OCT_TYPE_CLIENT = 2;
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
require("oct_utils")
|
||||||
|
require("termbox_defs")
|
||||||
|
|
||||||
|
text = oct_tb_sprite_new();
|
||||||
|
|
||||||
|
function oct_init()
|
||||||
|
text["shape"] = "THIS IS A TEST SERVER";
|
||||||
|
text["x"] = 50;
|
||||||
|
text["y"] = 10;
|
||||||
|
return OCT_TYPE_SERVER;
|
||||||
|
end
|
||||||
|
|
||||||
|
function oct_loop(key)
|
||||||
|
-- Do nothing, for now
|
||||||
|
end
|
Loading…
Reference in New Issue