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

📄 peer.h

📁 缓冲 缓冲 缓冲 缓冲 缓冲 缓冲
💻 H
字号:
// Peer.h: interface for the Peer class.
//
//////////////////////////////////////////////////////////////////////

#if !defined(AFX_PEER_H__B17CE18D_FB28_4188_944D_7BFAB1989ED5__INCLUDED_)
#define AFX_PEER_H__B17CE18D_FB28_4188_944D_7BFAB1989ED5__INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include <string>
#include<vector>

#include "../Socket.h"
#include "../DiskFile.h"
#include "../MultiBuffer.h"

using namespace std;

#define DEFAULT_PEERFILE ".\\peer\\peers.txt"
#define PEER_SERV_PORT 5050
#define MAXLINE 100

#define DOWNLOAD '0'
#define UPLOAD '1'


class PeerInfo
{
public:
	PeerInfo(const char* pid="",const char *addr="",const unsigned short portNum=0,const char *tdir="")
	{
		cout<<"init peerinfo"<<endl;
		string pidstr(pid);
        id = pidstr;
		string addrstr(addr);
		address = addrstr;
		port = portNum;
		string tdirstr(tdir);
		top_dir = tdirstr;
	}
	virtual ~PeerInfo(){}
	typedef PeerInfo* ptrInfo;
    const string &getId()const{return id;}
	const string &getAddress()const{return address;}
	unsigned short getPort()const{return port;}
	const string &getTop_dir()const{return top_dir;}
	void setTopDir(char *topdir){top_dir = topdir;}
protected:
	string id;
	string address;
	unsigned short port;
	string top_dir;
};

class PeerListener
{
public:
	PeerListener(){listenSocket.create(TYPE_TCP);cout<<"init peerlistener"<<endl;}
	virtual ~PeerListener(){}
	void establish(const string &aIp=LOCAL_MACHINE, unsigned short aPort=PEER_SERV_PORT)throw(SocketException)
	{
		if(listenSocket.isValidSocket())
		{
			listenSocket.bind(aPort,aIp);
			listenSocket.listen();
		}
	} 
protected:
	Socket listenSocket; //server socket recevie socket connection from other peers
};

enum Bits {
	UNINIT_BIT,
	ONLINE_BIT,
	OFFLINE_BIT,
	SSL_BIT
};

enum PeerFlags {
	UNINIT = 1 <<UNINIT_BIT,
	ONLINE = 1<<ONLINE_BIT,
	OFFLINE = 1<<OFFLINE_BIT,
	SSL = 1<<SSL_BIT				//< Peer supports SSL
};

typedef PeerInfo* Ptr;

class Peer:public PeerListener
{
public:
	Peer();
	virtual ~Peer();
	virtual void init(const char *configFile=DEFAULT_PEERFILE);
	virtual void connect();
	virtual void disconnect(bool graceless);
	virtual void startSelect();
	virtual void startCommand();

	virtual bool connect(Socket &s,const PeerInfo& user);
    //virtual void upload(const string& ip,const unsigned int &port,const string &remote_dir,const string &local_file);
	//virtual void download(const string &ip,const unsigned int &port,const string &local_file,const string &remote_dir);
	virtual PeerInfo &info();
    
	virtual int getNeighborCount() const;

	virtual void connectToServer(const string &server_addr,const unsigned int &port);
	virtual void registerToServer();
	virtual Ptr getPeerInfo(const string &peer_id); 

	unsigned int getPort() const { return self_info.getPort(); }
	const string& getAddress() const { return self_info.getAddress(); }

	string getIpPort() const { return getAddress() + ':' + Util::toString(getPort()); }
	string getLocalIp() const;

	virtual void online();
	virtual void offline();
private:
	PeerInfo self_info;
    vector<Ptr> neighbors;
	Socket withCentralServ; //client socket with central server
    PeerFlags flag;
};

#endif // !defined(AFX_PEER_H__B17CE18D_FB28_4188_944D_7BFAB1989ED5__INCLUDED_)

⌨️ 快捷键说明

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