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

📄 dmcthread.cpp

📁 基于Linux下Epoll技术的EchoSvr
💻 CPP
字号:
#include "DMCThread.h"
#include "Log.h"

DMCThread::DMCThread(int interval,char* job,char* ip,int port,char* username,char* password,char* dbname) 
{
	bzero(clients,sizeof(struct CLIENT*));
	bzero(sessions,sizeof(struct SESSION*));
	this->interval = interval;
	strcpy(this->job,job);
	strcpy(this->ip,ip);
	this->port= port;
	strcpy(this->username,username);
	strcpy(this->password,password);
	strcpy(this->dbname,dbname);
	
}

DMCThread::~DMCThread()
{
	int i = 0;
	for(;i<65536;i++)
	{
		if(clients[i]!=NULL)
			delete clients[i];
		if(sessions[i]!=NULL)
		{
			if(sessions[i]->buffer != NULL)
				free(sessions[i]->buffer);
			delete sessions[i];
		}
	}
}

int DMCThread::loadClients()
{
	
  return 1;
}
int DMCThread::updateClients()
{
	
  return 1;
}
bool DMCThread::init(char* desc)
{
	
	return true;
	
}

void DMCThread::Run()
{
	while(1){
		sleep(interval);
	}
}

struct SESSION* DMCThread::initSession(int fd,char* ip,unsigned short port)
{
		if(sessions[fd] == NULL)
		{
			sessions[fd] = new struct SESSION;
		}
		bzero(sessions[fd],sizeof(struct SESSION));
		strcpy(sessions[fd]->ip,ip);
		sessions[fd]->port = port;
		return sessions[fd];
}
struct SESSION* DMCThread::getSession(int fd)
{
		return sessions[fd];	
}
void DMCThread::setSessionInvalid(int fd)
{
	sessions[fd]->other = -1;
}
void DMCThread::setConnected(int clientid,int fd1,int fd2)
{
	clients[clientid]->fd1= fd1;
	clients[clientid]->fd2= fd2;
	
}			

void DMCThread::saveBuffer(int fd,void* buffer,int len)
{
	if(sessions[fd]->bufSize<len)
	{
		if(sessions[fd]->bufSize>0 && sessions[fd]->buffer != NULL)
			free(sessions[fd]->buffer);
		sessions[fd]->bufSize=len<256?256:len;
		sessions[fd]->buffer = (char*)malloc(sessions[fd]->bufSize);
	}
	memcpy(sessions[fd]->buffer,buffer,len);   
	sessions[fd]->bufLen = len;
}

void DMCThread::appendBuffer(int fd,void* buffer ,int len)
{
	int totalLen = sessions[fd]->bufLen+len;
	if(totalLen>sessions[fd]->bufSize)
	{
		sessions[fd]->bufSize=totalLen<256?256:totalLen;
		char* temp = (char*)malloc(sessions[fd]->bufSize);
		if(sessions[fd]->bufLen>0)
		{
			memcpy(temp,sessions[fd]->buffer,sessions[fd]->bufLen);
		}
		memcpy(temp+sessions[fd]->bufLen,buffer,len);
		if(sessions[fd]->buffer!=NULL)
			free(sessions[fd]->buffer);
		sessions[fd]->buffer = temp;
	}
	else
	{
		memcpy(sessions[fd]->buffer+sessions[fd]->bufLen,buffer,len);
	}
	sessions[fd]->bufLen = totalLen;
}

struct CLIENT* DMCThread::getClientByID(int id)
{
		struct CLIENT* c = NULL; 
		if(id<65536 && id>=0)
			c = clients[id];
		return c;
}
int DMCThread::getFD1(int id)
{
	return clients[id]->fd1;
}
int DMCThread::getFD2(int id)
{
	return clients[id]->fd2;
}
void DMCThread::reportMO(int id,int size)
{
	clients[id]->MO+=size;
}
void DMCThread::reportMT(int id,int size)
{
	clients[id]->MT+=size;
}

⌨️ 快捷键说明

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