view src/reditor.h @ 1:f72be2054832

add: reditor.c reditor.h
author atsuki
date Sat, 10 Nov 2007 20:27:44 +0900
parents
children 7c2dca099a7b
line wrap: on
line source

#define REP_PORT 8766
//#define OTHER_REP_PORT 8765
#define BUFFSIZE   200
#define SOCK_MAX   5
#define MAX_FDS    10

#define REP_OPEN_CMD          1
#define REP_OPEN_ACK          2
#define REP_READ_CMD          3
#define REP_READ_ACK          4
#define REP_READ_FIN          5
#define REP_INSERT_CMD         6
#define REP_INSERT_STILL_ACK   7
#define REP_INSERT_FINISH_ACK  8
#define REP_DELETE_LINE_CMD   9
#define REP_DELETE_LINE_ACK  10
#define REP_CLOSE_CMD        11
#define REP_CLOSE_ACK        12
#define REP_REPLACE_CMD      13

//#define REP_CHANGE_FD_CMD    14
//#define REP_ENTER_RING_CMD   15
//#define REP_ENTER_RING_ACK   16

#define REP_JOIN_CMD         41
#define REP_JOIN_ACK         42
#define REP_GET_CMD          43
#define REP_GET_ACK          44
#define REP_PUT_CMD          45
#define REP_PUT_ACK          46
#define REP_SELECT_CMD       47
#define REP_SELECT_ACK       48
#define REP_REGISTER_CMD     49
#define REP_REGISTER_ACK     50
#define REP_DEREGISTER_CMD   51
#define REP_DEREGISTER_ACK   52
#define REP_QUIT_CMD         53
#define REP_QUIT_ACK         54


/* header and text
+-------+--------+--------+-------+--------+---------+--------------+
| rep   | session| editor | seqid | lineno | textsiz | text         |
| cmd   | id     | id     |       |        |         | include '\0' |
+-------+--------+--------+-------+--------+---------+--------------+
 o-----header section (network byte order)----------o
*/
/* header OFFSET */
#define REP_CMD_OFFSET      0 /* REP Command     */
#define REP_SID_OFFSET      4 /* Session ID      */
#define REP_EID_OFFSET      8 /* Editor ID       */
#define REP_SEQNUM_OFFSET  12 /* Sequence number */
#define REP_LNUM_OFFSET    16 /* Line number     */
#define REP_T_SIZE_OFFSET  20 /* TEXT size       */
#define REP_TEXT_OFFSET    24 /* TEXT            */

#define REP_HEADER_SIZE 24

#define REP_IGNORE    0
#define REP_AVAIL     1

#define SLINEUP_NAME "SessionLineup"
#define NO_NAME      "NO_NAME"       /* has not name like scratch */

#define SESSION_MAX 50

#define SESSION_NAME_MAX 50
#define HOSTNAME_LEN 50

//#define UID_MAX 99

 /* Wrapper for vim */

/* 扱うテキストバッファの型 */
//extern buf_T;
#define BUFTYPE buf_T
//#define CHAR char

 /* Wrapper END */

typedef struct rep_cmd {
    struct rep_cmd *next;
    unsigned int   lnum; /* line number */
    int            stat; /* REP_AVAIL or REP_IGNORE */
    
    unsigned int cmd;  /* command id */
    unsigned int sid;  /* session id */
    unsigned int eid;  /* editor id */
    unsigned int seq;  /* sequence number */
    unsigned int len;  /* length of text */
    
    char         *pkt; /* packed rep command */
} rep_cmd;

typedef struct rep_cmdlist {
    rep_cmd *head;
    int num;
} rep_cmdlist;

typedef struct session {
    struct session *next;
    
//    BUFTYPE *sbuf; /* Session Buffer */
    BUFTYPE *buf;   /* Editing Buffer */

    unsigned int sid;
    unsigned int smfd;
    unsigned int rfd;
    unsigned int sfd;
    char *sname;
    
    rep_cmdlist new_cmdlist; /* my REP command list */
    rep_cmdlist sent_cmdlist; /* my REP command list */
    rep_cmdlist fromsmcmlist; /* from sm */

    int permit; /* TRUE or FALSE */
//    rep_cmdlist others;  /* others REP command list*/
    
//    int sbuf_changed;

//    unsigned short uid;       /* user id */
//    int usercount; /* joined user number */

//    int sfd;    /* send fd       */
//    int rfd;    /* receive fd    */

    int prevline; /* Previous Edited line */
} Session;

typedef struct rep {
    Session *shead;  // linked list of session
    Session *slineup;  // buffer of session lineup 
    Session *cursession;

    BUFTYPE *scratch_buf;
    
    char *servername;
    char hostname[HOSTNAME_LEN];

    char *waiting_session_name;

    int eid;  /* editor id */
    int seqno; /* sequence number of REP command*/
    
    int smfd; /* socket connected to SessionManager */

    int permit;
} rep_T;


// extern rep_T * get_rep();
extern int rep_permit();
extern int rep_session_permit();
extern int rep_init();
extern void rep_start_create_cmds();
extern void rep_stop_create_cmds();

extern char* rep_input_param(char*, char*);

//extern int rep_connect(char*);
//extern int rep_add_cmd(rep_cmdlist*,unsigned short,unsigned short,unsigned int,char*);
//extern void rep_check_line_change(Session*,unsigned int);
extern int rep_register(unsigned int, unsigned int, int);
//extern int rep_clear_cmdlist(rep_cmdlist*);
//extern int rep_recv_cmds(int fd,rep_cmdlist*);
//extern int rep_send_cmds(int fd,rep_cmdlist*);
extern int rep_fd_check(int, fd_set*, fd_set*);
extern int rep_fd_set(fd_set*, fd_set*, int);
extern int rep_select(int);
extern void rep_prevline_flush();
extern void rep_end();

extern int rep_join(char *);
extern int rep_select_command(char *);
extern int rep_put(char *);

extern void rep_send_cur_cmdlist();