Added and fixed.
This commit is contained in:
parent
38ed7cb2e2
commit
f36897d330
@ -38,6 +38,7 @@
|
|||||||
|
|
||||||
/* Begin PBXFileReference section */
|
/* Begin PBXFileReference section */
|
||||||
9221D9EB21EA5142007310A7 /* Net */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Net; sourceTree = BUILT_PRODUCTS_DIR; };
|
9221D9EB21EA5142007310A7 /* Net */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = Net; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||||
|
926E09632209D9D300AD5D5B /* instruct.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = instruct.h; path = include/instruct.h; sourceTree = "<group>"; };
|
||||||
9277A14621FD7246009C5F11 /* cmap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cmap.h; path = include/cmap.h; sourceTree = "<group>"; };
|
9277A14621FD7246009C5F11 /* cmap.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = cmap.h; path = include/cmap.h; sourceTree = "<group>"; };
|
||||||
9277A14721FD7246009C5F11 /* server.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = server.h; path = include/server.h; sourceTree = "<group>"; };
|
9277A14721FD7246009C5F11 /* server.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = server.h; path = include/server.h; sourceTree = "<group>"; };
|
||||||
9277A14821FD7246009C5F11 /* net.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = net.h; path = include/net.h; sourceTree = "<group>"; };
|
9277A14821FD7246009C5F11 /* net.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = net.h; path = include/net.h; sourceTree = "<group>"; };
|
||||||
@ -129,6 +130,7 @@
|
|||||||
9277A14821FD7246009C5F11 /* net.h */,
|
9277A14821FD7246009C5F11 /* net.h */,
|
||||||
9277A14721FD7246009C5F11 /* server.h */,
|
9277A14721FD7246009C5F11 /* server.h */,
|
||||||
9277A15021FD7246009C5F11 /* type.h */,
|
9277A15021FD7246009C5F11 /* type.h */,
|
||||||
|
926E09632209D9D300AD5D5B /* instruct.h */,
|
||||||
);
|
);
|
||||||
name = include;
|
name = include;
|
||||||
sourceTree = "<group>";
|
sourceTree = "<group>";
|
||||||
|
23
include/instruct.h
Normal file
23
include/instruct.h
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
//
|
||||||
|
// instruct.h
|
||||||
|
// Net
|
||||||
|
//
|
||||||
|
// Created by 胡一兵 on 2019/2/5.
|
||||||
|
// Copyright © 2019年 Bakantu. All rights reserved.
|
||||||
|
//
|
||||||
|
|
||||||
|
#ifndef instruct_h
|
||||||
|
#define instruct_h
|
||||||
|
|
||||||
|
#include "type.h"
|
||||||
|
#include "memory.h"
|
||||||
|
#include "clock.h"
|
||||||
|
#include "net.h"
|
||||||
|
#include "cproj.h"
|
||||||
|
#include "cpart.h"
|
||||||
|
#include "cmap.h"
|
||||||
|
#include "cthread.h"
|
||||||
|
#include "sha1.h"
|
||||||
|
#include "rsa.h"
|
||||||
|
|
||||||
|
#endif /* instruct_h */
|
@ -32,6 +32,7 @@ public:
|
|||||||
void SetIP(string ip_addr);
|
void SetIP(string ip_addr);
|
||||||
// IP地址管理结构的大小变量
|
// IP地址管理结构的大小变量
|
||||||
void SetSize(void);
|
void SetSize(void);
|
||||||
|
void SetSockAddr(struct sockaddr_in);
|
||||||
// 获得指向IP地址管理结构的指针
|
// 获得指向IP地址管理结构的指针
|
||||||
struct sockaddr_in *Obj(void);
|
struct sockaddr_in *Obj(void);
|
||||||
// 获得指向IP地址管理结构的指针
|
// 获得指向IP地址管理结构的指针
|
||||||
@ -99,16 +100,18 @@ public :
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
~SocketClient(){
|
~SocketClient(){
|
||||||
close(client_sfd);
|
//close(client_sfd);
|
||||||
}
|
}
|
||||||
// 接受储存简单字符串
|
// 接受储存简单字符串
|
||||||
virtual void Send(string buff) = 0;
|
virtual void Send(string buff) = 0;
|
||||||
// 接受储存二进制串
|
// 接受储存二进制串
|
||||||
virtual void SendRAW(char *buff, unsigned long size) = 0;
|
virtual void SendRAW(char *buff, unsigned long size) = 0;
|
||||||
// 重新设置发送目的地的端口
|
// 重新设置发送目的地的端口
|
||||||
void SetSendPort(int port);
|
void SetSendPort(int port);
|
||||||
// 重新设置发送目的地的IP地址
|
// 重新设置发送目的地的IP地址
|
||||||
void SetSendIP(string ip);
|
void SetSendIP(string ip);
|
||||||
|
// 共享设置发送地址相关信息管理结构
|
||||||
|
void SetSendSockAddr(struct sockaddr_in);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -33,15 +33,24 @@ struct request {
|
|||||||
rng::rng64 r_id = 0;
|
rng::rng64 r_id = 0;
|
||||||
string type;
|
string type;
|
||||||
string data;
|
string data;
|
||||||
|
uint32_t recv_port;
|
||||||
Addr t_addr;
|
Addr t_addr;
|
||||||
request();
|
request();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
//请求监听管理结构
|
||||||
|
struct request_listener{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
struct respond {
|
struct respond {
|
||||||
rng::rng64 r_id;
|
rng::rng64 r_id;
|
||||||
string type;
|
string type;
|
||||||
string data;
|
Byte *buff = nullptr;
|
||||||
|
uint32_t buff_size;
|
||||||
Addr t_addr;
|
Addr t_addr;
|
||||||
|
void SetBuff(Byte *buff, uint32_t size);
|
||||||
|
~respond();
|
||||||
};
|
};
|
||||||
|
|
||||||
//通用数据包类
|
//通用数据包类
|
||||||
@ -93,6 +102,8 @@ protected:
|
|||||||
list<packet *> packets_in;
|
list<packet *> packets_in;
|
||||||
// 缓存带标签的二进制串管理结构
|
// 缓存带标签的二进制串管理结构
|
||||||
list<raw_data *> rawdata_in;
|
list<raw_data *> rawdata_in;
|
||||||
|
// 输出的数据包列表
|
||||||
|
list<packet *> packets_out;
|
||||||
struct server_info tsi;
|
struct server_info tsi;
|
||||||
sqlite3 *psql;
|
sqlite3 *psql;
|
||||||
public:
|
public:
|
||||||
@ -129,6 +140,7 @@ public:
|
|||||||
friend void *serverDeamon(void *psvr);
|
friend void *serverDeamon(void *psvr);
|
||||||
// 处理RawData
|
// 处理RawData
|
||||||
void ProcessRawData(void);
|
void ProcessRawData(void);
|
||||||
|
void ProcessSendPackets(void);
|
||||||
|
|
||||||
|
|
||||||
};
|
};
|
||||||
@ -156,17 +168,30 @@ public:
|
|||||||
void ProcessRequset(void);
|
void ProcessRequset(void);
|
||||||
static void Packet2Request(packet &pkt, request &req);
|
static void Packet2Request(packet &pkt, request &req);
|
||||||
static void Request2Packet(packet &pkt, request &req);
|
static void Request2Packet(packet &pkt, request &req);
|
||||||
|
static void Respond2Packet(packet &pkt, respond &res);
|
||||||
|
static void Packet2Respond(packet &pkt, respond &res);
|
||||||
};
|
};
|
||||||
|
|
||||||
//设置服务器守护程序的时钟
|
class Client{
|
||||||
|
list<request *> req_lst;
|
||||||
|
uint32_t listen_port;
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
//设置服务器守护线程的时钟
|
||||||
void setServerClock(Server *psvr, int clicks);
|
void setServerClock(Server *psvr, int clicks);
|
||||||
//设置广场服务器守护程序的时钟
|
//设置广场服务器守护线程的时钟
|
||||||
void setServerClockForSquare(SQEServer *psvr, int clicks);
|
void setServerClockForSquare(SQEServer *psvr, int clicks);
|
||||||
//服务器接收数据包守护线程
|
//服务器接收数据包守护线程
|
||||||
void *serverDeamon(void *psvr);
|
void *serverDeamon(void *psvr);
|
||||||
//服务器处理原始数据守护进程
|
//服务器处理原始数据守护线程
|
||||||
void *dataProcessorDeamon(void *pvcti);
|
void *dataProcessorDeamon(void *pvcti);
|
||||||
//广场服务器处理数据包守护进程
|
//广场服务器处理数据包守护线程
|
||||||
void *packetProcessorDeamonForSquare(void *pvcti);
|
void *packetProcessorDeamonForSquare(void *pvcti);
|
||||||
|
//广场服务器处理请求守护线程
|
||||||
|
void *requestProcessorDeamonForSquare(void *pvcti);
|
||||||
|
//服务器发送数据包守护线程
|
||||||
|
void *sendPacketProcessorDeamonForSquare(void *pvcti);
|
||||||
|
|
||||||
#endif /* server_h */
|
#endif /* server_h */
|
||||||
|
@ -15,6 +15,7 @@ Addr::Addr(string ip_addr, int port, bool ipv4){
|
|||||||
else
|
else
|
||||||
address.sin_family = AF_INET6;
|
address.sin_family = AF_INET6;
|
||||||
address.sin_port = htons(port);
|
address.sin_port = htons(port);
|
||||||
|
|
||||||
address.sin_addr.s_addr = inet_addr(ip_addr.data());
|
address.sin_addr.s_addr = inet_addr(ip_addr.data());
|
||||||
addr_size = sizeof(address);
|
addr_size = sizeof(address);
|
||||||
}
|
}
|
||||||
@ -86,3 +87,7 @@ bool Addr::checkValidIP(string ipaddr){
|
|||||||
else return false;
|
else return false;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Addr::SetSockAddr(struct sockaddr_in tsi){
|
||||||
|
address = tsi;
|
||||||
|
}
|
||||||
|
@ -6,21 +6,19 @@
|
|||||||
// Copyright © 2019年 Bakantu. All rights reserved.
|
// Copyright © 2019年 Bakantu. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "type.h"
|
#include "instruct.h"
|
||||||
#include "sql.h"
|
|
||||||
#include "net.h"
|
|
||||||
#include "server.h"
|
|
||||||
#include "rng.h"
|
|
||||||
|
|
||||||
int main(int argc, char *argv[])
|
int main(int argc, char *argv[])
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
Server BServer(1081,"127.0.0.1",9048);
|
Server BServer(9050,"127.0.0.1",9048);
|
||||||
|
|
||||||
while (1) {
|
while (1) {
|
||||||
request nreq;
|
request nreq;
|
||||||
nreq.type = "client-square request";
|
nreq.type = "client-square request";
|
||||||
nreq.data = "request for public key";
|
nreq.data = "request for public key";
|
||||||
|
nreq.port = 9050;
|
||||||
packet *pnpkt = new packet();
|
packet *pnpkt = new packet();
|
||||||
SQEServer::Request2Packet(*pnpkt, nreq);
|
SQEServer::Request2Packet(*pnpkt, nreq);
|
||||||
raw_data *pnrwd = new raw_data();
|
raw_data *pnrwd = new raw_data();
|
||||||
@ -31,6 +29,14 @@ int main(int argc, char *argv[])
|
|||||||
delete pnrwd;
|
delete pnrwd;
|
||||||
Server::freePcaketServer(*pnpkt);
|
Server::freePcaketServer(*pnpkt);
|
||||||
delete pnpkt;
|
delete pnpkt;
|
||||||
|
Addr taddr;
|
||||||
|
char *buff = nullptr;
|
||||||
|
if(BServer.socket.RecvRAW(&buff, taddr) > 0){
|
||||||
|
printf("Receive: %s\n",buff);
|
||||||
|
free(buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
27
src/main.cpp
27
src/main.cpp
@ -6,22 +6,14 @@
|
|||||||
// Copyright © 2019年 Bakantu. All rights reserved.
|
// Copyright © 2019年 Bakantu. All rights reserved.
|
||||||
//
|
//
|
||||||
|
|
||||||
#include "type.h"
|
#include "instruct.h"
|
||||||
#include "memory.h"
|
|
||||||
#include "clock.h"
|
|
||||||
#include "net.h"
|
|
||||||
#include "cproj.h"
|
|
||||||
#include "cpart.h"
|
|
||||||
#include "cmap.h"
|
|
||||||
#include "cthread.h"
|
|
||||||
#include "sha1.h"
|
|
||||||
#include "rsa.h"
|
|
||||||
|
|
||||||
extern string PRIME_SOURCE_FILE;
|
extern string PRIME_SOURCE_FILE;
|
||||||
|
|
||||||
int update(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets);
|
int update(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets);
|
||||||
int construct(string instruct,vector<string> &config, vector<string> &lconfig, vector<string> &target);
|
int construct(string instruct,vector<string> &config, vector<string> &lconfig, vector<string> &target);
|
||||||
int server(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets);
|
int server(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets);
|
||||||
|
int client(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets);
|
||||||
int init(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets);
|
int init(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets);
|
||||||
int set(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets);
|
int set(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets);
|
||||||
|
|
||||||
@ -30,6 +22,7 @@ struct instructions{
|
|||||||
int (*construct)(string, vector<string> &, vector<string> &, vector<string> &) = NULL;
|
int (*construct)(string, vector<string> &, vector<string> &, vector<string> &) = NULL;
|
||||||
int (*update)(string, vector<string> &, vector<string> &, vector<string> &) = NULL;
|
int (*update)(string, vector<string> &, vector<string> &, vector<string> &) = NULL;
|
||||||
int (*server)(string, vector<string> &, vector<string> &, vector<string> &) = NULL;
|
int (*server)(string, vector<string> &, vector<string> &, vector<string> &) = NULL;
|
||||||
|
int (*client)(string, vector<string> &, vector<string> &, vector<string> &) = NULL;
|
||||||
int (*set)(string, vector<string> &, vector<string> &, vector<string> &) = NULL;
|
int (*set)(string, vector<string> &, vector<string> &, vector<string> &) = NULL;
|
||||||
int (*init)(string, vector<string> &, vector<string> &, vector<string> &) = NULL;
|
int (*init)(string, vector<string> &, vector<string> &, vector<string> &) = NULL;
|
||||||
};
|
};
|
||||||
@ -62,6 +55,7 @@ int main(int argc, const char *argv[]){
|
|||||||
istns.server = server;
|
istns.server = server;
|
||||||
istns.init = init;
|
istns.init = init;
|
||||||
istns.set = set;
|
istns.set = set;
|
||||||
|
istns.client = client;
|
||||||
|
|
||||||
// 解析命令
|
// 解析命令
|
||||||
int if_instruct = 1;
|
int if_instruct = 1;
|
||||||
@ -104,6 +98,10 @@ int main(int argc, const char *argv[]){
|
|||||||
if(istns.update != nullptr) istns.set(instruct,config,long_config,target);
|
if(istns.update != nullptr) istns.set(instruct,config,long_config,target);
|
||||||
else error::printError("Function not found.");
|
else error::printError("Function not found.");
|
||||||
}
|
}
|
||||||
|
else if (instruct == "client"){
|
||||||
|
if(istns.update != nullptr) istns.client(instruct,config,long_config,target);
|
||||||
|
else error::printError("Function not found.");
|
||||||
|
}
|
||||||
else{
|
else{
|
||||||
printf("\033[33mInstruction \"%s\" doesn't make sense.\n\033[0m",instruct.data());
|
printf("\033[33mInstruction \"%s\" doesn't make sense.\n\033[0m",instruct.data());
|
||||||
}
|
}
|
||||||
@ -222,6 +220,10 @@ int init(string instruct, vector<string> &configs, vector<string> &lconfigs, vec
|
|||||||
}
|
}
|
||||||
|
|
||||||
int set(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets){
|
int set(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets){
|
||||||
|
if(targets.size() < 2){
|
||||||
|
error::printError("Args error.");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
sqlite3 *psql;
|
sqlite3 *psql;
|
||||||
sqlite3_stmt *psqlsmt;
|
sqlite3_stmt *psqlsmt;
|
||||||
const char *pzTail;
|
const char *pzTail;
|
||||||
@ -384,6 +386,11 @@ int construct(string instruct, vector<string> &configs, vector<string> &lconfigs
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int client(string instruct, vector<string> &configs, vector<string> &lconfigs, vector<string> &targets){
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
void wiki_cpart(void){
|
void wiki_cpart(void){
|
||||||
CPart ncp("./PCS","./Libs","a.cpp","A");
|
CPart ncp("./PCS","./Libs","a.cpp","A");
|
||||||
void *a = main_pool.bv_malloc<double>(2.0);
|
void *a = main_pool.bv_malloc<double>(2.0);
|
||||||
|
119
src/server.cpp
119
src/server.cpp
@ -10,12 +10,13 @@
|
|||||||
#include "server.h"
|
#include "server.h"
|
||||||
|
|
||||||
extern list<clock_register> clocks_list;
|
extern list<clock_register> clocks_list;
|
||||||
pthread_mutex_t mutex,mutex_rp,mutex_pktreq;
|
pthread_mutex_t mutex,mutex_rp,mutex_pktreq,mutex_sndpkt;
|
||||||
|
|
||||||
void setServerClock(Server *psvr, int clicks){
|
void setServerClock(Server *psvr, int clicks){
|
||||||
pthread_mutex_init(&mutex, NULL);
|
pthread_mutex_init(&mutex, NULL);
|
||||||
pthread_mutex_init(&mutex_rp, NULL);
|
pthread_mutex_init(&mutex_rp, NULL);
|
||||||
// 注册数据接收守护时钟
|
pthread_mutex_init(&mutex_sndpkt, NULL);
|
||||||
|
// 注册数据接收时钟
|
||||||
clock_register *pncr = new clock_register();
|
clock_register *pncr = new clock_register();
|
||||||
pncr->if_thread = true;
|
pncr->if_thread = true;
|
||||||
pncr->if_reset = true;
|
pncr->if_reset = true;
|
||||||
@ -25,7 +26,7 @@ void setServerClock(Server *psvr, int clicks){
|
|||||||
pncr->arg = (void *)psvr;
|
pncr->arg = (void *)psvr;
|
||||||
newClock(pncr);
|
newClock(pncr);
|
||||||
|
|
||||||
// 注册数据处理守护时钟
|
// 注册数据处理时钟
|
||||||
pncr = new clock_register();
|
pncr = new clock_register();
|
||||||
pncr->if_thread = true;
|
pncr->if_thread = true;
|
||||||
pncr->if_reset = true;
|
pncr->if_reset = true;
|
||||||
@ -34,6 +35,16 @@ void setServerClock(Server *psvr, int clicks){
|
|||||||
pncr->func = dataProcessorDeamon;
|
pncr->func = dataProcessorDeamon;
|
||||||
pncr->arg = (void *)psvr;
|
pncr->arg = (void *)psvr;
|
||||||
newClock(pncr);
|
newClock(pncr);
|
||||||
|
|
||||||
|
// 注册标准数据包发送时钟
|
||||||
|
pncr = new clock_register();
|
||||||
|
pncr->if_thread = true;
|
||||||
|
pncr->if_reset = true;
|
||||||
|
pncr->click = clicks*2;
|
||||||
|
pncr->rawclick = clicks/1.5;
|
||||||
|
pncr->func = sendPacketProcessorDeamonForSquare;
|
||||||
|
pncr->arg = (void *)psvr;
|
||||||
|
newClock(pncr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setServerClockForSquare(SQEServer *psvr, int clicks){
|
void setServerClockForSquare(SQEServer *psvr, int clicks){
|
||||||
@ -48,6 +59,16 @@ void setServerClockForSquare(SQEServer *psvr, int clicks){
|
|||||||
pncr->func = packetProcessorDeamonForSquare;
|
pncr->func = packetProcessorDeamonForSquare;
|
||||||
pncr->arg = (void *)psvr;
|
pncr->arg = (void *)psvr;
|
||||||
newClock(pncr);
|
newClock(pncr);
|
||||||
|
|
||||||
|
// 注册请求处理守护时钟
|
||||||
|
pncr = new clock_register();
|
||||||
|
pncr->if_thread = true;
|
||||||
|
pncr->if_reset = true;
|
||||||
|
pncr->click = clicks*2+7;
|
||||||
|
pncr->rawclick = clicks/2;
|
||||||
|
pncr->func = requestProcessorDeamonForSquare;
|
||||||
|
pncr->arg = (void *)psvr;
|
||||||
|
newClock(pncr);
|
||||||
}
|
}
|
||||||
|
|
||||||
Server::Server(int port, string send_ip,int send_port):socket(port),send_socket(send_ip,send_port){
|
Server::Server(int port, string send_ip,int send_port):socket(port),send_socket(send_ip,send_port){
|
||||||
@ -286,10 +307,19 @@ void *packetProcessorDeamonForSquare(void *pvcti){
|
|||||||
pthread_exit(NULL);
|
pthread_exit(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *requsetProcessorDeamonForSquare(void *pvcti){
|
void *requestProcessorDeamonForSquare(void *pvcti){
|
||||||
clock_thread_info *pcti = (clock_thread_info *) pvcti;
|
clock_thread_info *pcti = (clock_thread_info *) pvcti;
|
||||||
SQEServer *psvr = (SQEServer *) pcti->args;
|
SQEServer *psvr = (SQEServer *) pcti->args;
|
||||||
psvr->ProcessPacket();
|
psvr->ProcessRequset();
|
||||||
|
clockThreadFinish(pcti->tid);
|
||||||
|
pthread_exit(NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *sendPacketProcessorDeamonForSquare(void *pvcti){
|
||||||
|
clock_thread_info *pcti = (clock_thread_info *) pvcti;
|
||||||
|
SQEServer *psvr = (SQEServer *) pcti->args;
|
||||||
|
|
||||||
|
psvr->ProcessSendPackets();
|
||||||
clockThreadFinish(pcti->tid);
|
clockThreadFinish(pcti->tid);
|
||||||
pthread_exit(NULL);
|
pthread_exit(NULL);
|
||||||
}
|
}
|
||||||
@ -330,7 +360,6 @@ void Server::ProcessRawData(void){
|
|||||||
}
|
}
|
||||||
|
|
||||||
void SQEServer::ProcessPacket(void){
|
void SQEServer::ProcessPacket(void){
|
||||||
printf("RW: %lu PKT: %lu REQ: %lu\n",rawdata_in.size(),packets_in.size(),req_list.size());
|
|
||||||
// 一次性最大处理个数
|
// 一次性最大处理个数
|
||||||
int prm = 2048;
|
int prm = 2048;
|
||||||
// 加锁
|
// 加锁
|
||||||
@ -339,17 +368,20 @@ void SQEServer::ProcessPacket(void){
|
|||||||
if(ppkt == nullptr) continue;
|
if(ppkt == nullptr) continue;
|
||||||
if(prm-- == 0) break;
|
if(prm-- == 0) break;
|
||||||
if(ppkt->type == REQUSET_TYPE){
|
if(ppkt->type == REQUSET_TYPE){
|
||||||
|
if(pthread_mutex_lock(&mutex_pktreq) != 0) throw "lock error";
|
||||||
request *pnreq = new request();
|
request *pnreq = new request();
|
||||||
Packet2Request(*ppkt, *pnreq);
|
Packet2Request(*ppkt, *pnreq);
|
||||||
|
pnreq->t_addr.SetSockAddr(ppkt->address);
|
||||||
req_list.push_back(pnreq);
|
req_list.push_back(pnreq);
|
||||||
|
pthread_mutex_unlock(&mutex_pktreq);
|
||||||
}
|
}
|
||||||
freePcaketServer(*ppkt);
|
freePcaketServer(*ppkt);
|
||||||
delete ppkt;
|
delete ppkt;
|
||||||
ppkt = nullptr;
|
ppkt = nullptr;
|
||||||
}
|
}
|
||||||
|
packets_in.remove_if([](auto &ppkt){return ppkt == nullptr;});
|
||||||
// 解锁
|
// 解锁
|
||||||
pthread_mutex_unlock(&mutex_rp);
|
pthread_mutex_unlock(&mutex_rp);
|
||||||
packets_in.remove_if([](auto &ppkt){return ppkt == nullptr;});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SQEServer::SQEServer(int port):Server(port){
|
SQEServer::SQEServer(int port):Server(port){
|
||||||
@ -381,6 +413,7 @@ void SQEServer::Packet2Request(packet &pkt, request &req){
|
|||||||
req.type = (const char *)pkt.buffs[1].second;
|
req.type = (const char *)pkt.buffs[1].second;
|
||||||
req.data = (const char *)pkt.buffs[2].second;
|
req.data = (const char *)pkt.buffs[2].second;
|
||||||
req.t_addr = Addr(*(struct sockaddr_in *)pkt.buffs[3].second);
|
req.t_addr = Addr(*(struct sockaddr_in *)pkt.buffs[3].second);
|
||||||
|
req.recv_port = *(uint32_t *)pkt.buffs[4].second;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -392,6 +425,7 @@ void SQEServer::Request2Packet(packet &pkt, request &req){
|
|||||||
pkt.AddBuff((void *)req.type.data(), (uint32_t)req.type.size());
|
pkt.AddBuff((void *)req.type.data(), (uint32_t)req.type.size());
|
||||||
pkt.AddBuff((void *)req.data.data(), (uint32_t)req.data.size());
|
pkt.AddBuff((void *)req.data.data(), (uint32_t)req.data.size());
|
||||||
pkt.AddBuff((void *)req.t_addr.Obj(), sizeof(struct sockaddr_in));
|
pkt.AddBuff((void *)req.t_addr.Obj(), sizeof(struct sockaddr_in));
|
||||||
|
pkt.AddBuff((void *)&req.recv_port, sizeof(uint32_t));
|
||||||
}
|
}
|
||||||
|
|
||||||
void packet::AddBuff(void *pbuff, uint32_t size){
|
void packet::AddBuff(void *pbuff, uint32_t size){
|
||||||
@ -400,16 +434,85 @@ void packet::AddBuff(void *pbuff, uint32_t size){
|
|||||||
buffs.push_back({size,pnbuff});
|
buffs.push_back({size,pnbuff});
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::ProcessRequset(void){
|
void SQEServer::ProcessRequset(void){
|
||||||
|
printf("RW: %4lu PKT: %4lu REQ: %4lu PKTS: %5lu\n",rawdata_in.size(),packets_in.size(),req_list.size(),packets_out.size());
|
||||||
|
// 一次性最大处理数
|
||||||
|
int prm = 2048;
|
||||||
|
if(pthread_mutex_lock(&mutex_pktreq) != 0) throw "lock error";
|
||||||
|
for(auto &preq : req_list){
|
||||||
|
if(preq == nullptr) continue;
|
||||||
|
if(prm-- == 0) break;
|
||||||
|
if(preq->type == "client-square request"){
|
||||||
|
if(preq->data == "request for public key"){
|
||||||
|
|
||||||
|
respond *pnr = new respond();
|
||||||
|
pnr->r_id = preq->r_id;
|
||||||
|
pnr->SetBuff((Byte *)&pkc, sizeof(public_key_class));
|
||||||
|
pnr->type = "square public key";
|
||||||
|
pnr->t_addr = preq->t_addr;
|
||||||
|
pnr->t_addr.SetPort(preq->recv_port);
|
||||||
|
packet *pnpkt = new packet();
|
||||||
|
Respond2Packet(*pnpkt, *pnr);
|
||||||
|
delete pnr;
|
||||||
|
if(pthread_mutex_lock(&mutex_sndpkt) != 0) throw "lock error";
|
||||||
|
packets_out.push_back(pnpkt);
|
||||||
|
pthread_mutex_unlock(&mutex_sndpkt);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
delete preq;
|
||||||
|
preq = nullptr;
|
||||||
|
}
|
||||||
|
req_list.remove_if([](auto &preq){return preq == nullptr;});
|
||||||
|
pthread_mutex_unlock(&mutex_pktreq);
|
||||||
|
}
|
||||||
|
|
||||||
|
void SQEServer::Packet2Respond(packet &pkt, respond &res){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SQEServer::Respond2Packet(packet &pkt, respond &res){
|
||||||
|
pkt.type = RESPOND_TYPE;
|
||||||
|
pkt.address = *res.t_addr.Obj();
|
||||||
|
pkt.AddBuff((void *) res.type.data(), (uint32_t)res.type.size());
|
||||||
|
pkt.AddBuff((void *)res.buff, res.buff_size);
|
||||||
|
}
|
||||||
|
|
||||||
request::request(){
|
request::request(){
|
||||||
r_id = rng::tsc_seed{}();
|
r_id = rng::tsc_seed{}();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void respond::SetBuff(Byte *buff, uint32_t size){
|
||||||
|
void *nbuff = malloc(size);
|
||||||
|
memcpy(nbuff, buff, size);
|
||||||
|
this->buff = (Byte *)nbuff;
|
||||||
|
this->buff_size = size;
|
||||||
|
}
|
||||||
|
|
||||||
packet::~packet(){
|
packet::~packet(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
respond::~respond(){
|
||||||
|
if(buff != nullptr) free(buff);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Server::ProcessSendPackets(void){
|
||||||
|
// 一次性最大处理个数
|
||||||
|
int prm = 512;
|
||||||
|
if(pthread_mutex_lock(&mutex_sndpkt) != 0) throw "lock error";
|
||||||
|
for(auto &ppkt : packets_out){
|
||||||
|
if(ppkt == nullptr) continue;
|
||||||
|
if(prm-- == 0) break;
|
||||||
|
raw_data nrwd;
|
||||||
|
Packet2Rawdata(*ppkt, nrwd);
|
||||||
|
SignedRawdata(&nrwd, "SPKT");
|
||||||
|
send_socket.SetSendSockAddr(ppkt->address);
|
||||||
|
SentRawdata(&nrwd);
|
||||||
|
freeRawdataServer(nrwd);
|
||||||
|
freePcaketServer(*ppkt);
|
||||||
|
delete ppkt;
|
||||||
|
ppkt = nullptr;
|
||||||
|
}
|
||||||
|
packets_out.remove_if([](auto ppkt){return ppkt == nullptr;});
|
||||||
|
pthread_mutex_unlock(&mutex_sndpkt);
|
||||||
|
}
|
||||||
|
@ -67,10 +67,12 @@ ssize_t SocketUDPServer::Recv(string &str){
|
|||||||
|
|
||||||
ssize_t SocketUDPServer::RecvRAW(char **p_rdt, Addr &taddr){
|
ssize_t SocketUDPServer::RecvRAW(char **p_rdt, Addr &taddr){
|
||||||
ssize_t tlen;
|
ssize_t tlen;
|
||||||
|
sockaddr_in tsai;
|
||||||
// 非阻塞输入
|
socklen_t tsai_size = sizeof(sockaddr);
|
||||||
|
// 非阻塞读取
|
||||||
if(set_fcntl){
|
if(set_fcntl){
|
||||||
tlen = recvfrom(server_sfd, buff, BUFSIZ, 0, server_addr.RawObj(), server_addr.SizeP());
|
tlen = recvfrom(server_sfd, buff, BUFSIZ, 0, (struct sockaddr *)(&tsai), &tsai_size);
|
||||||
|
|
||||||
// 读取错误
|
// 读取错误
|
||||||
if(tlen == -1 && errno != EAGAIN){
|
if(tlen == -1 && errno != EAGAIN){
|
||||||
*p_rdt = nullptr;
|
*p_rdt = nullptr;
|
||||||
@ -78,16 +80,16 @@ ssize_t SocketUDPServer::RecvRAW(char **p_rdt, Addr &taddr){
|
|||||||
perror("recv");
|
perror("recv");
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
// 缓冲区没有信息
|
// 缓冲区没有信息
|
||||||
else if(tlen == 0 || (tlen == -1 && errno == EAGAIN)){
|
else if(tlen == 0 || (tlen == -1 && errno == EAGAIN)){
|
||||||
*p_rdt = nullptr;
|
*p_rdt = nullptr;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
// 成功读取信息
|
// 成功读取信息
|
||||||
else{
|
else{
|
||||||
*p_rdt = (char *)malloc(tlen);
|
*p_rdt = (char *)malloc(tlen);
|
||||||
|
taddr.SetSockAddr(tsai);
|
||||||
memcpy(*p_rdt, buff, tlen);
|
memcpy(*p_rdt, buff, tlen);
|
||||||
taddr = server_addr;
|
|
||||||
return tlen;
|
return tlen;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -118,3 +120,7 @@ void SocketUDPClient::Send(string buff){
|
|||||||
void SocketUDPClient::SendRAW(char *buff, unsigned long size){
|
void SocketUDPClient::SendRAW(char *buff, unsigned long size){
|
||||||
sendto(client_sfd, buff, size, 0, send_addr.RawObj(), send_addr.Size());
|
sendto(client_sfd, buff, size, 0, send_addr.RawObj(), send_addr.Size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SocketClient::SetSendSockAddr(struct sockaddr_in tsi){
|
||||||
|
send_addr.SetSockAddr(tsi);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user