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

📄 spclient.h

📁 mysee网络直播源代码Mysee Lite是Mysee独立研发的网络视频流媒体播放系统。在应有了P2P技术和一系列先进流媒体技术之后
💻 H
字号:
/*
*  Openmysee
*
*  This program is free software; you can redistribute it and/or modify
*  it under the terms of the GNU General Public License as published by
*  the Free Software Foundation; either version 2 of the License, or
*  (at your option) any later version.
*
*  This program is distributed in the hope that it will be useful,
*  but WITHOUT ANY WARRANTY; without even the implied warranty of
*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
*  GNU General Public License for more details.
*
*  You should have received a copy of the GNU General Public License
*  along with this program; if not, write to the Free Software
*  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*
*/
#ifndef __SPCLIENT_H_
#define __SPCLIENT_H_

#include "FreeList.h"
#include "TransferCalculator.h"

#define P2P_BUF_SIZE BLOCK_SIZE+1024

#define WM_NOMORESAMPLE WM_APP+12341

// TCP传输的数据包
class TCPPacket {
public:
	TCPPacket() : size(0), sent(0) {};
	~TCPPacket() {};
	char GetMsgType() {return buf[4];};
	UINT* GetBlockID() {return reinterpret_cast<UINT*>(buf+5);};
	UINT* GetBlockSize() {return reinterpret_cast<UINT*>(buf+9);};
	void Init() {};
	void Uninit() {};
	char buf[P2P_BUF_SIZE];
	// 要发送的消息大小
	int size;
	// 已经发送的大小
	int sent;
};

enum MSG_STATE {
	MSG_COMPLETE, MSG_UNCOMPLETE, MSG_ERR_SIZE, MSG_ERR_TYPE, MSG_REMOTE_ERR,
};

enum CONNECT_RESULT {CR_ERROR, CR_CONNECTED, CR_WOULDBLOCK};

class BufferMgr;
class LogMgr;
class CaptureServer;
class SPClient : public TransferCalculator {
public:
	SPClient(CaptureServer* cServer, NormalAddress address, BufferMgr* bufferMgr, LogMgr* log);
	~SPClient();

private:
	BOOL BaseRecv();
	MSG_STATE ParseMsg();
	MSG_STATE OnWelcome();
	MSG_STATE OnMsg();
	
	BOOL SendRegister();
	BOOL SendBlock();
	BOOL SendUpdate();
    BOOL SendMediaType();
	BOOL SendPackets();

	static void __stdcall RunReceiver(SPClient* client);
	CONNECT_RESULT Connecting();
	void Disconnect();

private:
	SOCKET m_socket;
	// 接收数据的缓冲区
	char recvBuf[P2P_BUF_SIZE];
	// 缓冲区中数据的长度
	UINT recvOff;
	// 从接收到的数据包读取数据的移动指针
	char* recvPointer;
	// 向被发送的数据包写入数据的移动指针
	char* sendPointer;
	// 出错信息
	char errStr[30];

	// 即将被发送的Packet列表
	list<TCPPacket*> m_sendList;
	// TCPPacket动态分配/释放的列表
	FreeList<TCPPacket> m_freeList;	

	// 每次编制发送消息时,第一步的操作
	BOOL SendBegin(TCPPacket*& packet, UINT8 msgType);
	// 每次编制发送消息时,最后一步的操作
	void SendEnd(TCPPacket*& packet);

	CaptureServer *cs;    //Capture Server
	BufferMgr* m_bufferMgr;
	LogMgr* logFile;
	NormalAddress addr;
	UINT	lastSentBlockID; // store the block should send now
	BOOL    isRunning;
	BOOL    isLogin;
	HANDLE  hThread;


	// 校验块的正确与否
	SampleHeader header;
	int readData;

	// 利用memcpy复制数据,并且把src指针加上size
	static void CopyMoveSrc(void * des, const char *& src, size_t size);
	// 利用memcpy复制数据,并且把des指针加上size
	static void CopyMoveDes(char *& des, const void * src, size_t size);
};
#endif

⌨️ 快捷键说明

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