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

📄 netplay.h

📁 著名的任天堂FC游戏机模拟器VirtuaNes 085版的源码!
💻 H
字号:
//
// 僱僢僩僾儗僀僋儔僗
//
#ifndef	__CNETPLAY_INCLUDED__
#define	__CNETPLAY_INCLUDED__

#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>
#include <mmsystem.h>
#include <winsock.h>

#include "macro.h"
#include "typedef.h"

#include <string>
using namespace std;

#define	WM_NETPLAY		(WM_APP+100)

#define	WM_NETPLAY_HOSTBYNAME	(WM_APP+101)

#define	WM_NETPLAY_ACCEPT	(WM_APP+110)
#define	WM_NETPLAY_CONNECT	(WM_APP+111)
#define	WM_NETPLAY_CLOSE	(WM_APP+112)
#define	WM_NETPLAY_ERROR	(WM_APP+113)

// for BSD style
#ifndef	INVALID_SOCKET
#define	INVALID_SOCKET	-1
#endif

// for Winsock1.x
#ifndef	SD_RECEIVE
#define	SD_RECEIVE	0
#endif
#ifndef	SD_SEND
#define	SD_SEND		1
#endif
#ifndef	SD_BOTH
#define	SD_BOTH		2
#endif

class	CNetPlay
{
public:
	CNetPlay();
	~CNetPlay();

	// 弶婜壔/奐曻
	BOOL	Initialize( HWND hWnd );
	void	Release();

	// 僱僢僩僾儗僀拞丠
	BOOL	IsNetPlay() { return m_hWnd?TRUE:FALSE; }
	// 愙懕拞丠
	BOOL	IsConnect() { return m_hWnd?m_bConnect:FALSE; }
	// 愙懕拞丠
	BOOL	IsServer() { return m_bServer; }

	// 捠怣儗僀僥儞僔
	void	SetLatency( INT nLatency ) { m_nLatency = nLatency; }
	INT	GetLatency() { return m_nLatency; }

	// 旕摨婜張棟儊僢僙乕僕曉憲僂僀儞僪僂偺愝掕
	void	SetMsgWnd( HWND hWnd ) { m_hWndMsg = hWnd; }

	// 僠儍僢僩儊僢僙乕僕庴偗庢傝僂僀儞僪僂偺愝掕
	void	SetChatWnd( HWND hWnd ) { m_hWndChat = hWnd; }

	// 儂僗僩柤偑IP偐偳偆偐傪僠僃僢僋偡傞(0:IP -:Error +:Host search)
	INT	ASyncHostCheck( HWND hWnd, const char* lpszHost );
	HRESULT	ASyncWndProc( HWND hWnd, WPARAM wParam, LPARAM lParam );

	// 愙懕偲愗抐
	BOOL	Connect( BOOL bServer, const char* lpszIP, unsigned short Port );
	void	Disconnect();

	// 僨乕僞憲怣 0:庴怣僨乕僞懸偪 1埲忋:庴怣僨乕僞偁傝 0枹枮:愙懕愗傟傗僄儔乕
	INT	Send( BYTE data );
	// 僨乕僞庴怣
	// 0:庴怣僨乕僞懸偪 1埲忋:庴怣僨乕僞偁傝 0枹枮:愙懕愗傟傗僄儔乕
	// 僞僀儉傾僂僩柍偟
	INT	Recv( BYTE& data );
	// 僞僀儉傾僂僩桳傝
	INT	RecvTime( BYTE& data, unsigned long timeout );

	// 儕儞僌僶僢僼傽傊偺庢傝崬傒
	BOOL	RecvBuffer();
	// 僶僢僼傽僠僃僢僋(0:No change  +:frame add  -:no frame)
	INT	BufferCheck();
	// 儕儞僌僶僢僼傽偺僶僢僼傽儕儞僌僶僀僩悢庢摼
	INT	GetRecvBufferSize();

	// 摨婜張棟
	INT	Sync();
	// 僾儗僀儎乕忬懺偺峏怴
	INT	ModifyPlayer( LPBYTE p1, LPBYTE p2 );

	// 僠儍僢僩儊僢僙乕僕憲怣
	void	ChatSend( LPCSTR lpStr );

	// Windows儊僢僙乕僕僾儘僔乕僕儍
	HRESULT	WndProc( HWND hWnd, WPARAM wParam, LPARAM lParam );

	// 捠怣僶僢僼傽
	enum {
		// 僨乕僞僽儘僢僋僒僀僘
		SOCKET_BLOCK_SIZE = 8,
		// 僶僢僼傽僒僀僘
		SOCKET_BUFFER_SIZE = (SOCKET_BLOCK_SIZE*32),
		// 庴怣帪僶僢僼傽僒僀僘
		SOCKET_RECEIVE_SIZE = (SOCKET_BLOCK_SIZE*8)
	};
protected:
	// 儊儞僶曄悢
	HWND	m_hWnd;
	HWND	m_hWndMsg;
	HWND	m_hWndASync;
	HWND	m_hWndChat;

	HANDLE	m_hASyncTask;
	CHAR	m_HostEntry[MAXGETHOSTSTRUCT];

	BOOL	m_bServer;
	BOOL	m_bConnect;	// 愙懕拞丠
	INT	m_nLatency;	// 儗僀僥儞僔(僶僢僼傽僒僀僘)
	INT	m_nFrameStep;	// 捠怣僼儗乕儉儗乕僩
	INT	m_nFrameCount;	// 僇僂儞僞

	// Ring buffer
	INT	m_nRingPtr;
	INT	m_nSendPtr;
	INT	m_nRecvPtr;
	INT	m_nRecvSize;
	BYTE	m_SendBuffer[SOCKET_BUFFER_SIZE];
	BYTE	m_RecvBuffer[SOCKET_BUFFER_SIZE];

	// WINSOCK
	WSADATA	m_WSAdata;
	SOCKET	m_SocketConnect;
	SOCKET	m_SocketData;
	SOCKET	m_SocketChat;

	struct sockaddr_in	m_SAddr_Server;
	struct sockaddr_in	m_SAddr_Client;
private:
};

extern	CNetPlay	NetPlay;

#endif	// !__CNETPLAY_INCLUDED__

⌨️ 快捷键说明

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