/* * PVVMUD a 3D MUD * Copyright (C) 1998-1999 Programvareverkstedet (pvv@pvv.org) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "pvvmud.H" #include "msgvarlength.H" CMsgVarLength::CMsgVarLength(BYTE id):CMessage(id,sizeof(DWORD)){ writeDWord(1,0); } long CMsgVarLength::getBodyLength(){ DWORD bodyLength = readDWord(1); reallocMessage(bodyLength); return (long)bodyLength; } void CMsgVarLength::setBodyLength(DWORD bodyLength){ reallocMessage(bodyLength); writeDWord(1,bodyLength); } int CMsgVarLength::sendBody(CStream * stream){ long length = getBodyLength()-(getReadIndex()-getLength()); if (length == 0) return MESSAGE_OK; return sendMessage(stream,getReadIndex(),length); } int CMsgVarLength::reciveBody(CStream * stream){ long length = getBodyLength()-(getWriteIndex()-getLength()); if (length == 0) return MESSAGE_OK; return reciveMessage(stream,getWriteIndex(),length); } int CMsgVarLength::recive(CStream * stream){ if ( (CMessage::recive(stream)==MESSAGE_OK) && (reciveBody(stream)==MESSAGE_OK) ){ return MESSAGE_OK; } return MESSAGE_BLOCKING; } int CMsgVarLength::send(CStream * stream){ if ( (CMessage::send(stream)==MESSAGE_OK) && (sendBody(stream)==MESSAGE_OK) ){ return MESSAGE_OK; } return MESSAGE_BLOCKING; }