src/Network/Buffer.cc
author terom
Mon, 15 Dec 2008 23:56:42 +0000
changeset 378 5589abf5e61b
parent 329 42ad4965424f
child 380 d193dd1d8a7e
permissions -rw-r--r--
break the network code. Too late to set up a branch for this now
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
     1
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
     2
#include "Buffer.hh"
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
     3
#include "Config.hh"
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
     4
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
     5
#include <ClanLib/core.h>
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
     6
#include <cstdlib>
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
     7
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
     8
/*
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
     9
 * NetworkBufferBase
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    10
 */
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
    11
NetworkBufferBase::NetworkBufferBase (NetworkSocket *socket, size_t size_hint) :
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    12
    socket(socket), buf(0), size(0), offset(0) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    13
    
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    14
    // allocate initial buffer
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    15
    if ((buf = (char *) malloc(size_hint)) == NULL)
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    16
       throw NetworkBufferError("malloc failed");
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    17
    
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    18
    // remember size
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    19
    size = size_hint;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    20
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    21
        
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    22
NetworkBufferBase::~NetworkBufferBase (void) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    23
    free(buf);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    24
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    25
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    26
void NetworkBufferBase::resize (size_t item_size) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    27
    size_t new_size = size;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    28
329
42ad4965424f fix infinite loop in NetworkBuffer
terom
parents: 200
diff changeset
    29
    // make sure that new_size isn't zero, because zero times two is zero, even if you do that in an infinite loop :)
42ad4965424f fix infinite loop in NetworkBuffer
terom
parents: 200
diff changeset
    30
    if (new_size == 0)
42ad4965424f fix infinite loop in NetworkBuffer
terom
parents: 200
diff changeset
    31
        new_size = 1;
42ad4965424f fix infinite loop in NetworkBuffer
terom
parents: 200
diff changeset
    32
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    33
    // grow new_size until item_size fits
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    34
    while (offset + item_size > new_size)
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    35
        new_size *= 2;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    36
    
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    37
    // grow if needed
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    38
    if (new_size != size) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    39
        // realloc buffer
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    40
        if ((buf = (char *) realloc((void *) buf, new_size)) == NULL)
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    41
            throw NetworkBufferError("realloc failed");
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    42
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    43
        // update size
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    44
        size = new_size;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    45
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    46
    } else if (new_size > (offset + item_size) * 4) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    47
        // XXX: shrink?
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    48
    }
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    49
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    50
        
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    51
void NetworkBufferBase::trim (size_t prefix_size) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    52
    // update offset
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    53
    offset -= prefix_size;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    54
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    55
    // shift the buffer forwards from (buf + prefix) -> (buf), copying (old_offset - prefix) bytes
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    56
    memmove(buf, buf + prefix_size, offset);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    57
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    58
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    59
/*
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    60
 * NetworkBufferInput
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    61
 */
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
    62
NetworkBufferInput::NetworkBufferInput (NetworkSocket *socket, size_t size_hint) :
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    63
    NetworkBufferBase(socket, size_hint)
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    64
{
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    65
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    66
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    67
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    68
bool NetworkBufferInput::try_read (size_t item_size) {
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
    69
    size_t ret, to_read = item_size;
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    70
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    71
    // keept reads at at least NETWORK_BUFFER_CHUNK_SIZE bytes
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    72
    if (to_read < NETWORK_BUFFER_CHUNK_SIZE)
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    73
        to_read = NETWORK_BUFFER_CHUNK_SIZE;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    74
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    75
    // resize buffer if needed
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    76
    resize(to_read);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    77
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    78
    // read once
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
    79
    ret = socket->recv(buf + offset, to_read);
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    80
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
    81
    // nothing left?
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    82
    if (ret == 0)
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
    83
        return false;
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    84
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    85
    // update offset
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    86
    offset += ret;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    87
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    88
    // did we get enough?
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    89
    if ((unsigned int) ret < item_size)
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    90
        return false;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    91
    else
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    92
        return true;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    93
} 
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    94
        
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    95
bool NetworkBufferInput::have_data (size_t data_size) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    96
    return (offset >= data_size);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    97
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    98
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
    99
bool NetworkBufferInput::peek_prefix (uint16_t &val_ref) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   100
    if (!have_data(sizeof(uint16_t)))
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   101
        return false;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   102
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   103
    val_ref = ntohs(*((uint16_t *) (buf)));
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   104
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   105
    return true;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   106
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   107
    
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   108
bool NetworkBufferInput::peek_prefix (uint32_t &val_ref) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   109
    if (!have_data(sizeof(uint32_t)))
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   110
        return false;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   111
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   112
    val_ref = ntohl(*((uint32_t *) (buf)));
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   113
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   114
    return true;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   115
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   116
   
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   117
/*
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   118
 * NetworkBufferOutput
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   119
 */
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
   120
NetworkBufferOutput::NetworkBufferOutput (NetworkSocket *socket, size_t size_hint) :
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   121
    NetworkBufferBase(socket, size_hint)
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   122
{
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   123
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   124
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   125
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   126
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   127
void NetworkBufferOutput::push_write (char *buf_ptr, size_t buf_size) {
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
   128
    size_t ret;
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   129
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   130
    // try and short-circuit writes unless we have already buffered data
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   131
    if (offset == 0) {
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
   132
        // attempt to send something
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
   133
        ret = socket->send(buf_ptr, buf_size);
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   134
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   135
        // if we managed to send something, adjust buf/size and buffer
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   136
        if (ret > 0) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   137
            // sanity-check
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   138
            assert(buf_size >= (unsigned int) ret);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   139
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   140
            buf_ptr += ret;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   141
            buf_size -= ret;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   142
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   143
            // if that was all, we're done
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   144
            if (buf_size == 0)
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   145
                return;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   146
        }
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   147
    }
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   148
    
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   149
    // resize to fit buf_size more bytes
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   150
    resize(buf_size);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   151
    
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   152
    // copy into our internal buffer
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   153
    memcpy(buf + offset, buf_ptr, buf_size);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   154
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   155
        
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   156
void NetworkBufferOutput::flush_write (void) {
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
   157
    size_t ret;
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   158
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   159
    // ignore if we don't have any data buffered
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   160
    if (offset == 0)
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   161
        return;
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   162
    
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   163
    // attempt to write as much as possible
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
   164
    ret = socket->send(buf, offset);
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   165
378
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
   166
    // busy?
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
   167
    if (ret == 0)
5589abf5e61b break the network code. Too late to set up a branch for this now
terom
parents: 329
diff changeset
   168
        return;
200
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   169
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   170
    // trim the buffer
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   171
    trim(ret);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   172
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   173
        
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   174
void NetworkBufferOutput::write_prefix (char *buf, uint16_t prefix) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   175
    uint16_t nval = htons(prefix);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   176
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   177
    push_write((char*) &nval, sizeof(uint16_t)); 
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   178
    push_write(buf, prefix);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   179
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   180
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   181
void NetworkBufferOutput::write_prefix (char *buf, uint32_t prefix) {
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   182
    uint32_t nval = htonl(prefix);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   183
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   184
    push_write((char*) &nval, sizeof(uint32_t)); 
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   185
    push_write(buf, prefix);
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   186
}
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   187
2dbf40661580 better NetworkBuffer/Packet stuff + some additional Physics+Network stuff + random fixes
terom
parents:
diff changeset
   188