📄 peer.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 + -