⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 remotelb.cpp

📁 空战游戏flacon源码
💻 CPP
字号:
#include <windows.h>
#include <tchar.h>
#include "f4vu.h"
#include "ui95\chandler.h" //for some reason my compiler insists upon this. DSP
#include "logbook.h"
#include "userids.h"
#include "remotelb.h"

void RemoteLBCleanupCB(void *rec)
{
	RemoteLB *lb;

	lb=(RemoteLB*)rec;
	lb->Cleanup();
	delete lb;
}

RemoteLB::RemoteLB()
{
	flags_=0;
	memset(&Pilot_,0,sizeof(Pilot_));
	Photo_=NULL;
	Patch_=NULL;
}

RemoteLB::~RemoteLB()
{
}

void RemoteLB::Cleanup()
{
	if(Photo_ && (flags_ & PHOTO_CLEANUP))
		delete Photo_;
	Photo_=NULL;
	if(Patch_ && (flags_ & PATCH_CLEANUP))
		delete Patch_;
	Patch_=NULL;
	flags_ &= ~(PHOTO_CLEANUP|PATCH_CLEANUP|PHOTO_READY|PATCH_READY);
}

void RemoteLB::SetPilotData(LB_PILOT *data)
{
	memcpy(&Pilot_,data,sizeof(Pilot_));
	flags_ |= PILOT_READY;
}

RemoteImage *RemoteLB::Receive(RemoteImage *Image,short packetno,short length,long offset,long size,uchar *data)
{
	RemoteImage *remotedata;
	short i;

	remotedata=Image;
	if(!remotedata)
	{
		remotedata=new RemoteImage;
		if(!remotedata)
			return(NULL);
		remotedata->flags=0;
		remotedata->Size=size;
		remotedata->numblocks=static_cast<short>((size/length)+1);
		remotedata->blockflag=new uchar[remotedata->numblocks];
		memset(remotedata->blockflag,0,remotedata->numblocks);
		remotedata->ImageData=new uchar[size];
	}
	if(offset < size)
	{
		memcpy(remotedata->ImageData+offset,data,min(length,size-offset));
		remotedata->blockflag[packetno]=1;
		i=0;
		while(i < remotedata->numblocks)
		{
			if(!remotedata->blockflag[i])
				i=static_cast<short>(remotedata->numblocks+1);
			else
				i++;
		}
		if(i == remotedata->numblocks)
			remotedata->flags |= IMAGE_READY;
	}
	return(remotedata);
}

void RemoteLB::ReceiveImage(uchar ID,short packetno,short length,long offset,long size,uchar *data)
{
	switch(ID)
	{
		case PILOT_IMAGE:
			Photo_=Receive(Photo_,packetno,length,offset,size,data);
			if(Photo_)
			{
				if(Photo_->flags & IMAGE_READY)
					flags_ |= PHOTO_READY;
				flags_ |= PHOTO_CLEANUP;
			}
			break;
		case PATCH_IMAGE:
			Patch_=Receive(Patch_,packetno,length,offset,size,data);
			if(Patch_)
			{
				if(Patch_->flags & IMAGE_READY)
					flags_ |= PATCH_READY;
				flags_ |= PATCH_CLEANUP;
			}
			break;
	}
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -