3 static void client_sigwinch_handler(int sig
) {
4 client
.need_resize
= true;
7 static bool client_send_packet(Packet
*pkt
) {
8 print_packet("client-send:", pkt
);
9 if (send_packet(server
.socket
, pkt
))
12 server
.running
= false;
16 static bool client_recv_packet(Packet
*pkt
) {
17 if (recv_packet(server
.socket
, pkt
)) {
18 print_packet("client-recv:", pkt
);
21 debug("client-recv: FAILED\n");
22 server
.running
= false;
26 static void client_show_cursor() {
31 static void client_restore_terminal() {
33 tcsetattr(0, TCSADRAIN
, &orig_term
);
37 static int client_mainloop() {
38 client
.need_resize
= true;
39 while (server
.running
) {
42 FD_SET(STDIN_FILENO
, &fds
);
43 FD_SET(server
.socket
, &fds
);
45 if (client
.need_resize
) {
47 if (ioctl(0, TIOCGWINSZ
, &ws
) != -1) {
53 if (client_send_packet(&pkt
))
54 client
.need_resize
= false;
58 if (select(server
.socket
+ 1, &fds
, NULL
, NULL
, NULL
) == -1) {
61 die("client-mainloop");
64 if (FD_ISSET(server
.socket
, &fds
)) {
66 if (client_recv_packet(&pkt
)) {
69 write_all(STDOUT_FILENO
, pkt
.u
.msg
, pkt
.len
);
72 client
.need_resize
= true;
80 if (FD_ISSET(STDIN_FILENO
, &fds
)) {
81 Packet pkt
= { .type
= MSG_CONTENT
};
82 ssize_t len
= read(STDIN_FILENO
, pkt
.u
.msg
, sizeof(pkt
.u
.msg
));
83 if (len
== -1 && errno
!= EAGAIN
&& errno
!= EINTR
)
86 debug("client-stdin: %c\n", pkt
.u
.msg
[0]);
88 if (pkt
.u
.msg
[0] == KEY_REDRAW
) {
89 client
.need_resize
= true;
90 } else if (pkt
.u
.msg
[0] == KEY_DETACH
) {
91 pkt
.type
= MSG_DETACH
;
93 client_send_packet(&pkt
);
96 client_send_packet(&pkt
);