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/main.c

    r2588 r2589  
    8383    char *user_path = NULL, *user_dir = NULL;
    8484    int i, args, s=0;
    85     int refresh = 1;
    8685    long long unsigned int last_key_time = 0;
    8786    int mainret = 0;
     
    253252            return -1;
    254253        }
     254
    255255        sockets = list_sockets(screen_list->socket_dir, screen_list->session_name);
    256256        if(sockets && sockets[0])
     
    259259            for(i=0; sockets[i]; i++);
    260260            i--;
    261             session = connect_server(sockets[i], screen_list);
     261            screen_list->s_socket_path = sockets[i];
     262            session = connect_server(screen_list);
    262263            if(session)
    263264            {
     265                /* Create main canvas and associated caca window */
     266                screen_list->cv = cucul_create_canvas(0, 0);
     267                screen_list->dp = caca_create_display(screen_list->cv);
     268                if(!screen_list->dp)
     269                    return 1;
     270                caca_set_cursor(screen_list->dp, 1);
     271
     272                screen_list->c_socket_path = build_socket_path(screen_list->socket_dir, session, 1);
     273                create_client_socket(screen_list);
    264274                request_attach(screen_list);
    265275                if(screen_list->session_name)
     
    270280            {
    271281                fprintf(stderr, "Failed to attach!\n");
     282                free(screen_list->s_socket_path);
     283                screen_list->s_socket_path = NULL;
    272284                attach = 0;
    273285            }
     
    298310        }
    299311    }
     312    if(!screen_list->c_socket_path)
     313        screen_list->c_socket_path =
     314            build_socket_path(screen_list->socket_dir, screen_list->session_name, 1);
     315
     316    if(!screen_list->s_socket_path)
     317        screen_list->s_socket_path =
     318            build_socket_path(screen_list->socket_dir, screen_list->session_name, 0);
    300319
    301320    /* Fork the server if needed */
     
    303322    {
    304323        pid_t pid;
    305 
    306         screen_list->socket_path = build_socket_path(screen_list->socket_path, screen_list->session_name);
    307324
    308325        pid = fork();
     
    337354            return server_main(to_grab, to_start, screen_list);
    338355        }
    339 
    340         free(connect_server(screen_list->socket_path, screen_list));
    341     }
    342 
    343     /* Create main canvas and associated caca window */
    344     screen_list->cv = cucul_create_canvas(0, 0);
    345     screen_list->dp = caca_create_display(screen_list->cv);
    346     if(!screen_list->dp)
    347         return 1;
    348     caca_set_cursor(screen_list->dp, 1);
    349     screen_list->width  = cucul_get_canvas_width(screen_list->cv);
    350     screen_list->height = cucul_get_canvas_height(screen_list->cv) - ((screen_list->mini*6) + (screen_list->status));
     356        create_client_socket(screen_list);
     357        free(connect_server(screen_list));
     358
     359        /* Create main canvas and associated caca window */
     360        screen_list->cv = cucul_create_canvas(0, 0);
     361        screen_list->dp = caca_create_display(screen_list->cv);
     362        if(!screen_list->dp)
     363            return 1;
     364        caca_set_cursor(screen_list->dp, 1);
     365
     366        request_attach(screen_list);
     367    }
    351368
    352369    last_key_time = get_us();
     
    357374        int ret = 0;
    358375        ssize_t n;
    359         char buf[4097];
    360 
    361         while (screen_list->socket && (n = read(screen_list->socket, buf, sizeof(buf)-1)) > 0)
     376        char buf[128*1024];
     377
     378        while (screen_list->c_socket && (n = read(screen_list->c_socket, buf, sizeof(buf)-1)) > 0)
    362379        {
    363380            buf[n] = 0;
     
    368385                break;
    369386            }
    370             else if(!strncmp("REFRESH", buf, 7))
    371             {
    372                 /* FIXME update the canvas first */
     387            else if(!strncmp("REFRESH ", buf, 8))
     388            {
     389                cucul_import_memory(screen_list->cv, buf+8, n-8, "caca");
     390
    373391                caca_refresh_display(screen_list->dp);
    374392            }
     
    382400                caca_refresh_display(screen_list->dp);
    383401            }
     402            else
     403            {
     404                debug("Unknown message received from server: %s", buf);
     405            }
    384406        }
    385407        if(ret)
     
    388410        ret = caca_get_event(screen_list->dp, CACA_EVENT_ANY, &ev, 100000);
    389411        if(ret)
    390             ret = send_event(ev, screen_list->socket);
     412            ret = send_event(ev, screen_list);
    391413
    392414        if(ret)
     
    405427    }
    406428
    407     if(screen_list->socket_path) {
    408         free(screen_list->socket_path);
    409     }
    410 
    411     if(screen_list->socket)
    412         close(screen_list->socket);
     429    if(screen_list->s_socket_path)
     430        free(screen_list->s_socket_path);
     431
     432    if(screen_list->c_socket_path)
     433    {
     434        unlink(screen_list->c_socket_path);
     435        free(screen_list->c_socket_path);
     436    }
     437
     438    if(screen_list->c_socket)
     439        close(screen_list->c_socket);
     440
     441    if(screen_list->s_socket)
     442        close(screen_list->s_socket);
    413443
    414444    if(screen_list->screen) free(screen_list->screen);
     
    479509    screen_list->lock_offset = 0;
    480510    screen_list->attached = 1;
    481     screen_list->socket = 0;
     511    screen_list->s_socket = 0;
     512    screen_list->c_socket = 0;
    482513    screen_list->socket_dir    = NULL;
    483     screen_list->socket_path   = NULL;
     514    screen_list->s_socket_path = NULL;
     515    screen_list->c_socket_path = NULL;
    484516    screen_list->session_name  = NULL;
    485517    screen_list->default_shell = NULL;
Note: See TracChangeset for help on using the changeset viewer.