83,11 → 83,17 |
mov dword[screen], eax |
DEBUGF 1, "Screen width=%u, height=%u\n", [screen.width]:2, [screen.height]:2 |
|
DEBUGF 1, "Sending pixel format\n" |
if BITS_PER_PIXEL = 8 |
mcall send, [socketnum], SetPixelFormat8, 20, 0 |
DEBUGF 1, "Sending pixel format\n" |
else if BITS_PER_PIXEL = 16 |
mcall send, [socketnum], SetPixelFormat16, 20, 0 |
else |
mcall send, [socketnum], SetPixelFormat24, 20, 0 |
end if |
|
DEBUGF 1, "Sending encoding info\n" |
mcall send, [socketnum], SetEncodings, 12, 0 |
DEBUGF 1, "Sending encoding info\n" |
|
; Set main window caption to servername |
mov ecx, dword[receive_buffer+framebuffer.name_length] |
126,7 → 132,6 |
cmp al, 3 |
je servercuttext |
|
|
DEBUGF 2, "Unknown server command: %u\n", al |
jmp thread_loop |
|
201,8 → 206,35 |
|
DEBUGF 1, "Server sent SetColourMapEntries message\n" |
|
; TODO |
@@: |
lea eax, [esi+5] |
cmp [datapointer], eax |
jae @f |
call read_data.more |
jmp @b |
@@: |
|
inc esi ; padding |
|
xor eax, eax |
lodsw ; first color (just ignore for now) |
|
lodsw ; number of colors (use to find end of message) |
xchg al, ah |
lea eax, [eax*2+eax] |
shl eax, 1 |
@@: |
push eax |
add eax, esi |
cmp [datapointer], eax |
jae @f |
call read_data.more |
pop eax |
jmp @b |
@@: |
pop eax |
|
add esi, eax ; Just skip it for now. |
jmp thread_loop |
|
|
248,16 → 280,22 |
mov esi, receive_buffer |
.more: |
push ebx ecx edx esi edi |
mcall recv, [socketnum], [datapointer], 4096, 0 |
neg esi |
add esi, receive_buffer + RECEIVE_BUFFER_SIZE |
jz .buffer_end_reached |
xor edi, edi |
mcall recv, [socketnum], [datapointer] |
pop edi esi edx ecx ebx |
cmp eax, -1 |
je err_disconnected |
je err_sock |
test eax, eax |
jz err_disconnected |
add [datapointer], eax |
; Check for buffer overflow |
cmp [datapointer], receive_buffer + RECEIVE_BUFFER_SIZE |
jbe @f |
ret |
|
.buffer_end_reached: |
; Buffer is full, first needed data by program is pointed to by esi. |
; Move all remaining data, starting from esi, to begin of buffer |
; Move all usefull data to begin of buffer |
cmp esi, receive_buffer |
je err_proto |
mov ecx, [datapointer] |
264,20 → 302,18 |
sub ecx, esi |
mov edi, receive_buffer |
rep movsb |
mov [datapointer], edi |
mov esi, receive_buffer |
@@: |
cmp eax, 4096 |
je .more |
ret |
mov [datapointer], edi ; new end of data |
mov esi, receive_buffer ; new start of data |
jmp .more |
|
|
|
wait_for_data: ; FIXME: add timeout |
mcall recv, [socketnum], receive_buffer, 4096, 0 |
mcall recv, [socketnum], receive_buffer, 4096, 0 ; MSG_DONTWAIT |
cmp eax, -1 |
je err_disconnected |
je err_sock |
test eax, eax |
jz wait_for_data |
jz err_disconnected |
ret |
|
|