//bincls对象.txt
本对象由Server对象生成。在处理网络数据或装备等二进制数据时使用。
比如:Set zb=Server.Bincls
zb.BinDat rs("装备") 把装备数据写入。
n=zb.Lent 取数据长度。

一、数据处理。
Lent 读取或设置数据的长度。
s=Lent 获取数据长度。
Lent=0 清空数据。指针置0。
Lent=n 清空数据并写入n字节的0字符。指针置0处。

Copy sp,n,dp 复制数据
sp为源位置,n为复制长度,dp是目标位置
n为正数时,复制存入的数据。
n为负数时,复制内存指针的数据。

Rdat(n,p) 读取数据
参数n为读取长度,默认为0。参数p为读取位置,默认为上次结尾。
长度1到4之间则读取为数字,n为下列值时读取到对应的类型。
0 读取全部二进制数据
1 读取为字节。
2 读取为整形。
3 读取为小数。
4 读取为整数。
-1 读取指针后面的全部数据
n大于4时,读取指定长度二进制数据。
n小于-1时,读取正n长度二进制数据,此时p必须为内存指针。

RStr(n,p) 读取字符串
参数n为读取长度,默认为0。参数p为读取位置,默认为上次结尾。
0 读取一个未知长度的字符串。
n大于0,读取指定长度的字符串。

Wdat(dat,n,p,pn) 写入数据
参数n为写入长度,默认为2。参数p为写入位置,默认为上次结尾。
参数dat为写入的数据,pn是从数据指定位置处的写入到目标位置p。
pn参数仅用于写入二进制数据,而且只需要写入中间一部分数据时使用。
比如dat是5千字节的二进制数据,需要从第36字节处,取72字节
代码是:Wdat dat,72,,36 (写入位置为空或-1,则写入上次结尾处)

长度1到4之间则写入为数字,n为下列值时写入对应的类型。
-1 写入十六进制字符串(如:AA55320055AA)
0 写入一个字符串。
1 写入一字节数字(0~255)。
2 写入两字节数字(0~65535)。
3 写入四字节的小数。
4 写入四字节的整数。
n大于4时,写入指定长度的二进制数据。
n小于-1时,写入正n长度二进制数据,此时p必须为内存指针,pn为偏移量。

Swap(s,p,n) 交换数据,用于换位置,使用装备等。
参数s是源位置,p是目标位置,n是数据长度。

DeaL(s,p,n) 与其它数据对象交换数据。用于玩家交易,存取仓库等。
参数s是源位置,p是目标位置,n是数据长度。
位置必须是内存指针,使用Point函数获取。

Point(p) 获取指定位置的内存指针。
Delt(p,n) 删除数据,p是位置,n是长度。
MvPt(n) 移动指针,若数据超出长度,则增加数据。
假如现有数据是8字节,MvPt 20 就增加数据12字节
总长度变为20。如果原有数据大于等于20,则不增加数据。

Denc(key,i) 利用随机函数进行加密数据
key为长整数型密钥,i为加密起始位置,默认为0
此加密是可逆的,加密后用相同的key再次调用此函数即可解密

Mask(key,i) 对数据进行掩码加密
key为密钥,支持长整数型和字节组
i为加密起始位置,默认为0
此加密是可逆的,加密后用相同的key再次调用此函数即可解密

二、数组集合。
GetN 得到一个空位,获取时此位置失效,若无空位返回-1
如果没存入数据也会无效,除非再增加此空位。
GxKw y,x 更新空位,y原来位置,x新的位置。
KWSL 查询有多少个空位置。
WPSZ(wp)=i 添加或修改物品的位置。用于一些特定物品需要经常读写的情况
如增加可重叠物品,就需要查询有没有此物品,有就在原来物品增加数量。
WPSZ(wp)=-1 设置为-1时,删除此物品信息。
i=WPSZ(wp) 查询有无此物品,有就返回位置,没有就返回一个空位。

id数组:类似于集合的动态数组。存储-32768~32767之间的数字ID,每个ID占两字节。

Add id,t 添加id到数组,t为元素数。可以是一元或二元数组。默认为1。
一元数组仅存储ID,二元数组存储ID和数量。每增加一次,数量加1。
BinI n 把二进制数据转换为数组,数据是提前写入的,n代表从数据指定位置转换。
Count 获取存储数组的数量,当使用二元数组时,数量是两倍,要除以2。
IBin n 把存储数组转换为二进制数据。n是写入二进制数据的位置。默认为0。
s=Item(id) 读取指定ID的数量,只有二元数据才能使用,若未查到返回-1。
Item(id)=s 修改指定ID的数量,若未查到则修改无效。
id=Key(i) 读取指定位置的ID的,二元数组要乘2减1,乘2则获取数量。
Key(i)=id 修改指定位置的ID,二元数组要乘2减1,乘2则修改数量。
Remove id,t 从数组中删除指定id,t为元素数。
RemoveAll 删除所有存储数据。

//Server对象详解.txt
脚本规则:
一、程序运行时自动加载指定脚本,并执行里面Init这个代码过程。
程序指定的配置文件是同目录下跟程序同名的ini文件,

Sub Init()
Server.RScrt "Ser.jsc",1
End Sub

下面的示例来演示端口转发功能
Sub Init()
Server.ForPt = 1301
End Sub

二、当有接收到客户端发来的数据时,会执行Proce的代码过程。

Sub Proce(id,dat)
id是每个客户端的编号
dat是客户端发来的数据
End Sub

三、当连接的客户端断开连接时,会执行OffLine的代码过程。
Sub OffLine(id)
id是客户端编号
End Sub

四、当WebSocket与服务器握手之后,消息数据会传递至WebMsg过程。

Sub WebMsg(id,dat)
id是每个客户端的编号
dat是客户端发来的数据
End Sub

五、服务器进程通讯。
1.使用SendMsg向指定服务器进程发送数据。
用法:rt = Server.SendMsg(sn,msg)
sn:服务器名称,直接启动的就是程序文件名称
用Server.Start(服务名)启动的,就是此服务器名
此服务名也是程序运行后显示的窗体名。
msg:是要发送的消息内容,为文本类型。
rt:返回发送结果,发送成功返回Ture。

2.指定的服务器进程收到消息后,传递至OnMsg这个过程。
Sub OnMsg(msg)
收到消息处理过程
End Sub

六、服务器内置Server对象详解。

  1. LcIP:取得服务器本机IP。
    用法:ip = Server.LcIP(id)
    用途:这个IP在双线服务器,是获取玩家连接的那个IP。
    举例:在登陆器选择了电信分区,则得到电信的IP。可用于匹配自动线路。
  2. RHIP:取得远程用户IP地址。
    用法:str = Server.RHIP(id)
    用途:得到用户IP可以记录登陆地址或非法操作,实现封IP等。
  3. GWIP:取得服务器公网IP
    ip=Server.GWIP
  4. AddMenu:添加右键菜单
    用法:Server.AddMenu 菜单名称,函数名
    举例:Server.AddMenu "加密脚本","EnCode"
    函数名要使用英文。对应自己写一段函数代码
    例如EnCode对应下面的这段代码
    Sub EnCode()
    Server.EnCode "test.vbs"
    MsgBox "加密成功", 64, "提示"
    End Sub
  5. AddMsg:添加记录信息。
    Server.AddMsg "信息内容。"
    就是在主程序界面显示的消息,
  6. BinCls:创建二进制处理对象。
    用法:Set obj = Server.BinCls
    这是一个子对象,包括数据处理和数组集合。

Base64(bin) Base64编码
BinCls子对象
BZip 压缩子对象

  1. Cols:创建一个数组集合。
    用法:Set obj = Server.Cols
    该集合仅用于存储对应编号的整数型数据。
  2. Coll:创建一个标准的Collection对象
    用法:Set obj = Server.Coll
  3. CreateObject:创建新对象。
    示例:Set obj = CreateObject("adodb.connection")

Server.Conv(str,cv)
str是欲转换的数据,cv有以下选项
vbUpperCase 1 将字符串转换为大写字符。
vbLowerCase 2 将字符串转换为小写字符。
vbProperCase 3 将字符串中每个词的第一个字母转换为大写。
vbWide 4 将字符串中的窄(单字节)字符转换为宽(双字节)字符。
vbNarrow 8 将字符串中的宽(双字节)字符转换为窄(单字节)字符。
vbKatakana 16 * 将字符串中的平假名字符转换为片假名字符。
vbHiragana 32 * 将字符串中的片假名字符转换为平假名字符。
vbUnicode 64 将字符串转换为Unicode使用系统的默认代码页。(在 Macintosh 上不可用。)
vbFromUnicode 128 将字符串从 Unicode 转换为系统的默认

  1. CRC32文件或文本校验。
    Server.CRC32("http://127.0.0.1")
    检验一个字符串
    Server.CRC32("D:\test.dll")
    校验一个文件

Dict:创建一个标准的Scripting.Dictionary对象
用法:Set obj = Server.Dict

DeBase64(str) Base64解码,返回二进制数据块
dat = Server.DeBase64("...")

11。读取和写入ini文件
读取ini:
s=Server.ini(分类,项目)
s=Server.ini("设置","外网地址")
项目名称为空时,返回此分类下所有项目名称
s=Server.Rini("江湖一区")
写入ini:
Server.ini(分类,项目)=新值
Server.ini("设置","数据名称")="rxjhgame"
删除项目
Server.ini("设置","数据名称")=""
删除分类
Server.ini("设置")=""

12。数据库操作
Server.Execute sql语句
可以执行所有sql语句操作。
但是打开的表是只读的。
而Server.Rst则可以更新表
Set rs=Server.Rst("select * from tbl_account")
rs("FLD_LoginIP")= Server.RHIP(id)
rs.Update
rs.Close
Set rs = Nothing

13。EnCode(path):加密脚本。

14。ExeC(path):执行一个脚本文件并返回结果。可以是vbsc或jsc

FileObj 创建一个FileSystemObject对象

示例:Set obj = Server.FileObj

15。GetScok(dat,[pt]):跟指定服务器通信。
dat是要发送的数据,一般要转换成二进制数据
如果直接发送字符串,传送内容会是UNICODE格式
pt是通信端口,设置过通信端口,则可以省略
网站需要跟其它服务端程序通信时使用。
默认通信IP是本机127.0.0.1
也可以通过下面语句修改通信IP
Server.RoIP="192.168.1.2"
'指定通信端口
Server.RoPt=901
指定了通信端口,pt参数可选
'清空数据
示例:
bin=Server.Conv("hello")
'将字符转换成二进制
dat=Server.GetSock(bin)
返回收到的二进制数据

16。Opd:连接数据库。
OFF(id)关闭Socket
Port获取服务器端口
Map(path) 虚拟路径转换为物理路径
Quit退出服务器程序
RmPt(id)获取远程端口

17。RScrt:读取脚本文件。
Server.RScrt "Ser.jsc", 1
后面加参数1是清除并重新加载。
默认为0,加载多个脚本必须为相同类型。

Run(path,md) 运行一个程序.

18。SetTime:设置定时器
Server.SetTime id,sj
id为定时器编号,sj为定时时间,单位毫秒。
sj为0取消定时,大于0执行定时。
定时事件触发脚本的OnTimer过程。

19。Start:启动新程序。
Server.Start 服务名
运行新的服务程序,并通过服务名读取相应的配置文件

20。Send:发送网络数据
Server.Send id,dat
id为客户端编号,dat为发送的数据。

SendMsg(sn,str)
sn服务名,str发送的字符

21。Hash:加密函数。
mstr=Server.Hash(str,am)
str是要加密的字符串,am是可选项,默认为MD5(3)
其它加密选项值分别是MD2=1;MD4=2;MD5=3;SHA1=4;

22。State:获取网络连接状态。
s=Server.State(id)
id为客户端编号。

23。ToBin:把十六进制字符转为字节数据流。
bin=Server.ToBin(str)

24。ToHex:把字节数据转为十六进制字符。
str=Server.ToHex(bin)

25.ToUniCode:把UTF-8数据转为unicode字符串。
str=Server.ToUniCode(bin)

26.ToUTF8:把unicode字符串转为UTF-8数据。
bin=Server.ToUTF8(str)

27。Base64:把字节数据转换为base64编码字符串。
str=Server.Base64(bin)

28。DeBase64:把base64编码字符串转换为字节数据。
bin=Server.DeBase64(str)

Read(file,pos,ln)
file,要读取的文件名
pos,读取数据的指针位置,默认从第一个字符开始
ln,读取数据的长度,默认读取全部内容
29.Save 保存数据到文件
Server.Save dat,file,pos
dat是要保存的二进制数据
file是要保存的文件名和路径
pos,可选,保存数据的指针位置,默认为1

30.Script 加载一个新的脚本对象
Server.Script file
常用于执行调用临时的脚本代码

//Web对象.txt
AddHeader 用指定的值添加 HTML 标题。该方法常常向响应添加新的 HTTP 标题
BinaryRead 方法获取作为 POST 请求的一部分而从客户端传送到服务器的数据
BinaryWrite 方法不经任何字符转换就将指定的信息写到 HTTP 输出
Browser 返回一个字符串,用以查询访问者的浏览器类型及其特性
ContentType 查询请求的 FORM 内容类型,或者设置浏览器的Mime类型
Cookies 设置或查询浏览器的Cookie信息。
Echo 将指定的字符串写到当前的 HTTP 输出
Expires 属性指定了在浏览器上缓冲存储的页距过期还有多少时间。
Gain 获取服务器变量及提交表单等信息。
GMTime 把指定时间转换为GMT时间。
Redirect 使浏览器尝试连接到其他 URL
Status 设置或获取服务器状态行的值。
TotalBytes 获取客户端在请求正文中发送的总字节数。
IsConnected 检测客户连接是否仍然有效

Gain 获取服务器变量及提交表单等信息。
相当于Request.QueryString Request.Form Request.ServerVariables这三个集合。
str=Web.Gain
返回QueryString和Form内容之和。
str=Web.Gain("QUERY_STRING")
返回 HTTP 请求中问号(?)后的信息。
str=Web.Gain("FORM_STRING")
返回 FORM 表单全部信息。
str=Web.Gain("LOCAL_ADDR")
返回接受请求的服务器地址。
str=Web.Gain("SERVER_NAME")
返回服务器主机名、DNS 化名或 IP 地址。
str=Web.Gain("SERVER_PORT")
返回接受请求的服务器端口号。
str=Web.Gain("REMOTE_ADDR")
返回发出请求远程主机的IP地址。
str=Web.Gain("REMOTE_PORT")
返回发出请求远程主机的端口。
str=Web.Gain("REMOTE_HOST")
返回远程主机请求的域名信息。

Cookies 设置或查询浏览器的Cookie信息。
str=Server.Cookies
获取全部Cookie内容
str=Server.Cookies(key)
读取指定名称的Cookie值
Server.Cookies(key)=value
设置指定名称的Cookie值

//脚本编程指南
一、编程基本知识。
电脑编程语言分为两大体系:Basic和C语言。
Basic常见的有Vb6 vb.net vba vbs asp等。
c语言常见的有VC C++ C# java phthon等。
Basic语言已很少被使用,大多数都是基于c语言,包括安卓、苹果和linux系统都是。
提供的服务器程序,是支持vbs和js这两种脚本的。
vbs是Basic语言,为方便简称VB。
js是c语言,说C的时候同时也指js
下面我就简单说明一下这两种脚本的基本语法。

  1. 运算符。
    因为两种语言的运算符有差异,就用中文概括一下
    加、减、乘、除、求余、指数 是算术运算符
    等于、大于、小于、大于等于、小于等于是关系运算符(通俗的说就是判断两者的关系)
    非、与、或、异或、取反 是逻辑运算符

  2. / 除
    四则运算不用再解释了吧,(其中+号也起到连接两个字符串的作用,-号也是负数符号)
    < 小于

    大于
    = 大于等于
    <= 小于等于
    这几个是关系运算符,用于判断的,而有些关系符号,两种语言有差异。
    下面一些符号在B和C语言里写法不相同的,对比如下:
    vbs js 中文解释
    Or | 或
    Xor ^ 异或
    And & 与
    Mod % 求余
    无 << 左移
    无 >> 右移
    无 ++ 自加
    无 -- 自减
    Not ! 非
    Not ~ 取反
    = == 等于
    <> != 不等于
    在c语法里,运算符号进行条件判断时,则用两个一起使用,来区分是运算还是条件。
    而vb的运算符号在条件判断时仍然不变。
    例如c条件 if(a == 1) 是判断a等于1则执行什么。
    如果写成 if(a = 1)那么就不是判断,而让a的值等于1了
    在vb里 if a=1 then 是判断a是否等于1,只写a=1就是让a的值等于1
    同样c代码里其它逻辑符号在判断时,也是两个一起。如 && || 等
    vb里这些都不变,编译器会根据语句知道是条件还是计算,c语言就没这么智能。
    下面是vb里的其它运算算
    \ 整除
    ^ 指数
    Eqv 等价
    Imp 蕴含
    Sqr 平方根
    & 连接两个字符串
  3. 表达式。
    b和c的显著区别,就是表达式。
    b的每个语句用换行符或者:隔开,而c是用;隔开。
    b的代码开始,到结束是end.而c是用大括号{}。
    vb语法很容易用中文解释,c就比较困难。
    我写过一个中英文双语编程,是用c语言核心,把部分语法用vb的方式实现中文化
    但是做不到完全中文编程。下面举例说明两者语法差异。
    VB:
    if a=1 then
    b=b+1
    end if
    中文编程就是:
    如果 a 等于 1 则
    b 等于 b 加 1
    结束 如果
    VB:
    Function jiafa(a,b)
    jiafa = a + b
    end Function
    中文编程就是:
    函数 加法(a,b)
    加法 等于 a 加 b
    结束 函数
    在js里如果语句是这样
    if(a==1){b++}
    写法很简单,但是用中文就是:
    如果 左小括号 a 等于等于 1 右小括号 左大括号 b 等于 b 加 1 右大括号

上面的代码用中文书写,那么你能看懂吗,其实更难理解了。这是什么呀,根本不通顺。
那么这就对了,很多没学过编程的,看到英文就头大,根本不知道意思啊,为什么不用中文编程。
其实美国人看编程代码也跟我们看刚才的中文示例一样的。即使写成中文,它也不是中文的文章可以去读。
废话不多说,我们来了解一下表达式。

//说明书.txt
H5服务器脚本引擎可以用来搭建网站,开发网络游戏,网页游戏,聊天服务器,H5页游网游手游四端合一
这里说的四端合一, 不是是指四种服务端可以兼容性通讯, 而是一套服务端代码可实现四种服务

这个服务器引擎于2016年基本完成开发,但是说明书一直没有写,2018年仅仅写了简单的对象说明
不同于PHP\ASP\ASPX\JSP等网站脚本,此引擎不但可以写网站服务器脚本,还能开发游戏服务器
网站后端代码可以直接访问游戏服务器的所有内存对象,数据函数等等
但不像PHP那样可以扩展到操作系统下的函数接口,这也是PHP漏洞的最大根源
当初开发ASP时候也是被各种漏洞搞得焦头烂额,所以才开发了这个安全型网站游戏服务器引擎


费先生
1 声望0 粉丝