采用比zlib更快的压缩库zstd
远程桌面帧率提高到12;补充上传zlib.lib。
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -27,7 +27,6 @@ Release
|
|||||||
*.lai
|
*.lai
|
||||||
*.la
|
*.la
|
||||||
*.a
|
*.a
|
||||||
*.lib
|
|
||||||
|
|
||||||
# Executables
|
# Executables
|
||||||
*.exe
|
*.exe
|
||||||
|
|||||||
@@ -87,3 +87,11 @@
|
|||||||
2、SAFE_DELETE(ContextObject->olps)有崩溃概率。改为主控端退出时先令被控端退出,就没有内存泄漏。
|
2、SAFE_DELETE(ContextObject->olps)有崩溃概率。改为主控端退出时先令被控端退出,就没有内存泄漏。
|
||||||
|
|
||||||
3、开关音频时偶有内存泄漏,waveInCallBack线程不能正常退出。
|
3、开关音频时偶有内存泄漏,waveInCallBack线程不能正常退出。
|
||||||
|
|
||||||
|
2019.1.16
|
||||||
|
|
||||||
|
1、智能计时宏AUTO_TICK有问题,不应该用无名的局部变量auto_tick。
|
||||||
|
|
||||||
|
2、采用由Facebook所开发的速度更快的压缩库zstd,提高程序运行效率。
|
||||||
|
参看:https://github.com/facebook/zstd
|
||||||
|
|
||||||
|
|||||||
@@ -5,8 +5,18 @@
|
|||||||
#include "stdafx.h"
|
#include "stdafx.h"
|
||||||
#include "IOCPClient.h"
|
#include "IOCPClient.h"
|
||||||
#include <IOSTREAM>
|
#include <IOSTREAM>
|
||||||
#include "zconf.h"
|
#if USING_ZLIB
|
||||||
#include "zlib.h"
|
#include "zlib.h"
|
||||||
|
#define Z_FAILED(p) (Z_OK != (p))
|
||||||
|
#define Z_SUCCESS(p) (!Z_FAILED(p))
|
||||||
|
#else
|
||||||
|
#include "zstd/zstd.h"
|
||||||
|
#pragma comment(lib, "zstd/zstd.lib")
|
||||||
|
#define Z_FAILED(p) ZSTD_isError(p)
|
||||||
|
#define Z_SUCCESS(p) (!Z_FAILED(p))
|
||||||
|
#define compress(dest, destLen, source, sourceLen) ZSTD_compress(dest, *(destLen), source, sourceLen, ZSTD_CLEVEL_DEFAULT)
|
||||||
|
#define uncompress(dest, destLen, source, sourceLen) ZSTD_decompress(dest, *(destLen), source, sourceLen)
|
||||||
|
#endif
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include "Manager.h"
|
#include "Manager.h"
|
||||||
|
|
||||||
@@ -32,6 +42,7 @@ IOCPClient::IOCPClient(bool exit_while_disconnect)
|
|||||||
m_hWorkThread = NULL;
|
m_hWorkThread = NULL;
|
||||||
m_bWorkThread = S_STOP;
|
m_bWorkThread = S_STOP;
|
||||||
|
|
||||||
|
memset(m_szPacketFlag, 0, sizeof(m_szPacketFlag));
|
||||||
memcpy(m_szPacketFlag,"Shine",FLAG_LENGTH);
|
memcpy(m_szPacketFlag,"Shine",FLAG_LENGTH);
|
||||||
|
|
||||||
m_bIsRunning = TRUE;
|
m_bIsRunning = TRUE;
|
||||||
@@ -187,7 +198,7 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
|
|||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>С <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͲ<C7BE><CDB2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƿ<EFBFBD><C7B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͷ<EFBFBD><CDB7>С <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǾͲ<C7BE><CDB2><EFBFBD><EFBFBD><EFBFBD>ȷ<EFBFBD><C8B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
while (m_CompressedBuffer.GetBufferLength() > HDR_LENGTH)
|
while (m_CompressedBuffer.GetBufferLength() > HDR_LENGTH)
|
||||||
{
|
{
|
||||||
char szPacketFlag[FLAG_LENGTH] = {0};
|
char szPacketFlag[FLAG_LENGTH + 3] = {0};
|
||||||
CopyMemory(szPacketFlag, m_CompressedBuffer.GetBuffer(),FLAG_LENGTH);
|
CopyMemory(szPacketFlag, m_CompressedBuffer.GetBuffer(),FLAG_LENGTH);
|
||||||
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͷ
|
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>ͷ
|
||||||
if (memcmp(m_szPacketFlag, szPacketFlag, FLAG_LENGTH) != 0)
|
if (memcmp(m_szPacketFlag, szPacketFlag, FLAG_LENGTH) != 0)
|
||||||
@@ -220,7 +231,7 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
|
|||||||
int iRet = uncompress(DeCompressedBuffer,
|
int iRet = uncompress(DeCompressedBuffer,
|
||||||
&ulOriginalLength, CompressedBuffer, ulCompressedLength);
|
&ulOriginalLength, CompressedBuffer, ulCompressedLength);
|
||||||
|
|
||||||
if (iRet == Z_OK)//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ɹ<EFBFBD>
|
if (Z_SUCCESS(iRet))//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>ɹ<EFBFBD>
|
||||||
{
|
{
|
||||||
CBuffer m_DeCompressedBuffer;
|
CBuffer m_DeCompressedBuffer;
|
||||||
m_DeCompressedBuffer.WriteBuffer(DeCompressedBuffer,
|
m_DeCompressedBuffer.WriteBuffer(DeCompressedBuffer,
|
||||||
@@ -231,8 +242,10 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
|
|||||||
m_Manager->OnReceive((PBYTE)m_DeCompressedBuffer.GetBuffer(0),
|
m_Manager->OnReceive((PBYTE)m_DeCompressedBuffer.GetBuffer(0),
|
||||||
m_DeCompressedBuffer.GetBufferLength());
|
m_DeCompressedBuffer.GetBufferLength());
|
||||||
}
|
}
|
||||||
else
|
else{
|
||||||
|
printf("[ERROR] uncompress failed \n");
|
||||||
throw "Bad Buffer";
|
throw "Bad Buffer";
|
||||||
|
}
|
||||||
|
|
||||||
delete [] CompressedBuffer;
|
delete [] CompressedBuffer;
|
||||||
delete [] DeCompressedBuffer;
|
delete [] DeCompressedBuffer;
|
||||||
@@ -246,6 +259,7 @@ VOID IOCPClient::OnServerReceiving(char* szBuffer, ULONG ulLength)
|
|||||||
|
|
||||||
int IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength) //Hello
|
int IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength) //Hello
|
||||||
{
|
{
|
||||||
|
AUTO_TICK(10);
|
||||||
assert (ulOriginalLength > 0);
|
assert (ulOriginalLength > 0);
|
||||||
{
|
{
|
||||||
//<2F><><EFBFBD><EFBFBD>1.001<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD> +12
|
//<2F><><EFBFBD><EFBFBD>1.001<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҳ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD>õ<EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD>ռ<EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD> +12
|
||||||
@@ -253,20 +267,28 @@ int IOCPClient::OnServerSending(const char* szBuffer, ULONG ulOriginalLength) /
|
|||||||
//<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9> ѹ<><D1B9><EFBFBD>㷨 <><CEA2><EFBFBD>ṩ
|
//<2F><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9> ѹ<><D1B9><EFBFBD>㷨 <><CEA2><EFBFBD>ṩ
|
||||||
//nSize = 436
|
//nSize = 436
|
||||||
//destLen = 448
|
//destLen = 448
|
||||||
|
#if USING_ZLIB
|
||||||
unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12;
|
unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12;
|
||||||
|
#else
|
||||||
|
unsigned long ulCompressedLength = ZSTD_compressBound(ulOriginalLength);
|
||||||
|
#endif
|
||||||
LPBYTE CompressedBuffer = new BYTE[ulCompressedLength];
|
LPBYTE CompressedBuffer = new BYTE[ulCompressedLength];
|
||||||
|
|
||||||
int iRet = compress(CompressedBuffer, &ulCompressedLength, (PBYTE)szBuffer, ulOriginalLength);
|
int iRet = compress(CompressedBuffer, &ulCompressedLength, (PBYTE)szBuffer, ulOriginalLength);
|
||||||
if (iRet != Z_OK)
|
if (Z_FAILED(iRet))
|
||||||
{
|
{
|
||||||
|
printf("[ERROR] compress failed \n");
|
||||||
delete [] CompressedBuffer;
|
delete [] CompressedBuffer;
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
#if !USING_ZLIB
|
||||||
|
ulCompressedLength = iRet;
|
||||||
|
#endif
|
||||||
|
|
||||||
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
|
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
|
||||||
CBuffer m_WriteBuffer;
|
CBuffer m_WriteBuffer;
|
||||||
|
|
||||||
m_WriteBuffer.WriteBuffer((PBYTE)m_szPacketFlag, sizeof(m_szPacketFlag));
|
m_WriteBuffer.WriteBuffer((PBYTE)m_szPacketFlag, FLAG_LENGTH);
|
||||||
|
|
||||||
m_WriteBuffer.WriteBuffer((PBYTE) &ulPackTotalLength,sizeof(ULONG));
|
m_WriteBuffer.WriteBuffer((PBYTE) &ulPackTotalLength,sizeof(ULONG));
|
||||||
// 5 4
|
// 5 4
|
||||||
|
|||||||
@@ -49,7 +49,7 @@ public:
|
|||||||
BOOL m_bIsRunning;
|
BOOL m_bIsRunning;
|
||||||
BOOL m_bConnected;
|
BOOL m_bConnected;
|
||||||
|
|
||||||
char m_szPacketFlag[FLAG_LENGTH];
|
char m_szPacketFlag[FLAG_LENGTH + 3];
|
||||||
|
|
||||||
VOID setManagerCallBack(CManager* Manager);
|
VOID setManagerCallBack(CManager* Manager);
|
||||||
|
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ DWORD WINAPI CScreenManager::WorkThreadProc(LPVOID lParam)
|
|||||||
|
|
||||||
clock_t last = clock();
|
clock_t last = clock();
|
||||||
This->SendFirstScreen();
|
This->SendFirstScreen();
|
||||||
const int fps = 10;// ֡<><D6A1>
|
const int fps = 12;// ֡<><D6A1>
|
||||||
const int sleep = 1000 / fps;// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ms<6D><73>
|
const int sleep = 1000 / fps;// <20><><EFBFBD><EFBFBD>ʱ<EFBFBD>䣨ms<6D><73>
|
||||||
while (This->m_bIsWorking)
|
while (This->m_bIsWorking)
|
||||||
{
|
{
|
||||||
@@ -202,7 +202,6 @@ VOID CScreenManager::SendFirstScreen()
|
|||||||
|
|
||||||
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
const char* CScreenManager::GetNextScreen(ULONG &ulNextSendLength)
|
||||||
{
|
{
|
||||||
AUTO_TICK(5);
|
|
||||||
LPVOID NextScreenData = m_ScreenSpyObject->GetNextScreenData(&ulNextSendLength);
|
LPVOID NextScreenData = m_ScreenSpyObject->GetNextScreenData(&ulNextSendLength);
|
||||||
|
|
||||||
if (ulNextSendLength == 0 || NextScreenData == NULL)
|
if (ulNextSendLength == 0 || NextScreenData == NULL)
|
||||||
|
|||||||
@@ -208,8 +208,8 @@ VOID CScreenSpy::WriteRectBuffer(LPBYTE szBuffer,ULONG ulLength)
|
|||||||
|
|
||||||
VOID CScreenSpy::ScanScreen(HDC hdcDest, HDC hdcSour, ULONG ulWidth, ULONG ulHeight)
|
VOID CScreenSpy::ScanScreen(HDC hdcDest, HDC hdcSour, ULONG ulWidth, ULONG ulHeight)
|
||||||
{
|
{
|
||||||
AUTO_TICK(1);
|
AUTO_TICK(70);
|
||||||
#ifdef COPY_ALL
|
#if COPY_ALL
|
||||||
BitBlt(hdcDest, 0, 0, ulWidth, ulHeight, hdcSour, 0, 0, m_dwBitBltRop);
|
BitBlt(hdcDest, 0, 0, ulWidth, ulHeight, hdcSour, 0, 0, m_dwBitBltRop);
|
||||||
#else
|
#else
|
||||||
const ULONG ulJumpLine = 50;
|
const ULONG ulJumpLine = 50;
|
||||||
@@ -233,7 +233,7 @@ VOID CScreenSpy::ScanScreen(HDC hdcDest, HDC hdcSour, ULONG ulWidth, ULONG ulHei
|
|||||||
ULONG CScreenSpy::CompareBitmap(LPBYTE CompareSourData, LPBYTE CompareDestData,
|
ULONG CScreenSpy::CompareBitmap(LPBYTE CompareSourData, LPBYTE CompareDestData,
|
||||||
LPBYTE szBuffer, DWORD ulCompareLength)
|
LPBYTE szBuffer, DWORD ulCompareLength)
|
||||||
{
|
{
|
||||||
AUTO_TICK(1);
|
AUTO_TICK(20);
|
||||||
// Windows<77>涨һ<E6B6A8><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWORD<52>Ƚ<EFBFBD>
|
// Windows<77>涨һ<E6B6A8><D2BB>ɨ<EFBFBD><C9A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ռ<EFBFBD><D5BC><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4<EFBFBD>ı<EFBFBD><C4B1><EFBFBD>, <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>DWORD<52>Ƚ<EFBFBD>
|
||||||
LPDWORD p1 = (LPDWORD)CompareDestData, p2 = (LPDWORD)CompareSourData;
|
LPDWORD p1 = (LPDWORD)CompareDestData, p2 = (LPDWORD)CompareSourData;
|
||||||
// ƫ<>Ƶ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ȵ<EFBFBD>ƫ<EFBFBD><C6AB>
|
// ƫ<>Ƶ<EFBFBD>ƫ<EFBFBD>ƣ<EFBFBD><C6A3><EFBFBD>ͬ<EFBFBD><CDAC><EFBFBD>ȵ<EFBFBD>ƫ<EFBFBD><C6AB>
|
||||||
|
|||||||
@@ -6,6 +6,8 @@
|
|||||||
#if !defined(AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_)
|
#if !defined(AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_)
|
||||||
#define AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_
|
#define AFX_STDAFX_H__46CA6496_AAD6_4658_B6E9_D7AEB26CDCD5__INCLUDED_
|
||||||
|
|
||||||
|
#define USING_ZLIB 0
|
||||||
|
|
||||||
#if _MSC_VER > 1000
|
#if _MSC_VER > 1000
|
||||||
#pragma once
|
#pragma once
|
||||||
#endif // _MSC_VER > 1000
|
#endif // _MSC_VER > 1000
|
||||||
@@ -61,7 +63,7 @@ public:
|
|||||||
|
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
// <20><><EFBFBD>ܼ<EFBFBD><DCBC>㵱ǰ<E3B5B1><C7B0><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ӡ
|
// <20><><EFBFBD>ܼ<EFBFBD><DCBC>㵱ǰ<E3B5B1><C7B0><EFBFBD><EFBFBD><EFBFBD>ĺ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD>ӡ
|
||||||
#define AUTO_TICK(thresh) auto_tick(__FUNCTION__, thresh)
|
#define AUTO_TICK(thresh) auto_tick TICK(__FUNCTION__, thresh)
|
||||||
#else
|
#else
|
||||||
#define AUTO_TICK(thresh)
|
#define AUTO_TICK(thresh)
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
BIN
client/zlib.lib
Normal file
BIN
client/zlib.lib
Normal file
Binary file not shown.
1766
client/zstd/zstd.h
Normal file
1766
client/zstd/zstd.h
Normal file
File diff suppressed because it is too large
Load Diff
BIN
client/zstd/zstd.lib
Normal file
BIN
client/zstd/zstd.lib
Normal file
Binary file not shown.
@@ -659,6 +659,8 @@ void CMy2015RemoteDlg::OnOnlineMessage()
|
|||||||
void CMy2015RemoteDlg::OnOnlineDelete()
|
void CMy2015RemoteDlg::OnOnlineDelete()
|
||||||
{
|
{
|
||||||
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
// TODO: <20>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEB4A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
||||||
|
if (IDYES != MessageBox(_T("ȷ<EFBFBD><EFBFBD>ɾ<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD><EFBFBD>ı<EFBFBD><EFBFBD>ؼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>?"), _T("<EFBFBD><EFBFBD>ʾ"), MB_ICONQUESTION | MB_YESNO))
|
||||||
|
return;
|
||||||
|
|
||||||
BYTE bToken = COMMAND_BYE; //<2F>ض˷<D8B6><CBB7><EFBFBD>һ<EFBFBD><D2BB>COMMAND_SYSTEM
|
BYTE bToken = COMMAND_BYE; //<2F>ض˷<D8B6><CBB7><EFBFBD>һ<EFBFBD><D2BB>COMMAND_SYSTEM
|
||||||
SendSelectedCommand(&bToken, sizeof(BYTE)); //Context PreSending PostSending
|
SendSelectedCommand(&bToken, sizeof(BYTE)); //Context PreSending PostSending
|
||||||
@@ -1066,7 +1068,7 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
|
|||||||
LeaveCriticalSection(&m_cs);
|
LeaveCriticalSection(&m_cs);
|
||||||
|
|
||||||
dlgInfo *p = (dlgInfo *)wParam;
|
dlgInfo *p = (dlgInfo *)wParam;
|
||||||
if (p && p->v1 > 0)
|
if (p)
|
||||||
{
|
{
|
||||||
switch(p->v1)
|
switch(p->v1)
|
||||||
{
|
{
|
||||||
@@ -1124,8 +1126,10 @@ LRESULT CMy2015RemoteDlg::OnUserOfflineMsg(WPARAM wParam, LPARAM lParam)
|
|||||||
//delete Dlg; //<2F><><EFBFBD><EFBFBD><E2B4A6>
|
//delete Dlg; //<2F><><EFBFBD><EFBFBD><E2B4A6>
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
default:break;
|
||||||
}
|
}
|
||||||
delete p;
|
delete p;
|
||||||
|
p = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
return S_OK;
|
return S_OK;
|
||||||
|
|||||||
@@ -3,8 +3,18 @@
|
|||||||
#include "2015Remote.h"
|
#include "2015Remote.h"
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
#if USING_ZLIB
|
||||||
#include "zlib.h"
|
#include "zlib.h"
|
||||||
#include "zconf.h"
|
#define Z_FAILED(p) (Z_OK != (p))
|
||||||
|
#define Z_SUCCESS(p) (!Z_FAILED(p))
|
||||||
|
#else
|
||||||
|
#include "zstd/zstd.h"
|
||||||
|
#pragma comment(lib, "zstd/zstd.lib")
|
||||||
|
#define Z_FAILED(p) ZSTD_isError(p)
|
||||||
|
#define Z_SUCCESS(p) (!Z_FAILED(p))
|
||||||
|
#define compress(dest, destLen, source, sourceLen) ZSTD_compress(dest, *(destLen), source, sourceLen, ZSTD_CLEVEL_DEFAULT)
|
||||||
|
#define uncompress(dest, destLen, source, sourceLen) ZSTD_decompress(dest, *(destLen), source, sourceLen)
|
||||||
|
#endif
|
||||||
using namespace std;
|
using namespace std;
|
||||||
|
|
||||||
CRITICAL_SECTION IOCPServer::m_cs = {0};
|
CRITICAL_SECTION IOCPServer::m_cs = {0};
|
||||||
@@ -452,13 +462,14 @@ BOOL IOCPServer::OnClientReceiving(PCONTEXT_OBJECT ContextObject, DWORD dwTrans
|
|||||||
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ǰ<EFBFBD><C7B0>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD>ѹ<EFBFBD><D1B9>ȡ<EFBFBD><C8A1>pData 448
|
//<2F><><EFBFBD><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0><EFBFBD>ǰ<EFBFBD><C7B0>Դ<EFBFBD><D4B4><EFBFBD><EFBFBD>û<EFBFBD>н<EFBFBD>ѹ<EFBFBD><D1B9>ȡ<EFBFBD><C8A1>pData 448
|
||||||
ContextObject->InCompressedBuffer.ReadBuffer(CompressedBuffer, ulCompressedLength);
|
ContextObject->InCompressedBuffer.ReadBuffer(CompressedBuffer, ulCompressedLength);
|
||||||
int iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength);
|
int iRet = uncompress(DeCompressedBuffer, &ulOriginalLength, CompressedBuffer, ulCompressedLength);
|
||||||
if (iRet == Z_OK)
|
if (Z_SUCCESS(iRet))
|
||||||
{
|
{
|
||||||
ContextObject->InDeCompressedBuffer.ClearBuffer();
|
ContextObject->InDeCompressedBuffer.ClearBuffer();
|
||||||
ContextObject->InCompressedBuffer.ClearBuffer();
|
ContextObject->InCompressedBuffer.ClearBuffer();
|
||||||
ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength);
|
ContextObject->InDeCompressedBuffer.WriteBuffer(DeCompressedBuffer, ulOriginalLength);
|
||||||
m_NotifyProc(ContextObject); //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
|
m_NotifyProc(ContextObject); //֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
|
||||||
}else{
|
}else{
|
||||||
|
OutputDebugStringA("[ERROR] uncompress failed \n");
|
||||||
throw "Bad Buffer";
|
throw "Bad Buffer";
|
||||||
}
|
}
|
||||||
delete [] CompressedBuffer;
|
delete [] CompressedBuffer;
|
||||||
@@ -486,15 +497,23 @@ VOID IOCPServer::OnClientPreSending(CONTEXT_OBJECT* ContextObject, PBYTE szBuffe
|
|||||||
{
|
{
|
||||||
if (ulOriginalLength > 0)
|
if (ulOriginalLength > 0)
|
||||||
{
|
{
|
||||||
|
#if USING_ZLIB
|
||||||
unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12;
|
unsigned long ulCompressedLength = (double)ulOriginalLength * 1.001 + 12;
|
||||||
|
#else
|
||||||
|
unsigned long ulCompressedLength = ZSTD_compressBound(ulOriginalLength);
|
||||||
|
#endif
|
||||||
LPBYTE CompressedBuffer = new BYTE[ulCompressedLength];
|
LPBYTE CompressedBuffer = new BYTE[ulCompressedLength];
|
||||||
int iRet = compress(CompressedBuffer, &ulCompressedLength, (LPBYTE)szBuffer, ulOriginalLength);
|
int iRet = compress(CompressedBuffer, &ulCompressedLength, (LPBYTE)szBuffer, ulOriginalLength);
|
||||||
|
|
||||||
if (iRet != Z_OK)
|
if (Z_FAILED(iRet))
|
||||||
{
|
{
|
||||||
|
OutputDebugStringA("[ERROR] compress failed \n");
|
||||||
delete [] CompressedBuffer;
|
delete [] CompressedBuffer;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#if !USING_ZLIB
|
||||||
|
ulCompressedLength = iRet;
|
||||||
|
#endif
|
||||||
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
|
ULONG ulPackTotalLength = ulCompressedLength + HDR_LENGTH;
|
||||||
ContextObject->OutCompressedBuffer.WriteBuffer((LPBYTE)m_szPacketFlag,FLAG_LENGTH);
|
ContextObject->OutCompressedBuffer.WriteBuffer((LPBYTE)m_szPacketFlag,FLAG_LENGTH);
|
||||||
ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE)&ulPackTotalLength, sizeof(ULONG));
|
ContextObject->OutCompressedBuffer.WriteBuffer((PBYTE)&ulPackTotalLength, sizeof(ULONG));
|
||||||
|
|||||||
@@ -148,7 +148,7 @@ public:
|
|||||||
|
|
||||||
OVERLAPPEDPLUS(IOType ioType)
|
OVERLAPPEDPLUS(IOType ioType)
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#if 0
|
||||||
char szLog[100];
|
char szLog[100];
|
||||||
sprintf_s(szLog, "=> [new] OVERLAPPEDPLUS %x by thread [%d].\n", this, GetCurrentThreadId());
|
sprintf_s(szLog, "=> [new] OVERLAPPEDPLUS %x by thread [%d].\n", this, GetCurrentThreadId());
|
||||||
OutputDebugStringA(szLog);
|
OutputDebugStringA(szLog);
|
||||||
@@ -159,7 +159,7 @@ public:
|
|||||||
|
|
||||||
~OVERLAPPEDPLUS()
|
~OVERLAPPEDPLUS()
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#if 0
|
||||||
char szLog[100];
|
char szLog[100];
|
||||||
sprintf_s(szLog, "=> [delete] OVERLAPPEDPLUS %x by thread [%d].\n", this, GetCurrentThreadId());
|
sprintf_s(szLog, "=> [delete] OVERLAPPEDPLUS %x by thread [%d].\n", this, GetCurrentThreadId());
|
||||||
OutputDebugStringA(szLog);
|
OutputDebugStringA(szLog);
|
||||||
|
|||||||
@@ -5,6 +5,8 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#define USING_ZLIB 0
|
||||||
|
|
||||||
#ifndef _SECURE_ATL
|
#ifndef _SECURE_ATL
|
||||||
#define _SECURE_ATL 1
|
#define _SECURE_ATL 1
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
BIN
server/2015Remote/zlib.lib
Normal file
BIN
server/2015Remote/zlib.lib
Normal file
Binary file not shown.
1766
server/2015Remote/zstd/zstd.h
Normal file
1766
server/2015Remote/zstd/zstd.h
Normal file
File diff suppressed because it is too large
Load Diff
BIN
server/2015Remote/zstd/zstd.lib
Normal file
BIN
server/2015Remote/zstd/zstd.lib
Normal file
Binary file not shown.
Reference in New Issue
Block a user