offical_server
简介
为官方认证服务器(offical server)提供网络服务的主机端;需要通过pkg.offical_client接入
offical_server.start启动服务;需要对连接进行身份验证;由"auth"参数指定验证函数
server_msgd.set_handler设置客户端指令的处理函数;
组件接口
offical_server.gs
函数原型 | 函数作用 |
---|---|
void start(map args) | 开启网络服务 |
server_msgd.gs
函数原型 | 函数作用 |
---|---|
void set_handler(mixed cmd, function fn) | 设置客户端指令的处理函数 |
样例
#pragma parallel
import gs.lang.*;
import gs.util.*;
import pkg.offical_server;
import pkg.offical_server.server_msgd;
import pkg.offical_server.server_util;
void create()
{
load_static(offical_server, domain.create("offical_server"));
load_static(server_util, offical_server.get_domain());
server_msgd.set_handler("cmd_request_challenge", (: cmd_request_challenge :));
server_msgd.set_handler("cmd_commit_challenge", (: cmd_commit_challenge :));
server_msgd.set_handler("cmd_occur_exception", (: cmd_occur_exception :));
map args = {
"port" : 9999,
"port_recv_size" : 1024 * 32,
"alive_seconds" : 15,
"auth" : (: auth_callback :),
};
offical_server.start(args);
}
void destruct()
{
offical_server.stop();
}
bool auth_callback(object conn, map m)
{
// 自行验证连接身份
return true;
}
// 异常发生后的处理函数
void cmd_occur_exception(object conn, mixed args)
{
// 记录日志等
}
// 请求挑战开始
void cmd_request_challenge(object conn, string cookie, ...)
{
// 发送挑战内容
string content = "aaaaa";
conn.send("msg_request_challenge", cookie, content);
}
// 验证挑战答案
void cmd_commit_challenge(object conn, string cookie, ...)
{
bool success = false;
defer {
conn.send("msg_commit_challenge", cookie, success);
}
// 自行验证挑战答案
//
success = false;
}