PcShare服务端改造
(1)合并PcCortr.DLL和PcClient.DLL
(2)将PcClient里的SshWork类和PcCortr里的MyMainTrans合并为PsMainTrans类,实现上线功能
(3)用自定义CFile类代替PcCortr里用到的MFC的CFile类,改造MyAdminTrans和文件相关函数里使用的MFC类,改为SDK
(4)去除不必要的功能,简化服务端
附CFile实现:
#pragma once
#include <fcntl.h> // filecontrol : _O_RDONLY symbol and other stuff
#include <tchar.h> // _fgetts ==> fgets
#include <stdio.h>
#include <io.h>
#include <windows.h>
class CFile
{
// Members
protected:
UINT m_hFile; // handle to actual file (created by ::CreateFile WIN32 API)
BOOL m_bCloseOnDelete;
UINT m_FileLen;
public:
// Flag values
enum OpenFlags {
modeRead = 0x0000,
modeWrite = 0x0001,
modeReadWrite = 0x0002,
shareCompat = 0x0000,
shareExclusive = 0x0010,
shareDenyWrite = 0x0020,
shareDenyRead = 0x0030,
shareDenyNone = 0x0040,
modeNoInherit = 0x0080,
modeCreate = 0x1000,
modeNoTruncate = 0x2000,
typeText = 0x4000, // typeText and typeBinary are used in
typeBinary = (int)0x8000 // derived classes only
};
enum SeekPosition {
begin = 0x0,
current = 0x1,
end = 0x2 };
enum { hFileNull = -1 };
// Constructor/Destructor
public:
CFile()
{
m_hFile = (UINT) hFileNull;
m_bCloseOnDelete = FALSE;
m_FileLen = 0;
}
~CFile()
{
if (m_hFile != (UINT)hFileNull && m_bCloseOnDelete)
Close();
}
// Methods
public:
BOOL Open(LPCTSTR lpszFileName, UINT nOpenFlags)
{
// CFile objects are always binary and CreateFile does not need flag
nOpenFlags &= ~(UINT)typeBinary;
m_bCloseOnDelete = FALSE;
m_hFile = (UINT)hFileNull;
// map read/write mode
DWORD dwAccess = 0;
switch (nOpenFlags & 3)
{
case modeRead:
dwAccess = GENERIC_READ;
break;
case modeWrite:
dwAccess = GENERIC_WRITE;
break;
case modeReadWrite:
dwAccess = GENERIC_READ|GENERIC_WRITE;
break;
default:
; // invalid share mode
}
// map share mode
DWORD dwShareMode = 0;
switch (nOpenFlags & 0x70) // map compatibility mode to exclusive
{
default:
; // invalid share mode?
case shareCompat:
case shareExclusive:
dwShareMode = 0;
break;
case shareDenyWrite:
dwShareMode = FILE_SHARE_READ;
break;
case shareDenyRead:
dwShareMode = FILE_SHARE_WRITE;
break;
case shareDenyNone:
dwShareMode = FILE_SHARE_WRITE|FILE_SHARE_READ;
break;
}
// map modeNoInherit flag
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = (nOpenFlags & modeNoInherit) == 0;
// map creation flags
DWORD dwCreateFlag;
if (nOpenFlags & modeCreate)
{
if (nOpenFlags & modeNoTruncate)
dwCreateFlag = OPEN_ALWAYS;
else
dwCreateFlag = CREATE_ALWAYS;
}
else
dwCreateFlag = OPEN_EXISTING;
// attempt file creation
HANDLE hFile = ::CreateFile(lpszFileName, dwAccess, dwShareMode, &sa,
dwCreateFlag, FILE_ATTRIBUTE_NORMAL, NULL);
if (hFile == INVALID_HANDLE_VALUE)
return FALSE;
m_hFile = (HFILE)hFile;
m_bCloseOnDelete = TRUE;
return TRUE;
}
LONG Seek( LONG lOff, UINT nFrom )
{
if (m_hFile == (UINT)hFileNull) return 0;
return ::SetFilePointer((HANDLE)m_hFile, lOff, NULL, (DWORD)nFrom);
}
DWORD SeekToBegin()
{
return Seek(0,CFile::begin);
}
DWORD SeekToEnd()
{
return Seek(0, CFile::end);
}
UINT Read(void* lpBuf, UINT nCount)
{
if (nCount == 0) return 0; // avoid Win32 "null-read"
DWORD dwRead = 0;
::ReadFile((HANDLE)m_hFile, lpBuf, nCount, &dwRead, NULL);
return (UINT)dwRead;
}
void Write( const void* lpBuf, UINT nCount )
{
if (m_hFile == (UINT)hFileNull) return;
if (nCount == 0)
return; // avoid Win32 "null-write" option
DWORD nWritten;
::WriteFile((HANDLE)m_hFile, lpBuf, nCount, &nWritten, NULL);
m_FileLen +=nWritten;
}
void Flush()
{
if (m_hFile == (UINT)hFileNull) return;
::FlushFileBuffers((HANDLE)m_hFile);
}
void Close()
{
if (m_hFile != (UINT)hFileNull)
::CloseHandle((HANDLE)m_hFile);
m_hFile = (UINT) hFileNull;
m_bCloseOnDelete = FALSE;
}
UINT GetLength()
{
return m_FileLen;
}
};
PcShare服务端改造相关推荐
- 单点登录(SSO)解决方案之 CAS服务端数据源设置及页面改造
单点登录(SSO)解决方案之 CAS服务端数据源设置及页面改造 参考文章: (1)单点登录(SSO)解决方案之 CAS服务端数据源设置及页面改造 (2)https://www.cnblogs.com/ ...
- vue项目转换服务器端渲染,vue-server-renderer实现vue项目改造服务端渲染
这是一篇教程,从创建项目到改造项目 vue-cli创建一个项目 在放你做demo的地方,创建一个项目 vue create vue-ssr // 如果你安装了vue-cli4,选择vue2的版本,以下 ...
- vue2-ssr从vue-cli搭建项目改造服务端渲染+打包上线部署
为了完成vue+ssr,本人呕心沥血翻阅很多博主的文档,并在b站看了很多视频之后,经过个人实践,终于整理出一套完整版,无缺失,不报错的改造流程(亲测!!) 从创建=>打包=>上线部署,详细 ...
- 聊一聊 Java 服务端中的乱象
点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:阿里巴巴中间件 查尔斯·狄更斯在<双城记>中写道 ...
- 那些年,我们见过的 Java 服务端乱象
点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 Photo by The Book Tutor @Youtube 文 | 陈昌毅 导读 查尔斯 ...
- Linux服务端最大并发数是多少?
1. 开场白 在开始今天的文章之前,先抛一个面试题出来: 你接触过的单机最大并发数是多少? 你认为当前正常配置的服务器物理机最大并发数可以到多少? 说说你的理解和分析. 思考几分钟,如果你可以有理有据 ...
- 从编程小白到全栈开发:基于框架开发服务端
上文中,我们了解了关于服务器端的一些概念知识,尤其是HTTP协议相关的最基本知识点,今天我想跟大家分享一下在平时正真的开发中,是如何来利用和体现这些内容的. 还记得我在<从编程小白到全栈开发:改 ...
- 十几万人同时在线的直播间聊天,如何设计服务端架构?
问题 以下内容源自oschina的一篇讨论帖: 问题:这是在知乎上看到的关于如何搭建视频直播系统时想到的一个问题,在此不考虑其他直播上的问题,仅考虑聊天系统,一个热门视频直播间人数可能达到几十万人,一 ...
- markdownpad2 html渲染组件出错_「万字长文」一文吃透React SSR服务端同构渲染
写在前面 前段时间一直在研究 react ssr技术,然后写了一个完整的 ssr开发骨架.今天写文,主要是把我的研究成果的精华内容整理落地,另外通过再次梳理希望发现更多优化的地方,也希望可以让更多的人 ...
- 开源netcore前后端分离,前端服务端渲染方案
SPA单页面应用容器 开源地址: https://github.com/yuzd/Spa 功能介绍 前端应用开发完后打包后自助上传部署发布 配合服务端脚本(javascript)实现服务端业务逻辑编写 ...
最新文章
- 2021-7-20 Linux服务器终端terminals关不掉怎么办???
- angular1x初始与架构演进(三)Ui-Router+OcLazyLoad加载模块
- 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言——1085:球弹跳高度的计算
- 将同时共享的用户数量限制为20_共享充电宝市场需求及计划
- 前端学习(3013):vue+element今日头条管理--手动触发验证
- (6)FPGA面试技能提升篇(OpenCV)
- pcb设计单点接地示意图_PCB设计接地详解
- 启动Tomcat出现Using CATALINA_BASE
- python实现将将输入的可约分数化简为不可约分数
- 云龙51单片机视频教程+课件+程序代码+课后作业,零基础入门视频教程
- 傅里叶变换公式及其推导【超详细!】
- 运用递归来画谢尔宾斯基三角形
- android系统程序卸载,怎样卸载Android系统程序
- uni-app 常用内容
- 汽车精准用油,您真的了解吗?
- Android常见的错误及解决
- 6 2018-SAE-based classification of school-aged children with ASD using functional magnetic resonanc
- 自定义切面会吃掉异常,导致事务不生效的问题。
- 爆料:Micron计划推出OLC(Octa Level Cell) NAND
- ASR 语音识别(VOSK)API资源/DEMO
热门文章
- Python爬虫【一】爬取移动版“微博辟谣”账号内容(API接口)
- 原来这就是公文写作领导讲话稿模板(3)
- html手机表白弹窗,怎么制作抖音弹窗表白代码 制作抖音弹窗表白代码的教程
- 利用计算机可视化画一个矩形,可视化程序设计大作业题目
- 小猫跳圈-第12届蓝桥杯Scratch省赛3真题第1题
- IEEE的论文哪里可以下载?
- Day05 郝斌C语言自学视频之C语言的函数
- Ds918 ds3615 ds3617区别_红、白葡萄酒间真正的区别
- stvd watch 实时变量查看
- python去重txt文本_Python实现的txt文件去重功能示例