单向请求一般用于广播也不列入统计

This commit is contained in:
nnhy 2016-06-04 13:48:58 +00:00
parent bdc237f7e9
commit c06e343762
5 changed files with 52 additions and 54 deletions

View File

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

View File

@ -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();

View File

@ -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);
};
// 令牌会话

View File

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

View File

@ -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; // 通信密码