Ignore:
Timestamp:
Jul 27, 2008, 4:33:30 AM (12 years ago)
Author:
Pascal Terjan
Message:
  • Add missing part in detach code (a lot of cleanup and fixes needed)
File:
1 edited

Legend:

Unmodified
Added
Removed
  • neercs/trunk/src/server.c

    r2588 r2589  
    3535#include "neercs.h"
    3636
    37 static int send_to_client(const char * msg, int sock)
    38 {
    39     if(strcmp(msg, "REFRESH"))
    40         debug("Sending message (%s) to client on socket %d", msg, sock);
    41     return 0;
    42 }
    43 
    44 static int set_title(const char * title, int sock)
     37static int send_to_client(const char * msg, struct screen_list* screen_list)
     38{
     39    int ret;
     40    if(!screen_list->c_socket)
     41        connect_client(screen_list);
     42    debug("Sending message (%s) to client on socket %d", msg, screen_list->c_socket);
     43    if(!screen_list->c_socket)
     44        ret = -1;
     45    else
     46        ret = write(screen_list->c_socket, msg, strlen(msg));
     47    if(ret < 0)
     48        fprintf(stderr, "Failed to send message to client: %s\n", strerror(errno));
     49    return ret;
     50}
     51
     52static int set_title(const char * title, struct screen_list* screen_list)
    4553{
    4654    char buf[1024];
     
    5058    buf[bytes] = '\0';
    5159
    52     return send_to_client(buf, sock);
    53 }
    54 
    55 static int set_cursor(int state, int sock)
     60    return send_to_client(buf, screen_list);
     61}
     62
     63static int set_cursor(int state, struct screen_list* screen_list)
    5664{
    5765    char buf[16];
     
    6169    buf[bytes] = '\0';
    6270
    63     return send_to_client(buf, sock);
    64 }
    65 
    66 static int request_refresh(int sock)
    67 {
    68     return send_to_client("REFRESH", sock);
     71    return send_to_client(buf, screen_list);
     72}
     73
     74static int request_refresh(struct screen_list* screen_list)
     75{
     76    int bytes;
     77    void *buf;
     78    char *buf2;
     79    debug("Resquesting refresh");
     80    buf = cucul_export_memory (screen_list->cv, "caca", &bytes);
     81    buf2 = malloc(bytes+8);
     82    memcpy(buf2, "REFRESH ", 8);
     83    memcpy(buf2+8, buf, bytes);
     84    if(!screen_list->c_socket)
     85        connect_client(screen_list);
     86    if(screen_list->c_socket)
     87        write(screen_list->c_socket, buf2, bytes+8);
     88    free(buf);
     89    free(buf2);
     90    return 0;
    6991}
    7092
     
    7294{
    7395    screen_list->attached = 0;
    74     return send_to_client("DETACH", screen_list->socket);
     96    return send_to_client("DETACH", screen_list);
    7597}
    7698
     
    85107
    86108    /* Create socket and bind it */
    87     create_socket(screen_list);
     109    create_server_socket(screen_list);
     110    connect_client(screen_list);
    88111
    89112    screen_list->width = screen_list->height = 10;
     
    146169
    147170        /* Check if we got something from the client */
    148         while (screen_list->socket && (n = read(screen_list->socket, buf, sizeof(buf)-1)) > 0)
     171        while (screen_list->s_socket && (n = read(screen_list->s_socket, buf, sizeof(buf)-1)) > 0)
    149172        {
    150173            buf[n] = 0;
    151174            debug("Received command %s", buf);
    152             if(!strncmp("ATTACH", buf, 7))
     175            if(!strncmp("ATTACH ", buf, 7))
    153176            {
    154177                screen_list->attached = 1;
     178                cucul_free_canvas(screen_list->cv);
     179                screen_list->cv = cucul_create_canvas(atoi(buf+7), atoi(buf+18));
     180                screen_list->width  = cucul_get_canvas_width(screen_list->cv);
     181                screen_list->height = cucul_get_canvas_height(screen_list->cv) - ((screen_list->mini*6) + (screen_list->status));
     182                update_windows_props(screen_list);
     183                cucul_clear_canvas(screen_list->cv);
    155184                refresh = 1;
    156185            }
     
    159188                quit = 1;
    160189            }
    161             else if(!strncmp("RESIZE", buf, 6))
    162             {
     190            else if(!strncmp("RESIZE ", buf, 7))
     191            {
     192                cucul_free_canvas(screen_list->cv);
     193                screen_list->cv = cucul_create_canvas(atoi(buf+7), atoi(buf+18));
     194                screen_list->width  = cucul_get_canvas_width(screen_list->cv);
     195                screen_list->height = cucul_get_canvas_height(screen_list->cv) - ((screen_list->mini*6) + (screen_list->status));
    163196                update_windows_props(screen_list);
    164197                cucul_clear_canvas(screen_list->cv);
     
    181214                    /* Not in command mode */
    182215                    last_key_time = get_us();
    183                     set_cursor(1, screen_list->socket);
     216                    set_cursor(1, screen_list);
    184217
    185218                    /* Kill screensaver */
     
    262295                if(screen_list->attached)
    263296                    if(screen_list->screen[screen_list->pty]->title)
    264                         set_title(screen_list->screen[screen_list->pty]->title, screen_list->socket);
     297                        set_title(screen_list->screen[screen_list->pty]->title, screen_list);
    265298                    else
    266                         set_title(PACKAGE_STRING, screen_list->socket);
     299                        set_title(PACKAGE_STRING, screen_list);
    267300                refresh = 1;
    268301
     
    274307                    screensaver_init(screen_list);
    275308                    screen_list->in_screensaver = 1;
    276                     set_cursor(0, screen_list->socket);
     309                    set_cursor(0, screen_list);
    277310                }
    278311                draw_screensaver(screen_list);
     
    291324        {
    292325            if(screen_list->attached)
    293                 request_refresh(screen_list->socket);
     326                request_refresh(screen_list);
    294327            refresh = 0;
    295328        }
     
    313346    }
    314347
    315     if(screen_list->socket_path) {
    316         unlink(screen_list->socket_path);
    317         free(screen_list->socket_path);
    318     }
    319 
    320     if(screen_list->socket)
    321         close(screen_list->socket);
     348    if(screen_list->s_socket_path)
     349    {
     350        unlink(screen_list->s_socket_path);
     351        free(screen_list->s_socket_path);
     352    }
     353
     354    if(screen_list->c_socket_path)
     355        free(screen_list->c_socket_path);
     356
     357    if(screen_list->s_socket)
     358        close(screen_list->s_socket);
     359
     360    if(screen_list->c_socket)
     361        close(screen_list->c_socket);
    322362
    323363    if(screen_list->screen) free(screen_list->screen);
Note: See TracChangeset for help on using the changeset viewer.