单向请求一般用于广播也不列入统计
This commit is contained in:
parent
bdc237f7e9
commit
c06e343762
|
@ -176,7 +176,8 @@ TokenClient* AP0801::CreateClient()
|
|||
|
||||
// 创建连接服务器的控制器
|
||||
auto ctrl = new TokenController();
|
||||
ctrl->Port = dynamic_cast<ITransport*>(socket);
|
||||
//ctrl->Port = dynamic_cast<ITransport*>(socket);
|
||||
ctrl->Socket = socket;
|
||||
|
||||
// 创建客户端
|
||||
auto client = new TokenClient();
|
||||
|
@ -195,7 +196,8 @@ TokenClient* AP0801::CreateClient()
|
|||
|
||||
// 建立内网控制器
|
||||
auto token2 = new TokenController();
|
||||
token2->Port = dynamic_cast<ITransport*>(socket);
|
||||
//token2->Port = dynamic_cast<ITransport*>(socket);
|
||||
token2->Socket = socket;
|
||||
token2->ShowRemote = true;
|
||||
client->Local = token2;
|
||||
}
|
||||
|
|
|
@ -35,7 +35,6 @@ TokenClient::TokenClient()
|
|||
Param = nullptr;
|
||||
|
||||
Local = nullptr;
|
||||
LocalAP = nullptr;
|
||||
}
|
||||
|
||||
void TokenClient::Open()
|
||||
|
@ -79,7 +78,7 @@ void TokenClient::Close()
|
|||
if(Local && Local != Control) Local->Close();
|
||||
}
|
||||
|
||||
bool TokenClient::Send(TokenMessage& msg, Controller* ctrl)
|
||||
bool TokenClient::Send(TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
// 未登录之前,只能 握手、登录、注册
|
||||
if(Token == 0)
|
||||
|
@ -93,11 +92,10 @@ bool TokenClient::Send(TokenMessage& msg, Controller* ctrl)
|
|||
return ctrl->Send(msg);
|
||||
}
|
||||
|
||||
bool TokenClient::Reply(TokenMessage& msg, Controller* ctrl)
|
||||
bool TokenClient::Reply(TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
auto tctrl = dynamic_cast<TokenController*>(ctrl);
|
||||
// 未登录之前,只能 握手、登录、注册
|
||||
if(tctrl->Token == 0)
|
||||
if(ctrl->Token == 0)
|
||||
{
|
||||
if(msg.Code != 0x01 && msg.Code != 0x02 && msg.Code != 0x07) return false;
|
||||
}
|
||||
|
@ -108,7 +106,7 @@ bool TokenClient::Reply(TokenMessage& msg, Controller* ctrl)
|
|||
return ctrl->Reply(msg);
|
||||
}
|
||||
|
||||
bool TokenClient::OnReceive(TokenMessage& msg, Controller* ctrl)
|
||||
bool TokenClient::OnReceive(TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
TS("TokenClient::OnReceive");
|
||||
|
||||
|
@ -162,7 +160,7 @@ bool TokenClient::OnReceive(TokenMessage& msg, Controller* ctrl)
|
|||
|
||||
bool OnTokenClientReceived(void* sender, Message& msg, void* param)
|
||||
{
|
||||
auto ctrl = (Controller*)sender;
|
||||
auto ctrl = (TokenController*)sender;
|
||||
assert_ptr(ctrl);
|
||||
auto client = (TokenClient*)param;
|
||||
assert_ptr(client);
|
||||
|
@ -226,15 +224,14 @@ void TokenClient::SayHello(bool broadcast)
|
|||
{
|
||||
msg.OneWay = true;
|
||||
|
||||
auto sock = dynamic_cast<ISocket*>(((TokenController*)ctrl)->Port);
|
||||
msg.State = &sock->Remote;
|
||||
msg.State = &ctrl->Socket->Remote;
|
||||
}
|
||||
|
||||
Send(msg, ctrl);
|
||||
}
|
||||
|
||||
// 握手响应
|
||||
bool TokenClient::OnHello(TokenMessage& msg, Controller* ctrl)
|
||||
bool TokenClient::OnHello(TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
if(!msg.Reply) return false;
|
||||
|
||||
|
@ -268,8 +265,7 @@ bool TokenClient::OnHello(TokenMessage& msg, Controller* ctrl)
|
|||
// 通讯密码
|
||||
if(ext.Key.Length() > 0)
|
||||
{
|
||||
auto ctrl2 = dynamic_cast<TokenController*>(ctrl);
|
||||
if(ctrl2) ctrl2->Key.Copy(0, ext.Key, 0, ext.Key.Length());
|
||||
if(ctrl) ctrl->Key.Copy(0, ext.Key, 0, ext.Key.Length());
|
||||
|
||||
debug_printf("握手得到通信密码:");
|
||||
ext.Key.Show(true);
|
||||
|
@ -286,12 +282,10 @@ bool TokenClient::OnHello(TokenMessage& msg, Controller* ctrl)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool TokenClient::OnLocalHello(TokenMessage& msg, Controller* ctrl)
|
||||
bool TokenClient::OnLocalHello(TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
if(msg.Reply) return false;
|
||||
|
||||
auto ctrl2 = dynamic_cast<TokenController*>(ctrl);
|
||||
|
||||
// 解析数据
|
||||
HelloMessage ext;
|
||||
ext.Reply = msg.Reply;
|
||||
|
@ -308,7 +302,7 @@ bool TokenClient::OnLocalHello(TokenMessage& msg, Controller* ctrl)
|
|||
// 使用系统ID作为Name
|
||||
ext2.Name = Cfg->User();
|
||||
// 使用系统ID作为Key
|
||||
ext2.Key = ctrl2->Key;
|
||||
ext2.Key = ctrl->Key;
|
||||
//ext2.Key = Sys.ID;
|
||||
|
||||
ext2.Cipher = "RC4";
|
||||
|
@ -399,7 +393,7 @@ void TokenClient::Register()
|
|||
Send(msg);
|
||||
}
|
||||
|
||||
void TokenClient::OnRegister(TokenMessage& msg, Controller* ctrl)
|
||||
void TokenClient::OnRegister(TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
if(!msg.Reply) return;
|
||||
|
||||
|
@ -459,7 +453,7 @@ void TokenClient::Login()
|
|||
Send(msg);
|
||||
}
|
||||
|
||||
bool TokenClient::OnLogin(TokenMessage& msg, Controller* ctrl)
|
||||
bool TokenClient::OnLogin(TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
if(!msg.Reply) return false;
|
||||
|
||||
|
@ -490,13 +484,13 @@ bool TokenClient::OnLogin(TokenMessage& msg, Controller* ctrl)
|
|||
LoginMessage logMsg;
|
||||
logMsg.ReadMessage(msg);
|
||||
Token = logMsg.Token;
|
||||
auto ctrl2 = dynamic_cast<TokenController*>(ctrl);
|
||||
ctrl2->Token = Token;
|
||||
|
||||
if(ctrl) ctrl->Token = Token;
|
||||
logMsg.Show(true);
|
||||
debug_printf("令牌:0x%08X ", Token);
|
||||
if (logMsg.Key.Length())
|
||||
{
|
||||
if (ctrl2) ctrl2->Key = logMsg.Key;
|
||||
if(ctrl) ctrl->Key = logMsg.Key;
|
||||
|
||||
debug_printf("通信密码:");
|
||||
logMsg.Key.Show();
|
||||
|
@ -508,18 +502,17 @@ bool TokenClient::OnLogin(TokenMessage& msg, Controller* ctrl)
|
|||
return true;
|
||||
}
|
||||
|
||||
bool TokenClient::OnLocalLogin(TokenMessage& msg, Controller* ctrl)
|
||||
bool TokenClient::OnLocalLogin(TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
if(msg.Reply) return false;
|
||||
|
||||
TS("TokenClient::OnLocalLogin");
|
||||
auto ctrl2 = dynamic_cast<TokenController*>(ctrl);
|
||||
|
||||
auto rs = msg.CreateReply();
|
||||
|
||||
LoginMessage login;
|
||||
// 这里需要随机密匙
|
||||
login.Key = ctrl2->Key;
|
||||
login.Key = ctrl->Key;
|
||||
// 随机令牌
|
||||
login.Token = Sys.Ms();
|
||||
login.Reply = true;
|
||||
|
@ -529,7 +522,7 @@ bool TokenClient::OnLocalLogin(TokenMessage& msg, Controller* ctrl)
|
|||
|
||||
|
||||
//ctrl2->Key.Copy(0, login.User, 0, -1);
|
||||
ctrl2->Token = login.Token;
|
||||
ctrl->Token = login.Token;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
@ -544,8 +537,7 @@ void TokenClient::Ping()
|
|||
// 30秒无法联系,服务端可能已经掉线,重启Hello任务
|
||||
debug_printf("30秒无法联系,服务端可能已经掉线,重新开始握手\r\n");
|
||||
|
||||
auto ctrl2 = dynamic_cast<TokenController*>(Control);
|
||||
if (ctrl2) ctrl2->Key.SetLength(0);
|
||||
Control->Key.SetLength(0);
|
||||
|
||||
Status = 0;
|
||||
|
||||
|
@ -560,7 +552,7 @@ void TokenClient::Ping()
|
|||
Send(msg);
|
||||
}
|
||||
|
||||
bool TokenClient::OnPing(TokenMessage& msg, Controller* ctrl)
|
||||
bool TokenClient::OnPing(TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
TS("TokenClient::OnPing");
|
||||
|
||||
|
@ -616,7 +608,7 @@ void TokenClient::Write(int start, const Buffer& bs)
|
|||
请求:起始 + 大小
|
||||
响应:起始 + 数据
|
||||
*/
|
||||
void TokenClient::OnRead(const TokenMessage& msg, Controller* ctrl)
|
||||
void TokenClient::OnRead(const TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
if(msg.Reply) return;
|
||||
if(msg.Length < 2) return;
|
||||
|
@ -657,7 +649,7 @@ void TokenClient::OnRead(const TokenMessage& msg, Controller* ctrl)
|
|||
响应:1起始 + 1大小 + N数据
|
||||
错误:错误码2 + 1起始 + 1大小
|
||||
*/
|
||||
void TokenClient::OnWrite(const TokenMessage& msg, Controller* ctrl)
|
||||
void TokenClient::OnWrite(const TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
if(msg.Reply) return;
|
||||
if(msg.Length < 2) return;
|
||||
|
@ -715,7 +707,7 @@ void TokenClient::Invoke(const String& action, const Buffer& bs)
|
|||
Control->Send(msg);
|
||||
}
|
||||
|
||||
void TokenClient::OnInvoke(const TokenMessage& msg, Controller* ctrl)
|
||||
void TokenClient::OnInvoke(const TokenMessage& msg, TokenController* ctrl)
|
||||
{
|
||||
auto rs = msg.CreateReply();
|
||||
|
||||
|
|
|
@ -28,7 +28,7 @@ public:
|
|||
UInt64 LastActive; // 最后活跃时间ms
|
||||
int Delay; // 心跳延迟。一条心跳指令从发出到收到所花费的时间
|
||||
|
||||
Controller* Control;
|
||||
TokenController* Control;
|
||||
TokenConfig* Cfg;
|
||||
DataStore Store; // 数据存储区
|
||||
Dictionary Routes; // 路由集合
|
||||
|
@ -39,17 +39,17 @@ public:
|
|||
void Close();
|
||||
|
||||
// 发送消息
|
||||
bool Send(TokenMessage& msg, Controller* ctrl = nullptr);
|
||||
bool Reply(TokenMessage& msg, Controller* ctrl = nullptr);
|
||||
bool OnReceive(TokenMessage& msg, Controller* ctrl);
|
||||
bool Send(TokenMessage& msg, TokenController* ctrl = nullptr);
|
||||
bool Reply(TokenMessage& msg, TokenController* ctrl = nullptr);
|
||||
bool OnReceive(TokenMessage& msg, TokenController* ctrl);
|
||||
|
||||
// 收到功能消息时触发
|
||||
MessageHandler Received;
|
||||
void* Param;
|
||||
|
||||
// 本地网络支持
|
||||
Controller* Local; // 本地网络控制器
|
||||
Controller* LocalAP;// 无线AP控制器
|
||||
TokenController* Local; // 本地网络控制器
|
||||
int LocalPort; // 本地广播端口
|
||||
List Sessions; // 会话集合
|
||||
|
||||
// 常用系统级消息
|
||||
|
@ -77,24 +77,24 @@ public:
|
|||
void Register(const String& action, InvokeHandler handler);
|
||||
|
||||
private:
|
||||
bool OnHello(TokenMessage& msg, Controller* ctrl);
|
||||
bool OnLocalHello(TokenMessage& msg, Controller* ctrl);
|
||||
bool OnHello(TokenMessage& msg, TokenController* ctrl);
|
||||
bool OnLocalHello(TokenMessage& msg, TokenController* ctrl);
|
||||
|
||||
// 跳转
|
||||
bool OnRedirect(HelloMessage& msg);
|
||||
|
||||
void OnRegister(TokenMessage& msg, Controller* ctrl);
|
||||
void OnRegister(TokenMessage& msg, TokenController* ctrl);
|
||||
|
||||
bool OnLogin(TokenMessage& msg, Controller* ctrl);
|
||||
bool OnLocalLogin(TokenMessage& msg,Controller* ctrl);
|
||||
bool OnLogin(TokenMessage& msg, TokenController* ctrl);
|
||||
bool OnLocalLogin(TokenMessage& msg,TokenController* ctrl);
|
||||
|
||||
bool OnPing(TokenMessage& msg, Controller* ctrl);
|
||||
bool OnPing(TokenMessage& msg, TokenController* ctrl);
|
||||
bool ChangeIPEndPoint(const String& domain, ushort port);
|
||||
|
||||
void OnRead(const TokenMessage& msg, Controller* ctrl);
|
||||
void OnWrite(const TokenMessage& msg, Controller* ctrl);
|
||||
void OnRead(const TokenMessage& msg, TokenController* ctrl);
|
||||
void OnWrite(const TokenMessage& msg, TokenController* ctrl);
|
||||
|
||||
void OnInvoke(const TokenMessage& msg, Controller* ctrl);
|
||||
void OnInvoke(const TokenMessage& msg, TokenController* ctrl);
|
||||
};
|
||||
|
||||
// 令牌会话
|
||||
|
|
|
@ -61,7 +61,8 @@ TokenController::TokenController() : Controller(), Key(0)
|
|||
|
||||
MinSize = TokenMessage::MinSize;
|
||||
|
||||
Server = nullptr;
|
||||
Socket = nullptr;
|
||||
Server = nullptr;
|
||||
|
||||
ShowRemote = false;
|
||||
|
||||
|
@ -82,6 +83,7 @@ void TokenController::Open()
|
|||
{
|
||||
if (Opened) return;
|
||||
|
||||
if(!Port) Port = dynamic_cast<ITransport*>(Socket);
|
||||
assert(Port, "还没有传输口呢");
|
||||
|
||||
debug_printf("TokenNet::Inited 使用传输接口 ");
|
||||
|
@ -91,8 +93,7 @@ void TokenController::Open()
|
|||
//Port->Show(true);
|
||||
#endif
|
||||
|
||||
auto sock = dynamic_cast<ISocket*>(Port);
|
||||
if (sock) Server = &sock->Remote;
|
||||
Server = &Socket->Remote;
|
||||
|
||||
#if DEBUG
|
||||
if (!Stat)
|
||||
|
@ -282,7 +283,7 @@ bool TokenController::Send(Message& msg)
|
|||
|
||||
#if DEBUG
|
||||
// 加入统计
|
||||
if (!msg.Reply) StartSendStat(msg.Code);
|
||||
if (!msg.Reply && !msg.OneWay) StartSendStat(msg.Code);
|
||||
#endif
|
||||
|
||||
// 如果没有传输口处于打开状态,则发送失败
|
||||
|
@ -356,7 +357,7 @@ bool TokenController::StartSendStat(byte code)
|
|||
|
||||
auto st = Stat;
|
||||
|
||||
// 仅统计请求信息,不统计响应信息
|
||||
/*// 仅统计请求信息,不统计响应信息
|
||||
if (code & 0x80)
|
||||
{
|
||||
st->SendReply++;
|
||||
|
@ -364,7 +365,7 @@ bool TokenController::StartSendStat(byte code)
|
|||
}
|
||||
|
||||
// 单向请求一般用于广播也不列入统计
|
||||
if(code & 0x40) return true;
|
||||
if(code & 0x40) return true;*/
|
||||
|
||||
st->SendRequest++;
|
||||
byte tc = code & 0x0F;
|
||||
|
|
|
@ -3,6 +3,7 @@
|
|||
|
||||
#include "Sys.h"
|
||||
#include "Net\ITransport.h"
|
||||
#include "Net\Socket.h"
|
||||
|
||||
#include "Message\Controller.h"
|
||||
|
||||
|
@ -23,6 +24,8 @@ protected:
|
|||
//virtual bool SendInternal(const Buffer& bs, const void* state);
|
||||
|
||||
public:
|
||||
ISocket* Socket;
|
||||
|
||||
uint Token; // 令牌
|
||||
ByteArray Key; // 通信密码
|
||||
|
||||
|
|
Loading…
Reference in New Issue