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

📄 def.h

📁 局域网内聊天传输文件
💻 H
字号:
/*
  取之于斯,用之于斯。
  我自己的学习成长,有一大部分要归功于在互联网上接触到的一些开源的代码和开源项目。作者的精湛技艺,尤其是他们博大的胸怀,让我敬仰不已。
  因此我也将自己写的一些代码及工具,只要是比较完整的,不涉及到工作中保密信息的,整理出来。放到网上,希望能对其他人有用。
  你可以自由的拷贝,分发,使用这些代码,最好是能提到它的出处,我保留除此之外的所有权利。由于是非商业性的软件及代码,在使用过程中造成的所有损失,我不承担任何责任。 :)
  我的邮件:pankkk@hotmail.com
  我的名字:潘凯
  欢迎和我交流技术方面的问题。


  我已经发布的一些代码及工具。这些代码及工具我一般发布在vchelp及vccode的论坛上,这两个地方是我常去的地方,只是近来都是潜水,很少发言。:)

1、一个从codeproject下载文章及源码的工具,可以将上面所有的文章及源码都下载到本机,并保留原来的分类信息,去掉页面上的广告。发布日期2003/1
  这个软件是用MFC做的。现在可能已经不能用了,因为当时不用登录也可以下载源码,现在必须要是会员,而且要登录后才能下载。而且网站的组织结构也变了。有兴趣的朋友可以自己试着改源码。

2、一个上网计时的小软件。发布时期2003/11
  这个软件主要也是自用,当时家里办了ADSL上网,一个月60小时。当时下了一些计时软件,感觉不好用,功能太多,就自己写了一个。界面比较简陋,但也够用了。

3、一个点对点的局域网聊天软件,有QQ的Emotion功能,可以一对多的传文件。发布日期2004/12,发布版本1.13。
  界面部分用WTL做的,聊天用UDP协议,传文件是TCP协议。由于不需要服务器,很多功能实现起来还是很麻烦的。

*/


//PK 2004/10/07 - 10/18
//PK global define
#ifndef __DEF_H__
#define __DEF_H__

#include <map>
using std::map;
#include <vector>
using std::vector;
#include <string>
using std::string;
#include <iostream>
#include <fstream>
using std::fstream;
#include "string_auxiliaries.h"

#define WM_RENAME		0x0400 + 1
#define WM_RECV_FILE	0x0400 + 2

#define BUFSIZE		512
#define BUFLEN		BUFSIZE - 1
#define HEADSIZE	sizeof(_msg_head)
#define VALIDLOAD	BUFLEN - HEADSIZE
#define FILEBUFSIZE	4096

typedef const string & CRStr;
typedef const char * CPChar;
typedef vector<u_long> addresses_type;

typedef unsigned char version_type;
extern const string g_version;
extern const string g_system_info;
extern const unsigned int g_online_interval;	//PK 在线检消息发送时间间隔
extern const unsigned int g_task_life_time;
version_type get_version();
extern const char* g_emotion[][4];
int get_emotion(CPChar verb);

//PK 2004/09/01 - 10/22
//PK message type flags
typedef unsigned char flag_type;
typedef const flag_type flag_const_type;
flag_const_type flag_login				= 1;
flag_const_type flag_logout				= 2;
flag_const_type flag_online				= 3;
flag_const_type flag_say				= 4;
flag_const_type flag_whisper			= 5;
flag_const_type flag_rename				= 6;
flag_const_type flag_name_conflict		= 7;
flag_const_type flag_send_file			= 8;
flag_const_type flag_confirm_recv_file	= 9;
flag_const_type flag_reject_file		= 10;
flag_const_type flag_task_cancel		= 11;
flag_const_type flag_emotion			= 12;

//PK 2004/10/26
#ifdef _DEBUG
#define DEBUG_INFO(x) m_log << x;
#else
#define DEBUG_INFO(x)
#endif			

//PK 2004/10/29
enum error_no {
	err_non = 1,
	err_create_socket,
	err_create_connect,
	err_listen,
	err_send_data,
	err_recv_data,
	err_create_file,
	err_write_file,
	err_file_size,
	err_last
};
string get_err_text(error_no err);

class _my_time
{	//PK 2004/10/08 - 10/14
public:
	_my_time();
	_my_time(const _my_time & time)
	{	//PK 2004/10/23
		memcpy(_time, time._time, sizeof(_time));
	}
	_my_time & operator = (const _my_time & time)
	{	//PK 2004/10/23
		if (this == &time) return *this;
		memcpy(_time, time._time, sizeof(_time));
		return *this;
	}
	string get_time();
	unsigned int operator - (const _my_time & rv); //PK return seconds
private:
	static void _convert_systemtime_to_mine(const SYSTEMTIME & st, unsigned char * my_time);
	static void _convert_mine_to_systemtime(SYSTEMTIME & st, const unsigned char * my_time);
	//PK 2004-10-08
	//PK year(6 bits) month(4 bits) day(5 bits) hour(5 bits) minute(6 bits) second(6 bits)
	unsigned char _time[4];
};

//PK 2004-10-07 - 14
typedef unsigned short mask_type;
extern const mask_type g_mask;
struct _msg_head
{
	_msg_head() {
		mask = g_mask;
		version = get_version();
		flag = 0;
	}
	mask_type mask;
	version_type version;
	flag_type flag;
	_my_time time;
};

struct _task
{	//PK 2004/10/15 - 20
	enum recv_state {listen = 1, recv, send, cancel, prepare, erro, complete};
	_task();
	u_long task_id;
	SOCKET s;
	recv_state state;
	_my_time start_time;
};
struct _task_send_file : public _task
{	//PK 2004/10/15 - 21
	string file_name;
	_my_time expire_time;
	typedef	map<u_long, bool> user_stats_type; //PK key is the address, value is wheather sending
	user_stats_type users; //PK user's address + wheather is sending now
	DWORD file_size;
};
struct _task_recv_file : public _task
{	//PK 2004/10/15 - 18
	u_long peer_addr;
	string file_name;
	DWORD file_size;
};
typedef map<u_long, _task*>	tasks_type;	//PK the key is task_id

class CLock
{	//PK 2004/12/11
public:
	CLock() { InitializeCriticalSection(&m_critical); }
	~CLock() { DeleteCriticalSection(&m_critical); }
	CRITICAL_SECTION m_critical;
};

#endif //__DEF_H__

⌨️ 快捷键说明

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