DOF/sqr/User/Socket/Packet.nut

92 lines
1.8 KiB
Plaintext

/*
文件名:Packet.nut
路径:User/Socket/Packet.nut
创建日期:2025-01-04 22:20
文件用途:数据封包类
*/
class Packet {
Data = null;
constructor(...) {
//不传参数时,构造空包
if (vargv.len() == 0) {
this.Data = blob();
}
//传入数据流以流的形式构造包
else {
this.Data = vargv[0];
}
}
//字节
function Put_Byte(Value) {
this.Data.writen(Value, 'c');
}
//短整型
function Put_Short(Value) {
this.Data.writen(Value, 's');
}
//整型
function Put_Int(Value) {
this.Data.writen(Value, 'i');
}
//浮点型
function Put_Float(Value) {
this.Data.writen(Value, 'f');
}
//字符串
function Put_String(String) {
foreach(char in String) {
Put_Byte(char);
}
}
//字节数组
function Put_Binary(BinaryArray) {
//流
if (typeof BinaryArray == "blob") {
this.Data.writeblob(BinaryArray);
}
//数组
else if (typeof BinaryArray == "array") {
foreach(byte in BinaryArray) {
Put_Byte(byte);
}
}
}
//获取字节
function Get_Byte() {
return this.Data.readn('c');
}
//获取短整型
function Get_Short() {
return this.Data.readn('s');
}
//获取整型
function Get_Int() {
return this.Data.readn('i');
}
//获取浮点型
function Get_Float() {
return this.Data.readn('f');
}
//获取字符串
function Get_String(len) {
return stream_myreadstring.pcall(this.Data, len);
}
//获取字节数组
function Get_Binary(len) {
return this.Data.readblob(len);
}
}