Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 13 additions & 5 deletions pixelnuke/canvas.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,10 +52,18 @@ static int canvas_do_layout = 0;

static CanvasLayer* canvas_layer_alloc(int size, int alpha) {
CanvasLayer * layer = malloc(sizeof(CanvasLayer));
if (layer == NULL) {
puts("Failed to malloc");
exit(1);
}
layer->size = size;
layer->format = alpha ? GL_RGBA : GL_RGB;
layer->mem = size * size * (alpha ? 4 : 3);
layer->data = malloc(sizeof(GLubyte) * layer->mem);
if (layer->data == NULL) {
puts("Failed to malloc");
exit(1);
}
memset(layer->data, 0, layer->mem);
return layer;
}
Expand Down Expand Up @@ -217,7 +225,7 @@ static void* canvas_render_loop(void * arg) {

glfwSetErrorCallback(glfw_error_callback);
if (!glfwInit()) {
puts("GLFW initialization failed");
puts("Filed to initializate GLFW");
if(canvas_on_close_cb)
(*canvas_on_close_cb)();
glfwTerminate();
Expand All @@ -228,7 +236,7 @@ static void* canvas_render_loop(void * arg) {

int err = glewInit();
if (err != GLEW_OK) {
puts("GLEW initialization failed");
puts("Failed to initialize GLEW");
printf("Error: %s\n", glewGetErrorString(err));
if(canvas_on_close_cb)
(*canvas_on_close_cb)();
Expand Down Expand Up @@ -264,8 +272,8 @@ static void* canvas_render_loop(void * arg) {

GLuint texSize = canvas_base->size;
if(canvas_width > texSize || canvas_height > texSize) {
float scale = ((float) max(canvas_width, canvas_height)) / (float) texSize;
glScalef(scale, scale, 1);
float scale = ((float) max(canvas_width, canvas_height)) / (float) texSize;
glScalef(scale, scale, 1);
}

canvas_draw_layer(canvas_base);
Expand Down Expand Up @@ -397,7 +405,7 @@ void canvas_get_px(unsigned int x, unsigned int y, uint32_t *rgba) {
void canvas_get_size(unsigned int *w, unsigned int *h) {
int texSize = canvas_base->size;
if(canvas_width > texSize || canvas_height > texSize) {
float scale = ((float) max(canvas_width, canvas_height)) / texSize;
float scale = ((float) max(canvas_width, canvas_height)) / texSize;
*w = min(texSize, canvas_width/scale);
*h = min(texSize, canvas_height/scale);
} else {
Expand Down
31 changes: 21 additions & 10 deletions pixelnuke/net.c
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,7 @@ static void netev_on_write(struct bufferevent *bev, void *arg) {
(*netcb_on_close)(client, 0);

bufferevent_free(bev);
printf("bufferevent_free: closed\n");
free(client);
}
}
Expand All @@ -117,15 +118,19 @@ static void netev_on_error(struct bufferevent *bev, short error, void *arg) {

// TODO: Some logging?
if (error & BEV_EVENT_EOF) {
printf("error EOF\n");
} else if (error & BEV_EVENT_ERROR) {
printf("error ERROR\n");
} else if (error & BEV_EVENT_TIMEOUT) {
printf("error TIMEOUT\n");
}

client->state = NET_CSTATE_CLOSING;
if (netcb_on_close)
(*netcb_on_close)(client, error);

bufferevent_free(bev);
printf("bufferevent_free: closed\n");
free(client);
}

Expand All @@ -135,22 +140,23 @@ static void on_accept(evutil_socket_t listener, short event, void *arg) {
socklen_t slen = sizeof(ss);
int fd = accept(listener, (struct sockaddr*) &ss, &slen);
if (fd < 0) {
perror("accept failed");
perror("Failed to accept");
} else if (fd > FD_SETSIZE) {
close(fd); // TODO: verify if this is needed. Only for select()? But libevent uses poll/kqueue?
printf("fd closed\n");
} else {
NetClient *client = calloc(1, sizeof(NetClient));
if (client == NULL) {
perror("client malloc failed");
perror("Failed to calloc client");
close(fd);
return;
}

client->sock_fd = fd;
evutil_make_socket_nonblocking(fd);
client->buf_ev = bufferevent_socket_new(base, fd,
BEV_OPT_CLOSE_ON_FREE);

evutil_make_socket_nonblocking(fd);
bufferevent_setcb(client->buf_ev, netev_on_read, netev_on_write,
netev_on_error, client);
bufferevent_setwatermark(client->buf_ev, EV_READ, 0, NET_MAX_BUFFER);
Expand All @@ -172,7 +178,10 @@ void net_start(int port, net_on_connect on_connect, net_on_read on_read,
struct event *listener_event;

line_buffer = malloc(sizeof(char)*NET_MAX_LINE);
if (!line_buffer)
err(1, "Failed to malloc");

event_enable_debug_mode();
evthread_use_pthreads();

//setvbuf(stdout, NULL, _IONBF, 0);
Expand All @@ -189,17 +198,17 @@ void net_start(int port, net_on_connect on_connect, net_on_read on_read,

sin.sin_family = AF_INET;
sin.sin_addr.s_addr = 0;
sin.sin_port = htons(1337);
sin.sin_port = htons(port);
listener = socket(AF_INET, SOCK_STREAM, 0);
evutil_make_socket_nonblocking(listener);
evutil_make_listen_socket_reuseable(listener);

if (bind(listener, (struct sockaddr*) &sin, sizeof(sin)) < 0) {
err(1, "bind failed");
err(1, "Failed to bind");
}

if (listen(listener, 16) < 0) {
err(1, "listen failed");
err(1, "Failed to listen");
}

listener_event = event_new(base, listener, EV_READ | EV_PERSIST, on_accept,
Expand All @@ -211,10 +220,12 @@ void net_start(int port, net_on_connect on_connect, net_on_read on_read,

void net_stop() {
event_base_loopbreak(base);
if(line_buffer) {
free(line_buffer);
line_buffer = NULL;
}
// we cannot free the line_buffer here because it may be needed (doc says
// "will abort the loop *after* the next event is completed").
//if(line_buffer) {
// free(line_buffer);
// line_buffer = NULL;
//}
}

void net_send(NetClient *client, const char * msg) {
Expand Down
4 changes: 2 additions & 2 deletions pixelnuke/pixelnuke.c
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ void px_on_read(NetClient *client, char *line) {
uint32_t x = fast_strtoul10(ptr, &endptr);
if (endptr == ptr) {
net_err(client,
"Invalid command (expected decimal as first parameter)");
"Invalid command (expected non-negative decimal as first parameter)");
return;
}
if (*endptr == '\0') {
Expand All @@ -85,7 +85,7 @@ void px_on_read(NetClient *client, char *line) {
uint32_t y = fast_strtoul10((ptr = endptr), &endptr);
if (endptr == ptr) {
net_err(client,
"Invalid command (expected decimal as second parameter)");
"Invalid command (expected non-negative decimal as second parameter)");
return;
}

Expand Down