示例#1
0
void Str_Read(ddstring_t *str, Reader *reader)
{
    size_t len = Reader_ReadUInt32(reader);
    char *buf = malloc(len + 1);
    Reader_Read(reader, buf, len);
    buf[len] = 0;
    Str_Set(str, buf);
    free(buf);
}
示例#2
0
void StringArray_Read(StringArray *ar, Reader *reader)
{
    StringArray_Clear(ar);

    uint count = Reader_ReadUInt32(reader);
    for(uint i = 0; i < count; ++i)
    {
        de::Str *str = new de::Str;
        Str_Read(*str, reader);
        ar->array.push_back(str);
    }
}
示例#3
0
// Called when a ping packet comes in.
void Net_PingResponse(void)
{
    client_t* cl = &clients[netBuffer.player];
    int time = Reader_ReadUInt32(msgReader);

    // Is this a response to our ping?
    if(time == cl->ping.sent)
    {
        // Record the time and send the next ping.
        cl->ping.times[cl->ping.current] =
            (Timer_RealMilliseconds() - time) / 1000.0f;
        // Show a notification.
        /*Con_Printf( "Ping to plr %i: %.0f ms.\n", netbuffer.player,
           cl->ping.times[cl->ping.current] * 1000); */
        // Send the next ping.
        Net_SendPing(netBuffer.player, 0);
    }
    else
    {
        // Not ours, just respond.
        Net_SendBuffer(netBuffer.player, 10000);
    }
}
示例#4
0
void NetCl_UpdateFinaleState(Reader* msg)
{
    int i, numConds;
    fi_state_t* s = &remoteFinaleState;

    // Flags.
    s->mode = Reader_ReadByte(msg);

    s->finaleId = Reader_ReadUInt32(msg); // serverside id (local is different)

    // Conditions.
    numConds = Reader_ReadByte(msg);
    for(i = 0; i < numConds; ++i)
    {
        byte cond = Reader_ReadByte(msg);
        if(i == 0) s->conditions.secret = cond;
        if(i == 1) s->conditions.leave_hub = cond;
    }

#ifdef _DEBUG
    Con_Message("NetCl_FinaleState: Updated finale %i: mode %i, secret=%i, leave_hud=%i",
                s->finaleId, s->mode, s->conditions.secret, s->conditions.leave_hub);
#endif
}