Changeset 4380 for neercs


Ignore:
Timestamp:
Mar 6, 2010, 6:10:39 PM (10 years ago)
Author:
Sam Hocevar
Message:

Implement bidirectional communication in mini-neercs.

Location:
neercs/trunk/src
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/mini-client.c

    r4379 r4380  
    1717#endif
    1818
     19#include <stdio.h> /* BUFSIZ */
     20#include <string.h> /* strncmp() */
     21
     22#include <caca.h>
     23
    1924#include "mini-neercs.h"
    2025#include "mini-socket.h"
    21 
    22 #include <caca.h>
    2326
    2427static caca_display_t *dp;
     
    2831void client_init(void)
    2932{
    30     int i, usec = 1000;
     33    int i, usec = 10000;
    3134
    3235    cv = caca_create_canvas(0, 0);
    3336    dp = caca_create_display(cv);
    3437    caca_set_display_title(dp, "Press Esc to quit");
     38
     39    insock = socket_open("/tmp/neercs.sock.client", 1);
    3540
    3641    for (i = 0; i < 10; i++)
     
    4348    }
    4449
    45     insock = socket_open("/tmp/neercs.sock.client", 1);
    46 
    4750    socket_puts(outsock, "CONNECT /tmp/neercs.sock.client");
    4851}
     
    5154{
    5255    caca_event_t ev;
     56    int ret;
     57
     58    /* Handle client sockets */
     59    ret = socket_select(insock, 1000);
     60    if (ret > 0)
     61    {
     62        char buf[BUFSIZ];
     63        ssize_t bytes = socket_read(insock, buf, BUFSIZ);
     64        if (bytes <= 0)
     65            return 1;
     66
     67        /* Parse message */
     68        if (!strncmp(buf, "OK", strlen("OK")))
     69        {
     70            printf("Connection established\n");
     71        }
     72    }
     73
     74    /* Handle libcaca events */
    5375    if(caca_get_event(dp, CACA_EVENT_KEY_PRESS, &ev, 1000)
    5476        && caca_get_event_key_ch(&ev) == CACA_KEY_ESCAPE)
    5577        return 0;
     78
    5679    return 1;
    5780}
     
    6184    caca_free_display(dp);
    6285    caca_free_canvas(cv);
     86    if (insock)
     87        socket_close(insock);
     88    if (outsock)
     89        socket_close(outsock);
    6390}
    6491
  • neercs/trunk/src/mini-server.c

    r4379 r4380  
    1818
    1919#include <stdio.h> /* BUFSIZ */
     20#include <string.h> /* strncmp() */
    2021
    2122#include "mini-neercs.h"
     
    3132int server_step(void)
    3233{
    33     int ret = socket_select(insock, 10000);
     34    char buf[BUFSIZ];
     35    ssize_t bytes;
     36    int ret;
    3437
    35     if (ret > 0)
     38    ret = socket_select(insock, 1000);
     39    if (ret <= 0)
     40        return 1;
     41
     42    bytes = socket_read(insock, buf, BUFSIZ);
     43    if (bytes <= 0)
     44        return 1;
     45
     46    /* Parse message */
     47    if (!strncmp(buf, "CONNECT ", strlen("CONNECT ")))
    3648    {
    37         char buf[BUFSIZ];
    38         ssize_t bytes = socket_read(insock, buf, BUFSIZ);
    39         if (bytes > 0)
    40         {
    41             fprintf(stderr, "read: %s\n", buf);
    42             return 0;
    43         }
     49        outsock = socket_open(buf + strlen("CONNECT "), 0);
     50        socket_puts(outsock, "OK");
    4451    }
    45 //else fprintf(stderr, "no data \n");
    4652
    4753    return 1;
     
    5056void server_fini(void)
    5157{
    52     socket_close(insock);
     58    if (insock)
     59        socket_close(insock);
     60    if (outsock)
     61        socket_close(outsock);
    5362}
    5463
  • neercs/trunk/src/mini-socket.c

    r4379 r4380  
    100100    tv.tv_usec = usecs % 1000000;
    101101
    102     ret = select(1, &rfds, NULL, NULL, &tv);
     102    ret = select(sock->fd + 1, &rfds, NULL, NULL, &tv);
    103103    if (ret < 0)
    104104        return -1;
     
    112112int socket_puts(nrx_socket_t *sock, char const *str)
    113113{
    114     return write(sock->fd, str, strlen(str));
     114    int ret;
     115    ret = write(sock->fd, str, strlen(str));
     116    return ret;
    115117}
    116118
    117119ssize_t socket_read(nrx_socket_t *sock, void *buf, size_t count)
    118120{
    119     return read(sock->fd, buf, count);
     121    int ret;
     122    ret = read(sock->fd, buf, count);
     123    return ret;
    120124}
    121125
Note: See TracChangeset for help on using the changeset viewer.