跳到主要内容

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;
}