从事多年网络开发,都是在第一战线难得闲下来回头整理开发资料,现在将以往的视频会议及即时通讯系统项目每个功能和步骤详细介绍一下,借此达到抛砖引玉的效果,多认识一些这方面的牛人和学习者大家共勉。
1、 白板数据传输协议
该协议是在会议的过程中,客户端将生成的白板数据发送到白板服务端,有白板服务端统一管理, 白板服务端在转发白板数据的同时,会处理并保存白板数据。这样,后面的用户进入会议室时,白板服务器就会将保存的白板数据发送给该用户。
白板数据控制协议
该协议是作为白板传输协议的子协议,是在实时操作白板的时候进行的控制协议,会议过程中对于客户端的操作,白板服务端会实时转发该协议到当前的会议人员,同时处理并保存白板数据,为后面登录的人员提供完整的白板数据。
(1)发送电子白板数据
功能描述 | 发送电子白板数据 | ||||
命令定义 | WB_CMD_VIEWDATA 0X01 | ||||
结构定义 | 功能 | 名称 | 类型 | 长度 | 备注 |
命令 | bCommand | BYTE | 1 |
| |
白板ID | dwViewID | DWORD | 4 |
| |
数据长度 | wViewDataLen | WORD | 2 |
| |
数据 | Data | BYTE | wViewDataLen |
| |
备注 | 该协议中的数据包含有白板数据对象的控制协议(见3) |
(2)新建一个电子白板
功能描述 | 新建一个电子白板 | ||||
命令定义 | WB_CMD_CREATEVIEW 0X02 | ||||
结构定义 | 功能 | 名称 | 类型 | 长度 | 备注 |
命令 | bCommand | BYTE | 1 |
| |
白板ID | dwViewID | DWORD | 4 |
| |
白板大小 | szView | SIZE |
|
| |
白板页数 | bPages | BYTE | 1 |
| |
文件个数 | bFileCount | BYTE | 1 |
| |
是否是临时文档 | bTemp | BYTE | 1 |
| |
文档压缩标志 | bFileFlag | BYTE | 1 | WB_FLAG_UNCOMPRESS:未压缩,WB_FLAG_COMPRESS为压缩格式 | |
白板名称长度 | bViewNameLen | BYTE | 1 |
| |
文件服务器IP地址列表长度 | bIpListLen | BYTE | 1 |
| |
文件在服务器存放路径长度 | bFilePathLen | BYTE | 1 |
| |
白板名称 | szName | CHAR | bViewNameLen |
| |
IP地址列表 | szIpList | CHAR | bIpListLen |
| |
文件存放路径 | szSrvPath | CHAR | bFilePathLen |
| |
备注 |
|
(3)关闭一个电子白板
功能描述 | 关闭一个电子白板 | ||||
命令定义 | WB_CMD_DELETEVIEW 0X03 | ||||
结构定义 | 功能 | 名称 | 类型 | 长度 | 备注 |
命令 | bCommand | BYTE | 1 |
| |
白板ID | dwViewID | DWORD | 4 |
| |
备注 |
|
(4)激活一个电子白板
功能描述 | 激活一个电子白板 | ||||
命令定义 | WB_CMD_ACTIVEVIEW 0X04 | ||||
结构定义 | 功能 | 名称 | 类型 | 长度 | 备注 |
命令 | bCommand | BYTE | 1 |
| |
白板ID | dwViewID | DWORD | 4 |
| |
备注 |
|
(5)改变显示比例
功能描述 | 改变显示比例 | ||||
命令定义 | WB_CMD_SCALEVIEW 0X05 | ||||
结构定义 | 功能 | 名称 | 类型 | 长度 | 备注 |
命令 | bCommand | BYTE | 1 |
| |
比例分子 | wScaleNum | WORD | 2 |
| |
比例分母 | wScaleDen | WORD | 2 |
| |
备注 |
|
(6)设置白板的当前显示页
功能描述 | 设置白板的当前显示页 | ||||
命令定义 | WB_CMD_VIEWPAGE 0X06 | ||||
结构定义 | 功能 | 名称 | 类型 | 长度 | 备注 |
命令 | bCommand | BYTE | 1 |
| |
白板ID | dwViewID | DWORD | 4 |
| |
页码 | bPageIndex | BYTE | 1 |
| |
备注 |
|
2、 白板数据对象控制协议
白板数据对象控制协议主要是管理白板对象,以及白板对象的描述控制,该协议是附属于白板控制协议中的白板数据下,其中主要对象类型定义如下:
功能描述 | 数据类型定义 |
空对象 | WB_OBJ_EMPTY 0x00 |
直线 | WB_OBJ_LINE 0x01 |
箭头 | WB_OBJ_ARROW 0x02 |
空心矩形 | WB_OBJ_RECT 0x03 |
实心矩形 | WB_OBJ_RECTFILL 0x04 |
空心圆角矩形 | WB_OBJ_ROUNDRECT 0x05 |
实心圆角矩形 | WB_OBJ_ROUNDRECTFILL 0x06 |
空心椭圆 | WB_OBJ_ELLIPSE 0x07 |
实心椭圆 | WB_OBJ_ELLIPSEFILL 0x08 |
多边形 | WB_OBJ_POLY 0x09 |
文字 | WB_OBJ_TEXT 0x0A |
钢笔 | WB_OBJ_PEN 0x0B |
铅笔 | WB_OBJ_PENCIL 0x0C |
图标 | WB_OBJ_ICON 0x0D |
填充模式定义:
typedef enum
{
WB_FILLMODE_SOLID = 0,
WB_FILLMODE_BDIAGONAL,
WB_FILLMODE_CROSS,
WB_FILLMODE_DIAGCROSS,
WB_FILLMODE_FDIAGONAL,
WB_FILLMODE_HORIZONTAL,
WB_FILLMODE_VERTICAL
}WB_FillMode;
线型定义:
typedef enum
{
WB_LINESTYLE_SOLID=0x0,
WB_LINESTYLE_DASH,
WB_LINESTYLE_DOT,
WB_LINESTYLE_DASHDOT,
WB_LINESTYLE_DASHDOTDOT
}WB_LineStyle;
(1)创建绘图对象
功能描述 | 创建绘图对象 | ||||
命令定义 | WB_DATATYPE_CREATEOBJ 0X01 | ||||
结构定义 | 功能 | 名称 | 类型 | 长度 | 备注 |
命令 | bCommand | BYTE | 1 |
| |
创建的对象个数 | unObjCount | UINT | 4 |
| |
对象信息总长度 | wDataLen | WORD | 2 |
| |
对象信息 | ObjInfo | WB_DATA_OBJINFO | wDataLen | 对象信息的数据 | |
备注 | 该协议中的对象信息是包括具体的对象信息数据,以及对象所在的页面,对象信息的数据结构下面有说明,同时在对象信息结构中的具体对象信息也依次定义了,请参考下面的结构。 |
对象信息的数据结构定义如下:
typedef struct
{
BYTE bPageIndex; //当前页
BYTE bObjType; //对象类型
DWORDdwObjID; //对象ID
WORD wObjInfoLen; //对象信息长度
//后接具体对象信息
}WB_DATA_OBJINFO;
具体对象信息定义:
(a)实心矩形、实心圆角矩形、实心椭圆对象信息
typedef struct
{
COLORREF color; //RGB颜色
BYTE bFillMode; //填充模式
POINT ptLT; //左上角坐标
POINT ptRB; //右下角坐标
}WB_OBJINFO_RECTFILL,WB_OBJINFO_ROUNDRECTFILL,WB_OBJINFO_ELLIPSEFILL;
(b)直线、箭头、空心矩形、空心圆角矩形、空心椭圆对象信息
typedef struct
{
COLORREF color; //RGB颜色
BYTE bLineStyle; //线型
BYTE bLineWidth; //线宽
POINT ptLT; //左上角坐标
POINT ptRB; //右下角坐标
}WB_OBJINFO_LINE,WB_OBJINFO_ARROW,WB_OBJINFO_RECT,WB_OBJINFO_ROUNDRECT,WB_OBJINFO_ELLIPSE;
(c)钢笔、铅笔、多边形对象信息
typedef struct
{
COLORREF color; //RGB颜色
BYTE bLineStyle;//线型
BYTE bLineWidth;//线宽
UINT nPtCount; //顶点个数
//顶点坐标列表 长度=Sizeof(POINT)*nPtCount
}WB_OBJINFO_PEN,WB_OBJINFO_PENCIL,WB_OBJINFO_POLY;
(d)文字对象信息
typedefstruct
{
COLORREFcolor; //RGB颜色
LOGFONT logFont;//字体
WORD wStringLen;//文字长度
POINT ptLT; //左上角坐标
POINT ptRB; //右下角坐标
//文字数据,长度=wStringLen
}WB_OBJINFO_TEXT;
(e)图标对象信息
typedef struct
{
UINT nIconID;//图标ID
POINT ptLT; //左上角坐标
}WB_OBJINFO_ICON;
(2)删除绘图对象
功能描述 | 删除绘图对象 | ||||
命令定义 | WB_DATATYPE_DELETEOBJ 0X02 | ||||
结构定义 | 功能 | 名称 | 类型 | 长度 | 备注 |
命令 | bCommand | BYTE | 1 |
| |
删除对象所在的页码 | bPageIndex | BYTE | 1 |
| |
删除的对象个数 | wObjCount | WORD | 2 |
| |
删除对象ID列表 | ObjIDList | DWORD | 4* wobjCount |
| |
备注 |
|
(3)移动绘图对象
功能描述 | 移动绘图对象 | ||||
命令定义 | WB_DATATYPE_MOVEOBJ 0X03 | ||||
结构定义 | 功能 | 名称 | 类型 | 长度 | 备注 |
命令 | bCommand | BYTE | 1 |
| |
移动对象所在的页码 | bPageIndex | BYTE | 1 |
| |
移动大小 | sz | SIZE |
|
| |
移动的对象个数 | wObjCount | WORD | 2 |
| |
移动对象ID列表 | ObjIDList | DWORD | 4* wobjCount |
| |
备注 |
|
(4)移动绘图对象的某个控制点
功能描述 | 移动绘图对象的某个控制点 | ||||
命令定义 | WB_DATATYPE_MOVEOBJPOINT 0X04 | ||||
结构定义 | 功能 | 名称 | 类型 | 长度 | 备注 |
命令 | bCommand | BYTE | 1 |
| |
移动对象所在的页码 | bPageIndex | BYTE | 1 |
| |
移动对象ID | dwObjID | DWORD | 4 |
| |
移动的点索引 | wPtIndex | WORD | 2 |
| |
移动大小 | sz | SIZE |
|
| |
备注 |
|
联系方式
QQ:1152597562
即时通讯源代码, im源码, im源代码 即时通讯全套源码,oseicq源码,QQ源代码,旺旺源代码,msn源代码,歪歪源代码