STTNet
 全部  命名空间 文件 函数 变量 类型定义 宏定义 
sttnet.h
浏览该文件的文档.
1 
7 #ifndef PUBLIC_H
8 #define PUBLIC_H 1
9 #include<jsoncpp/json/json.h>
10 #include<string_view>
11 #include<string>
12 #include<atomic>
13 #include<iostream>
14 #include<unistd.h>
15 #include<sys/stat.h>
16 #include<fstream>
17 #include<fcntl.h>
18 #include<sstream>
19 #include<mutex>
20 #include<chrono>
21 #include<iomanip>
22 #include<random>
23 #include<cmath>
24 #include<thread>
25 #include<openssl/sha.h>
26 #include<netdb.h>
27 #include<arpa/inet.h>
28 #include<sys/types.h>
29 #include<sys/socket.h>
30 #include<cstring>
31 #include<openssl/bio.h>
32 #include<openssl/evp.h>
33 #include<openssl/buffer.h>
34 #include<functional>
35 #include<list>
36 #include<queue>
37 #include<sys/epoll.h>
38 #include<condition_variable>
39 #include <regex>
40 #include<unordered_map>
41 #include <openssl/ssl.h>
42 #include <openssl/err.h>
43 #include<openssl/crypto.h>
44 #include<signal.h>
45 #include<sys/ipc.h>
46 #include<sys/sem.h>
47 #include<sys/wait.h>
48 #include<sys/shm.h>
49 #include<type_traits>
50 #include<charconv>
54 namespace stt
55 {
61  namespace file
62  {
66  class FileTool
67  {
68  public:
76  static bool createDir(const std::string & ddir,const mode_t &mode=0775);
85  static bool copy(const std::string &sourceFile,const std::string &objectFile);
94  static bool createFile(const std::string &filePath,const mode_t &mode=0666);
101  static size_t get_file_size(const std::string &fileName);
102  };
103 
109  {
113  std::string loc;
117  int threads;
121  std::mutex lock;
127  FileThreadLock(const std::string &loc,const int &threads):loc(loc),threads(threads){};
128  };
129 
136  class File:private FileTool
137  {
138  protected:
139  static std::mutex l1;
140  static std::unordered_map<std::string,FileThreadLock> fl2;
141  protected:
142  std::mutex che;
143 
144  private:
145  void lockfl2();
146  void unlockfl2();
147  private:
148  std::ifstream fin;
149  std::vector<std::string> data;
150  std::vector<std::string> backUp;
151  char *data_binary=nullptr;
152  char *backUp_binary=nullptr;
153  size_t size1=0;
154  size_t size2=0;
155  int multiple=0;
156  size_t multiple_backup=0;
157  size_t malloced=0;
158  std::mutex fl1;
159 
160  std::ofstream fout;
161  std::string fileName;
162 
163  std::string fileNameTemp;
164  bool flag=false;
165  bool binary;
166  mode_t mode;
167  size_t size=0;
168  uint64_t totalLines=0;
169  private:
170  void toMemory();
171  bool toDisk();
172  public:
213  bool openFile(const std::string &fileName,const bool &create=true,const int &multiple=0,const size_t &size=0,const mode_t &mode=0666);
219  bool closeFile(const bool &del=false);
224  ~File(){closeFile(false);}
229  bool isOpen(){return flag;}
234  bool isBinary(){return binary;}
239  std::string getFileName(){return fileName;}
248  uint64_t getFileLine(){return totalLines;}
257  size_t getFileSize(){return size;}
266  size_t getSize1(){return size1;}
267  public:
273  bool lockMemory();
281  bool unlockMemory(const bool &rec=false);
282  public:
296  int findC(const std::string &targetString,const int linePos=1);
306  bool appendLineC(const std::string &data,const int &linePos=0);
315  bool deleteLineC(const int &linePos=0);
322  bool deleteAllC();
332  bool chgLineC(const std::string &data,const int &linePos=0);
342  bool readLineC(std::string &data,const int linePos);
352  std::string& readC(std::string &data,const int &linePos,const int &num);
359  std::string& readAllC(std::string &data);
375  bool readC(char *data,const size_t &pos,const size_t &size);
386  bool writeC(const char *data,const size_t &pos,const size_t &size);
391  void formatC();
393  public:
407  int find(const std::string &targetString,const int linePos=1);
417  bool appendLine(const std::string &data,const int &linePos=0);
426  bool deleteLine(const int &linePos=0);
433  bool deleteAll();
443  bool chgLine(const std::string &data,const int &linePos=0);
453  bool readLine(std::string &data,const int linePos);
463  std::string& read(std::string &data,const int &linePos,const int &num);
470  std::string& readAll(std::string &data);
486  bool read(char *data,const size_t &pos,const size_t &size);
497  bool write(const char *data,const size_t &pos,const size_t &size);
502  void format();
504  };
505  }
511  namespace time
512  {
519  struct Duration
520  {
524  long long day;
528  int hour;
532  int min;
536  int sec;
540  int msec;
544  Duration(long long a,int b,int c,int d,int e):day(a),hour(b),min(c),sec(d),msec(e){}
545  Duration()=default;
551  bool operator>(const Duration &b)
552  {
553  long long total;
554  total=day*24*60*60*1000+hour*60*60*1000+min*60*1000+sec*1000+msec;
555  long long totalB;
556  totalB=b.day*24*60*60*1000+b.hour*60*60*1000+b.min*60*1000+b.sec*1000+b.msec;
557  if(total>totalB)
558  return true;
559  else
560  return false;
561  }
567  bool operator<(const Duration &b)
568  {
569  long long total;
570  total=day*24*60*60*1000+hour*60*60*1000+min*60*1000+sec*1000+msec;
571  long long totalB;
572  totalB=b.day*24*60*60*1000+b.hour*60*60*1000+b.min*60*1000+b.sec*1000+b.msec;
573  if(total<totalB)
574  return true;
575  else
576  return false;
577  }
583  bool operator==(const Duration &b)
584  {
585  long long total;
586  total=day*24*60*60*1000+hour*60*60*1000+min*60*1000+sec*1000+msec;
587  long long totalB;
588  totalB=b.day*24*60*60*1000+b.hour*60*60*1000+b.min*60*1000+b.sec*1000+b.msec;
589  if(total==totalB)
590  return true;
591  else
592  return false;
593  }
599  bool operator>=(const Duration &b)
600  {
601  long long total;
602  total=day*24*60*60*1000+hour*60*60*1000+min*60*1000+sec*1000+msec;
603  long long totalB;
604  totalB=b.day*24*60*60*1000+b.hour*60*60*1000+b.min*60*1000+b.sec*1000+b.msec;
605  if(total>=totalB)
606  return true;
607  else
608  return false;
609  }
615  bool operator<=(const Duration &b)
616  {
617  long long total;
618  total=day*24*60*60*1000+hour*60*60*1000+min*60*1000+sec*1000+msec;
619  long long totalB;
620  totalB=b.day*24*60*60*1000+b.hour*60*60*1000+b.min*60*1000+b.sec*1000+b.msec;
621  if(total<=totalB)
622  return true;
623  else
624  return false;
625  }
632  {
633  long long dayy=day;
634  int hourr=hour;
635  int minn=min;
636  int secc=sec;
637  int msecc=msec;
638 
639  msecc+=b.msec;
640  secc+=b.sec;
641  minn+=b.min;
642  hourr+=b.hour;
643  dayy+=b.day;
644 
645  if(msecc/1000!=0)
646  {
647  secc+=msecc/1000;
648  msecc=msecc%1000;
649  }
650 
651  if(secc/60!=0)
652  {
653  minn+=secc/60;
654  secc=secc%60;
655  }
656 
657  if(minn/60!=0)
658  {
659  hourr+=minn/60;
660  minn=minn%60;
661  }
662 
663  if(hourr/24!=0)
664  {
665  dayy+=hourr/24;
666  hourr=hourr%24;
667  }
668  return Duration(dayy,hourr,minn,secc,msecc);
669  }
676  {
677  long long dayy=day;
678  int hourr=hour;
679  int minn=min;
680  int secc=sec;
681  int msecc=msec;
682 
683  msecc=dayy*24*60*60*1000+hourr*60*60*1000+minn*60*1000+secc*1000+msecc-b.day*24*60*60*1000-b.hour*60*60*1000-b.min*60*1000-b.sec*1000-b.msec;
684  secc=0;
685  minn=0;
686  hourr=0;
687  dayy=0;
688 
689  if(msecc/1000!=0)
690  {
691  secc+=msecc/1000;
692  msecc=msecc%1000;
693  }
694 
695  if(secc/60!=0)
696  {
697  minn+=secc/60;
698  secc=secc%60;
699  }
700 
701  if(minn/60!=0)
702  {
703  hourr+=minn/60;
704  minn=minn%60;
705  }
706 
707  if(hourr/24!=0)
708  {
709  dayy+=hourr/24;
710  hourr=hourr%24;
711  }
712  return Duration(dayy,hourr,minn,secc,msecc);
713  }
714 
718  double convertToDay()
719  {
720  long long total;
721  total=hour*60*60*1000+min*60*1000+sec*1000+msec;
722  double k=day+total/86400000.0000;
723  return k;
724  }
728  double convertToHour()
729  {
730  long long total;
731  total=min*60*1000+sec*1000+msec;
732  double k=day*24+hour+total/36000000.0000;
733  return k;
734  }
738  double convertToMin()
739  {
740  long long total;
741  total=sec*1000+msec;
742  double k=day*24*60+hour*60+min+total/60000.0000;
743  return k;
744  }
748  double convertToSec()
749  {
750  long long total;
751  total=msec;
752  double k=day*24*60*60+hour*60*60+min*60+sec+total/1000.0000;
753  return k;
754  }
758  long long convertToMsec()
759  {
760  long long total;
761  total=day*24*60*60*1000+hour*60*60*1000+min*60*1000+sec*1000+msec;
762  return total;
763  }
769  Duration recoverForm(const long long &t)
770  {
771  msec=t;
772  sec=0;
773  min=0;
774  hour=0;
775  day=0;
776 
777  if(msec/1000!=0)
778  {
779  sec+=msec/1000;
780  msec=msec%1000;
781  }
782 
783  if(sec/60!=0)
784  {
785  min+=sec/60;
786  sec=sec%60;
787  }
788 
789  if(min/60!=0)
790  {
791  hour+=min/60;
792  min=min%60;
793  }
794 
795  if(hour/24!=0)
796  {
797  day+=hour/24;
798  hour=hour%24;
799  }
800  return Duration(day,hour,min,sec,msec);
801  }
802  };
814  std::ostream& operator<<(std::ostream &os,const Duration &a);
815 
816  using Milliseconds = std::chrono::duration<uint64_t,std::milli>;
817  using Seconds=std::chrono::duration<uint64_t>;
821  #define ISO8086A "yyyy-mm-ddThh:mi:ss"
822 
825  #define ISO8086B "yyyy-mm-ddThh:mi:ss.sss"
826 
827 
834  class DateTime
835  {
836  private:
837  static Duration& dTOD(const Milliseconds& d1,Duration &D1);
838  static Milliseconds& DTOd(const Duration &D1,Milliseconds& d1);
839  static std::string &toPGtimeFormat();
840  static std::chrono::system_clock::time_point strToTimePoint(const std::string &timeStr,const std::string &format=ISO8086A);
841  static std::string& timePointToStr(const std::chrono::system_clock::time_point &tp,std::string &timeStr,const std::string &format=ISO8086A);
842  public:
850  static std::string& getTime(std::string &timeStr,const std::string &format=ISO8086A);
859  static bool convertFormat(std::string &timeStr,const std::string &oldFormat,const std::string &newFormat=ISO8086A);
869  static Duration& calculateTime(const std::string &time1,const std::string &time2,Duration &result,const std::string &format1=ISO8086A,const std::string &format2=ISO8086A);
880  static std::string& calculateTime(const std::string &time1,const Duration &time2,std::string &result,const std::string &am,const std::string &format1=ISO8086A,const std::string &format2=ISO8086A);
890  static bool compareTime(const std::string &time1,const std::string &time2,const std::string &format1=ISO8086A,const std::string &format2=ISO8086A);
891  private:
892  Duration dt{-1,-1,-1,-1,-1};
893  bool flag=false;
894  std::chrono::steady_clock::time_point start;
895  std::chrono::steady_clock::time_point end;
896  public:
901  bool startTiming();
913  public:
918  Duration getDt(){return dt;}
923  bool isStart(){return flag;}
924  };
925  }
926  namespace file
927  {
932  class LogFile:private time::DateTime,protected File
933  {
934  private:
935  std::string timeFormat;
936  std::string contentFormat;
937  public:
946  bool openFile(const std::string &fileName,const std::string &timeFormat=ISO8086A,const std::string &contentFormat=" ");
951  bool isOpen(){return File::isOpen();}
956  std::string getFileName(){return File::getFileName();}
962  bool closeFile(const bool &del=false);
968  bool writeLog(const std::string &data);
973  bool clearLog();
981  bool deleteLogByTime(const std::string &date1="1",const std::string &date2="2");
982  };
983  }
989  namespace data
990  {
995  {
996  public:
1007  static bool encryptSymmetric(const unsigned char *before,const size_t &length,const unsigned char *passwd,const unsigned char *iv,unsigned char *after);
1018  static bool decryptSymmetric(const unsigned char *before,const size_t &length,const unsigned char *passwd,const unsigned char *iv,unsigned char *after);
1031  static std::string& sha1(const std::string &ori_str,std::string &result);
1044  static std::string& sha11(const std::string &ori_str,std::string &result);
1045  };
1049  class BitUtil
1050  {
1051  public:
1059  static std::string& bitOutput(char input,std::string &result);
1067  static std::string& bitOutput(const std::string &input,std::string &result);
1076  static char& bitOutput_bit(char input,const int pos,char &result);
1084  static unsigned long& bitStrToNumber(const std::string &input,unsigned long &result);
1094  static unsigned long& bitToNumber(const std::string &input,unsigned long &result);
1102  static char& toBit(const std::string &input,char &result);
1110  static std::string& toBit(const std::string &input,std::string &result);
1111  };
1116  {
1117  public:
1125  static long getRandomNumber(const long &a,const long &b);
1132  static std::string& getRandomStr_base64(std::string &str,const int &length);
1146  static std::string& generateMask_4(std::string &mask);
1147  };
1152  {
1153  public:
1165  static unsigned long& htonl_ntohl_64(unsigned long &data);//64位无符号数转化为大/小端序(网络字节序)
1166  };
1167 
1172  {
1173  public:
1174 
1183  static std::string& getPreciesFloat(const float &number,const int &bit,std::string &str);
1191  static float& getPreciesFloat(float &number,const int &bit);
1200  static std::string& getPreciesDouble(const double &number,const int &bit,std::string &str);
1208  static double& getPreciesDouble(double &number,const int &bit);
1220  static float& getValidFloat(float &number,const int &bit);
1221  };
1227  {
1228  public:
1245  static size_t get_split_str(const std::string_view& ori_str,std::string_view &str,const std::string_view &a,const std::string_view &b,const size_t &pos=0);
1256  static std::string_view& get_value_str(const std::string_view& ori_str,std::string_view &str,const std::string& name);
1265  static std::string_view& get_value_header(const std::string_view& ori_str,std::string_view &str,const std::string& name);
1275  static std::string_view& get_location_str(const std::string_view& ori_str,std::string_view &str);
1285  static std::string_view& getLocPara(const std::string_view &url,std::string_view &locPara);
1294  static std::string_view& getPara(const std::string_view &url,std::string_view &para);
1295 
1296 
1313  static size_t get_split_str(const std::string_view& ori_str,std::string &str,const std::string_view &a,const std::string_view &b,const size_t &pos=0);
1324  static std::string& get_value_str(const std::string& ori_str,std::string &str,const std::string& name);
1333  static std::string& get_value_header(const std::string& ori_str,std::string &str,const std::string& name);
1343  static std::string& get_location_str(const std::string& ori_str,std::string &str);
1353  static std::string& getLocPara(const std::string &url,std::string &locPara);
1362  static std::string& getPara(const std::string &url,std::string &para);
1373  static std::string& getIP(const std::string &url,std::string &IP);
1384  static int& getPort(const std::string &url,int &port);
1394  static std::string createHeader(const std::string& first,const std::string& second);
1415  template<class... Args>
1416  static std::string createHeader(const std::string& first,const std::string& second,Args... args)
1417  {
1418  std::string cf=first+": "+second+"\r\n"+createHeader(args...);
1419  return cf;
1420  }
1421  };
1426  {
1427  public:
1439  static std::string& transfer_websocket_key(std::string &str);
1440  };
1445  {
1446  public:
1455  static int& toInt(const std::string_view&ori_str,int &result,const int &i=-1);
1462  static int& str16toInt(const std::string_view&ori_str,int &result,const int &i=-1);
1471  static long& toLong(const std::string_view&ori_str,long &result,const long &i=-1);
1480  static float& toFloat(const std::string&ori_str,float &result,const float &i=-1);
1489  static double& toDouble(const std::string&ori_str,double &result,const double &i=-1);
1497  static bool& toBool(const std::string_view&ori_str,bool &result);
1508  static std::string& strto16(const std::string &ori_str,std::string &result);//字符串转化为16进制字符串 (暂不需要)(待修复)
1509  };
1514  {
1515  public:
1524  static std::string base64_encode(const std::string &input);
1533  static std::string base64_decode(const std::string &input);
1545  static std::string& transfer_websocket_key(std::string &str);
1559  static std::string& generateMask_4(std::string &mask);
1570  static std::string& maskCalculate(std::string &data,const std::string &mask);
1571  };
1576  {
1577  public:
1590  static int getValue(const std::string &oriStr,std::string& result,const std::string &type="value",const std::string &name="a",const int &num=0);
1591 
1597  static std::string toString(const Json::Value &val);
1603  static Json::Value toJsonArray(const std::string & str);
1613  template<class T1,class T2>
1614  static std::string createJson(T1 first,T2 second)
1615  {
1616  Json::Value root;
1617  root[first]=second;
1618  Json::StreamWriterBuilder builder;
1619  std::string jsonString=Json::writeString(builder,root);
1620  return jsonString;
1621  }
1633  template<class T1,class T2,class... Args>
1634  static std::string createJson(T1 first,T2 second,Args... args)
1635  {
1636  Json::Value root;
1637  root[first]=second;
1638  std::string kk=createJson(args...);
1639  Json::StreamWriterBuilder builder;
1640  std::string jsonString=Json::writeString(builder,root);
1641  jsonString=jsonString.erase(jsonString.length()-2);
1642  kk=kk.substr(1);
1643  return jsonString+","+kk;
1644 
1645  }
1653  template<class T>
1654  static std::string createArray(T first)
1655  {
1656  Json::Value root(Json::arrayValue);
1657  root.append(first);
1658  Json::StreamWriterBuilder builder;
1659  std::string jsonString=Json::writeString(builder,root);
1660  return jsonString;
1661  }
1671  template<class T,class... Args>
1672  static std::string createArray(T first,Args... args)
1673  {
1674  Json::Value root(Json::arrayValue);
1675  root.append(first);
1676  std::string kk=createArray(args...);
1677  Json::StreamWriterBuilder builder;
1678  std::string jsonString=Json::writeString(builder,root);
1679  jsonString=jsonString.erase(jsonString.length()-2);
1680  kk=kk.substr(1);
1681  return jsonString+","+kk;
1682 
1683  }
1690  static std::string jsonAdd(const std::string &a,const std::string &b);
1697  static std::string& jsonFormatify(const std::string &a,std::string &b);
1704  static std::string& jsonToUTF8(const std::string &input,std::string &output);
1705  };
1706  }
1707 
1711  namespace security
1712  {
1717  {
1719  std::deque<std::chrono::steady_clock::time_point> connectionTimeQueue;
1720  };
1727  {
1728  private:
1729  int connectionLimit;
1730  int connectionRateLimit;
1731  std::unordered_map<std::string,IPInformation> connectionTable;
1732 
1733  public:
1739  ConnectionLimiter(const int &connectionLimit=20,const int &connectionRateLimit=6):connectionLimit(connectionLimit),connectionRateLimit(connectionRateLimit){}
1745  bool allow(const std::string &ip);
1750  void clearIP(const std::string &ip);
1751  };
1752 
1753  }
1754 
1760  namespace network
1761  {
1766  {
1767  protected:
1768  int fd=-1;
1769  bool flag1=false;
1770  bool flag2=false;
1771  SSL *ssl=nullptr;
1772  int sec=-1;
1773  public:
1777  bool flag3=false;
1778  public:
1788  void setFD(const int &fd,SSL *ssl,const bool &flag1=false,const bool &flag2=false,const int &sec=-1);
1793  int getFD(){return fd;}
1798  SSL *getSSL(){return ssl;}
1803  void close(const bool &cle=true);
1808  void blockSet(const int &sec = -1);
1812  void unblockSet();
1816  bool multiUseSet();
1821  bool isConnect(){if(fd==-1)return false;else return true;}
1822  public:
1841  int sendData(const std::string &data,const bool &block=true);
1861  int sendData(const char *data,const uint64_t &length,const bool &block=true);
1877  int recvDataByLength(std::string &data,const uint64_t &length,const int &sec=2);
1893  int recvDataByLength(char *data,const uint64_t &length,const int &sec=2);
1906  int recvData(std::string &data,const uint64_t &length);
1919  int recvData(char *data,const uint64_t &length);
1920  };
1921 
1927  {
1928  private:
1929  std::string serverIP="";
1930  int serverPort=-1;
1931  bool flag=false;
1932  bool TLS;
1933  SSL_CTX *ctx=nullptr;
1934  const char *ca;
1935  const char *cert;
1936  const char *key;
1937  const char *passwd;
1938  private:
1939  bool createFD();
1940  void closeAndUnCreate();
1941  bool initCTX(const char *ca,const char *cert="",const char *key="",const char *passwd="");
1942  public:
1955  TcpClient(const bool &TLS=false,const char *ca="",const char *cert="",const char *key="",const char *passwd="");
1962  bool connect(const std::string &ip,const int &port);
1976  void resetCTX(const bool &TLS=false,const char *ca="",const char *cert="",const char *key="",const char *passwd="");
1981  bool close();
1985  ~TcpClient(){closeAndUnCreate();}
1986  public:
1991  std::string getServerIP(){return serverIP;}
1996  int getServerPort(){return serverPort;}
2001  bool isConnect(){return flag;}
2002  };
2003 
2011  class HttpClient:private TcpClient
2012  {
2013  private:
2014  bool flag=false;
2015  public:
2028  HttpClient(const bool &TLS=false,const char *ca="",const char *cert="",const char *key="",const char *passwd=""):TcpClient(TLS,ca,cert,key,passwd){}
2029  public:
2042  bool getRequest(const std::string &url,const std::string &header="",const std::string &header1="Connection: keep-alive",const int &sec=-1);
2056  bool postRequest(const std::string &url,const std::string &body="",const std::string &header="",const std::string &header1="Connection: keep-alive",const int &sec=-1);
2071  bool getRequestFromFD(const int &fd,SSL *ssl,const std::string &url,const std::string &header="",const std::string &header1="Connection: keep-alive",const int &sec=2);
2087  bool postRequestFromFD(const int &fd,SSL *ssl,const std::string &url,const std::string &body="",const std::string &header="",const std::string &header1="Connection: keep-alive",const int &sec=2);
2088  public:
2093  bool isReturn(){return flag;}
2097  std::string header="";
2101  std::string body="";
2102  };
2103 
2108  {
2109  private:
2110  int fd;
2111  bool flag=true;
2112  std::function<bool(const int &fd)> fc=[](const int &fd)->bool
2113  {return true;};
2114  std::function<void(const int &fd)> fcEnd=[](const int &fd)->void
2115  {};
2116  std::function<bool(const int &fd)> fcTimeOut=[](const int &fd)->bool
2117  {return true;};
2118  bool flag1=true;
2119  bool flag2=false;
2120  time::Duration dt{0,20,0,0,0};
2121  bool flag3=false;
2122  time::Duration t;
2123  private:
2124  void epolll();
2125  public:
2132  void startListen(const int &fd,const bool &flag=true,const time::Duration &dt=time::Duration{0,0,20,0,0});
2133  public:
2138  bool isListen(){return flag2;}
2148  void setFunction(std::function<bool(const int &fd)> fc){this->fc=fc;}
2156  void setEndFunction(std::function<void(const int &fd)> fcEnd){this->fcEnd=fcEnd;};
2166  void setTimeOutFunction(std::function<bool(const int &fd)> fcTimeOut){this->fcTimeOut=fcTimeOut;};
2172  bool endListen();
2177  void endListenWithSignal(){flag1=false;}
2183  void waitAndQuit(const time::Duration &t=time::Duration{0,0,0,10,10}){flag3=true;this->t=t;}
2189  };
2190 
2197  {
2198  private:
2199  bool flag4=false;
2200  std::function<bool(const std::string &message,WebSocketClient &k)> fc=[](const std::string &message,WebSocketClient &k)->bool
2201  {std::cout<<"收到: "<<message<<std::endl;return true;};
2202  std::string url;
2203  EpollSingle k;
2204  bool flag5=false;
2205  private:
2206  bool close1();
2207  public:
2220  WebSocketClient(const bool &TLS=false,const char *ca="",const char *cert="",const char *key="",const char *passwd=""):TcpClient(TLS,ca,cert,key,passwd){}
2231  void setFunction(std::function<bool(const std::string &message,WebSocketClient &k)> fc){this->fc=fc;}
2238  bool connect(const std::string &url,const int &min=20);
2261  bool sendMessage(const std::string &message,const std::string &type="0001");
2271  void close(const std::string &closeCodeAndMessage,const bool &wait=true);
2289  void close(const short &code=1000,const std::string &message="bye",const bool &wait=true);
2290  public:
2295  bool isConnect(){return flag4;}
2300  std::string getUrl(){return url;}
2305  std::string getServerIp(){return TcpClient::getServerIP();}
2310  std::string getServerPort(){return TcpClient::getServerIP();}
2314  ~WebSocketClient();
2315  };
2316 
2321  {
2325  std::string_view type;
2329  std::string_view locPara;
2333  std::string_view loc;
2337  std::string_view para;
2341  std::string_view header;
2345  std::string_view body;
2349  std::string body_chunked;
2350  };
2351 
2352  struct TcpFDInf;
2358  {
2359  public:
2367  void setFD(const int &fd,SSL *ssl=nullptr,const bool &flag1=false,const bool &flag2=true){TcpFDHandler::setFD(fd,ssl,flag1,flag2);}
2382  int solveRequest(TcpFDInf &TcpInf,const unsigned long &buffer_size,const int &times=1);
2391  bool sendBack(const std::string &data,const std::string &header="",const std::string &code="200 OK",const std::string &header1="");
2404  bool sendBack(const char *data,const size_t &length,const char *header="\0",const char *code="200 OK\0",const char *header1="\0",const size_t &header_length=50);
2405  };
2410  {
2414  int fd;
2422  std::string locPara;
2426  std::string header;
2430  time_t HBTime=0;
2434  time_t response;
2438  size_t recv_length;
2446  std::string message="";
2450  bool fin;
2454  std::string mask;
2455  };
2456 
2460  struct TcpFDInf
2461  {
2465  int fd;
2469  std::string ip;
2473  std::string port;
2477  int status;
2481  std::string_view data;
2489  SSL* ssl;
2493  char *buffer;
2497  unsigned long p_buffer_now;
2498  //unsigned long p_request_now;
2506  std::deque<std::chrono::steady_clock::time_point> requestSpeedQueue;
2507  };
2508 
2512  struct QueueFD
2513  {
2517  int fd;
2521  bool close;
2522  };
2523 
2524 
2529  class TcpServer
2530  {
2531  protected:
2532  unsigned long buffer_size;
2533  int maxFD;
2535  //std::unordered_map<int,TcpFDInf> clientfd;
2536  //std::mutex lc1;
2538  int flag1=true;
2539  std::queue<QueueFD> *fdQueue;
2540  std::mutex *lq1;
2541  //std::condition_variable cv1;
2542  std::condition_variable *cv;
2544  std::mutex lco1;
2545  bool unblock;
2546  SSL_CTX *ctx=nullptr;
2547  bool TLS=false;
2548  //std::unordered_map<int,SSL*> tlsfd;
2549  //std::mutex ltl1;
2554  protected:
2555  bool allowRequest(const int &cclientfd);
2556  void connectionDetect();
2557  private:
2558  std::function<bool(TcpFDHandler &k,TcpFDInf &inf)> fc;
2559  int fd=-1;
2560  int port=-1;
2561  int flag=false;
2562  bool flag2=false;
2563  private:
2564  void epolll(const int &evsNum);
2565  virtual void consumer(const int &threadID);
2566  public:
2579  TcpServer(const int &maxFD=10000,const bool &security_open=true,const int &connectionNumLimit=20,const int &connectionRateLimit=6,const int &buffer_size=8,const int &requestRate=12,const int &checkFrequency=1,const int &connectionTimeout=1800):maxFD(maxFD),connectionLimiter(connectionNumLimit,connectionRateLimit),security_open(security_open),buffer_size(buffer_size*1024),requestRate(requestRate),checkFrequency(checkFrequency),connectionTimeout(connectionTimeout){}
2586  bool startListen(const int &port,const int &threads=8);
2613  bool setTLS(const char *cert,const char *key,const char *passwd,const char *ca);
2617  void redrawTLS();
2628  bool setFunction(std::function<bool(TcpFDHandler &k,TcpFDInf &inf)> fc){this->fc=fc;return true;}
2634  bool stopListen();
2641  bool close();
2647  bool close(const int &fd);
2648  public:
2653  bool isListen(){return flag;}
2658  SSL* getSSL(const int &fd);
2664  };
2665 
2666 
2667 
2668 
2673  class HttpServer:public TcpServer
2674  {
2675  private:
2676  std::function<bool(const HttpRequestInformation &inf,HttpServerFDHandler &k)> fc;
2677  private:
2678  void consumer(const int &threadID);
2679  public:
2692  HttpServer(const int &maxFD=10000000,const bool &security_open=true,const int &connectionNumLimit=20,const int &connectionRateLimit=6,const int &buffer_size=8,const int &requestRate=12,const int &checkFrequency=1,const int &connectionTimeout=60):TcpServer(maxFD,security_open,connectionNumLimit,connectionRateLimit,buffer_size,requestRate,checkFrequency,connectionTimeout){}
2703  bool setFunction(std::function<bool(const HttpRequestInformation &inf,HttpServerFDHandler &k)> fc){this->fc=fc;return true;}
2704  };
2710  {
2711  public:
2719  void setFD(const int &fd,SSL *ssl=nullptr,const bool &flag1=false,const bool &flag2=true){TcpFDHandler::setFD(fd,ssl,flag1,flag2);}
2741  int getMessage(TcpFDInf &Tcpinf,WebSocketFDInformation &Websocketinf,const int &ii=1);
2756  bool sendMessage(const std::string &msg,const std::string &type="0001");
2757 
2758  };
2759 
2764  {
2765  private:
2766  std::unordered_map<int,WebSocketFDInformation> wbclientfd;
2767  std::mutex lwb;
2768  std::function<bool(const std::string &msg,WebSocketServer &k,const WebSocketFDInformation &inf)> fc=[](const std::string &message,WebSocketServer &k,const WebSocketFDInformation &inf)->bool
2769  {std::cout<<"收到: "<<message<<std::endl;return true;};
2770  std::function<bool(const WebSocketFDInformation &k)> fcc=[](const WebSocketFDInformation &k)
2771  {return true;};
2772  std::function<void(const WebSocketFDInformation &inf,WebSocketServer &k)> fccc=[](const WebSocketFDInformation &inf,WebSocketServer &k)
2773  {
2774 
2775  };
2776  int seca=20*60;
2777  int secb=30;
2778  bool HBflag;
2779  bool HBflag1;
2780  private:
2781  void consumer(const int &threadID);
2782 
2783  void closeAck(const int &fd,const std::string &closeCodeAndMessage);
2784  void closeAck(const int &fd,const short &code=1000,const std::string &message="bye");
2785  void HB();
2786  bool closeWithoutLock(const int &fd,const std::string &closeCodeAndMessage);
2787  bool closeWithoutLock(const int &fd,const short &code=1000,const std::string &message="bye");
2788  public:
2799  WebSocketServer(const int &maxFD=10000000,const bool &security_open=true,const int &connectionNumLimit=20,const int &connectionRateLimit=6,const int &buffer_size=8,const int &requestRate=12):TcpServer(maxFD,security_open,connectionNumLimit,connectionRateLimit,buffer_size,requestRate,-1,-1){}
2808  void setStartFunction(std::function<void(const WebSocketFDInformation &inf,WebSocketServer &k)> fccc){this->fccc=fccc;}
2818  void setJudgeFunction(std::function<bool(const WebSocketFDInformation &k)> fcc){this->fcc=fcc;}
2830  void setFunction(std::function<bool(const std::string &msg,WebSocketServer &k,const WebSocketFDInformation &inf)> fc){this->fc=fc;}
2835  void setTimeOutTime(const int &seca){this->seca=seca*60;}
2841  void setHBTimeOutTime(const int &secb){this->secb=secb;}
2853  bool close(const int &fd,const std::string &closeCodeAndMessage);
2873  bool close(const int &fd,const short &code=1000,const std::string &message="bye");
2897  bool sendMessage(const int &fd,const std::string &msg,const std::string &type="0001"){WebSocketServerFDHandler k;k.setFD(fd,getSSL(fd),unblock);return k.sendMessage(msg,type);}
2902  bool close();
2909  bool startListen(const int &port,const int &threads=8)
2910  {
2911  std::thread(&WebSocketServer::HB,this).detach();
2912  return TcpServer::startListen(port,threads);
2913  }
2935  void sendMessage(const std::string &msg,const std::string &type="0001");
2940  ~WebSocketServer(){HBflag1=false; while(HBflag); }
2941  };
2942 
2948  {
2949  protected:
2950  int fd=-1;
2951  bool flag1=false;
2952  bool flag2=false;
2953  int sec=-1;
2954  public:
2962  void setFD(const int &fd,const bool &flag1=false,const int &sec=-1,const bool &flag2=false);
2967  void blockSet(const int &sec=-1);
2971  void unblockSet();
2976  bool multiUseSet();
2980  int getFD(){return fd;}
2985  void close(const bool &cle=true);
3004  int sendData(const std::string &data,const std::string &ip,const int &port,const bool &block=true);
3024  int sendData(const char *data,const uint64_t &length,const std::string &ip,const int &port,const bool &block=true);
3039  int recvData(std::string &data,const uint64_t &length,std::string &ip,int &port);
3054  int recvData(char *data,const uint64_t &length,std::string &ip,int &port);
3055 
3056  };
3061  {
3062  public:
3068  UdpClient(const bool &flag1=false,const int &sec=-1);
3074  bool createFD(const bool &flag1=false,const int &sec=-1);
3079  };
3084  {
3085  public:
3092  UdpServer(const int &port,const bool &flag1=false,const int &sec=-1,const bool &flag2=true);
3099  bool createFD(const int &port,const bool &flag1=false,const int &sec=-1,const bool &flag2=true);
3104  };
3105  }
3111  namespace system
3112  {
3121  {
3122  public:
3130  static std::string language;
3131  private:
3132  static void signalterminated(){std::cout<<"未捕获的异常终止"<<std::endl;if(system::ServerSetting::logfile!=nullptr){if(system::ServerSetting::language=="Chinese")system::ServerSetting::logfile->writeLog("未捕获的异常终止");else system::ServerSetting::logfile->writeLog("end for uncaught exception");}kill(getpid(),15);}
3133  static void signalSIGSEGV(int signal){std::cout<<"SIGSEGV"<<std::endl;if(system::ServerSetting::logfile!=nullptr){if(system::ServerSetting::language=="Chinese")system::ServerSetting::logfile->writeLog("信号SIGSEGV");else system::ServerSetting::logfile->writeLog("signal SIGSEGV");}kill(getpid(),15);}
3134  static void signalSIGABRT(int signal){std::cout<<"SIGABRT"<<std::endl;if(system::ServerSetting::logfile!=nullptr){if(system::ServerSetting::language=="Chinese")system::ServerSetting::logfile->writeLog("信号SIGABRT");else system::ServerSetting::logfile->writeLog("signal SIGABRT");}kill(getpid(),15);}
3135  public:
3144  static void setExceptionHandling();
3152  static void setLogFile(file::LogFile *logfile=nullptr,const std::string &language="");
3158  static void init(file::LogFile *logfile=nullptr,const std::string &language="");
3159  };
3160 
3169  class csemp
3170  {
3171  private:
3177  union semun
3178  {
3179  int val;
3180  struct semid_ds *buf;
3181  unsigned short *arry;
3182  };
3183 
3184  int m_semid;
3185  short m_sem_flg;
3186 
3187  csemp(const csemp &) = delete;
3188  csemp &operator=(const csemp &) = delete;
3189 
3190  public:
3194  csemp():m_semid(-1){}
3195 
3206  bool init(key_t key, unsigned short value = 1, short sem_flg = SEM_UNDO);
3207 
3216  bool wait(short value = -1);
3217 
3226  bool post(short value = 1);
3227 
3233  int getvalue();
3234 
3242  bool destroy();
3243 
3247  ~csemp();
3248  };
3249 
3253  #define MAX_PROCESS_NAME 100
3254 
3257  #define MAX_PROCESS_INF 1000
3258 
3261  #define SHARED_MEMORY_KEY 0x5095
3262 
3265  #define SHARED_MEMORY_LOCK_KEY 0x5095
3266 
3270  struct ProcessInf
3271  {
3275  pid_t pid;
3279  time_t lastTime;
3287  char argv0[20];
3291  char argv1[20];
3295  char argv2[20];
3296  };
3297 
3305  class HBSystem
3306  {
3307  private:
3308 
3309  static ProcessInf *p;
3310  static csemp plock;
3311  static bool isJoin;
3312  public:
3321  bool join(const char *name,const char *argv0="",const char *argv1="",const char *argv2="");
3326  bool renew();
3330  static void list();
3337  static bool HBCheck(const int &sec);
3342  bool deleteFromHBS();
3347  ~HBSystem();
3348  };
3349 
3353  class Process
3354  {
3355  public:
3356 
3357 
3378  template<class... Args>
3379  static bool startProcess(const std::string &name,const int &sec=-1,Args ...args)
3380  {
3381  std::vector<const char *> paramList={args...,nullptr};
3382  if(sec==-1)
3383  {
3384  pid_t pid=fork();
3385  if(pid==-1)
3386  return false;
3387  if(pid>0)
3388  return true;
3389  else
3390  {
3391  execv(name.c_str(),const_cast<char* const*>(paramList.data()));
3392  return false;
3393  }
3394  }
3395  for(int ii=1;ii<=64;ii++)
3396  signal(ii,SIG_IGN);
3397  pid_t pid=fork();
3398  if(pid==-1)
3399  return false;
3400  if(pid>0)
3401  {
3402  return true;
3403  }
3404  else
3405  {
3406  signal(SIGCHLD,SIG_DFL);
3407  signal(15,SIG_DFL);
3408  while(1)
3409  {
3410  pid=fork();
3411  if(fork()==0)
3412  {
3413  execv(name.c_str(),const_cast<char* const*>(paramList.data()));
3414  exit(0);
3415  }
3416  else if(pid>0)
3417  {
3418  int sts;
3419  wait(&sts);
3420  sleep(sec);
3421  }
3422  else
3423  continue;
3424  }
3425  }
3426  }
3448  template<class Fn,class... Args>
3449  static typename std::enable_if<!std::is_convertible<Fn, std::string>::value, bool>::type
3450  startProcess(Fn&& fn,const int &sec=-1,Args &&...args)
3451  {
3452  if(sec==-1)
3453  {
3454  pid_t pid=fork();
3455  if(pid==-1)
3456  return false;
3457  if(pid>0)
3458  return true;
3459  else
3460  {
3461  auto f=std::bind(std::forward<Fn>(fn),std::forward<Args>(args)...);
3462  f();
3463  return true;
3464  }
3465  }
3466  for(int ii=1;ii<=64;ii++)
3467  signal(ii,SIG_IGN);
3468  pid_t pid=fork();
3469  if(pid==-1)
3470  return false;
3471  if(pid>0)
3472  {
3473  return true;
3474  }
3475  else
3476  {
3477  signal(SIGCHLD,SIG_DFL);
3478  signal(15,SIG_DFL);
3479  while(1)
3480  {
3481  pid=fork();
3482  if(pid==0)
3483  {
3484  auto f=std::bind(std::forward<Fn>(fn),std::forward<Args>(args)...);
3485  f();
3486  return true;
3487  }
3488  else if(pid>0)
3489  {
3490  int sts;
3491  wait(&sts);
3492  sleep(sec);
3493  }
3494  else
3495  continue;
3496  }
3497  }
3498  }
3499  };
3500  }
3501 
3502 }
3503 
3504 
3505 #endif
3506 
struct HttpRequestInformation HttpInf
保存http/https协议的信息
Definition: sttnet.h:2485
static std::string & transfer_websocket_key(std::string &str)
生成 WebSocket 握手响应中的 Sec-WebSocket-Accept 字段值。
time_t response
上次收到信息的时间
Definition: sttnet.h:2434
限制同一ip连接的类
Definition: sttnet.h:1726
int sendData(const std::string &data, const std::string &ip, const int &port, const bool &block=true)
向目标发送字符串数据。
std::chrono::duration< uint64_t > Seconds
Definition: sttnet.h:817
bool close()
关闭监听和所有连接
bool operator>(const Duration &b)
判断当前时间间隔是否大于另一个时间间隔。
Definition: sttnet.h:551
int getServerPort()
返回已连接的客户端的端口 return 已连接的服务端的端口
Definition: sttnet.h:1996
SSL * getSSL()
获取该对象的加密SSL句柄
Definition: sttnet.h:1798
void setStartFunction(std::function< void(const WebSocketFDInformation &inf, WebSocketServer &k)> fccc)
设置websocket连接成功后就执行的回调函数 注册一个回调函数
Definition: sttnet.h:2808
int checkFrequency
Definition: sttnet.h:2551
bool isStart()
返回本对象计时状态
Definition: sttnet.h:923
bool fin
fin的状态
Definition: sttnet.h:2450
int fd
Definition: sttnet.h:1768
bool startTiming()
开始计时
bool connect(const std::string &ip, const int &port)
向服务端发起tcp连接
std::string header
握手阶段的Http/Https请求头
Definition: sttnet.h:2426
TcpFDInf * clientfd
Definition: sttnet.h:2537
~WebSocketClient()
WebSocketClient类的析构函数,销毁对象时候会优雅退出断开连接
std::string getServerIp()
如果连接到了服务器 返回服务器ip
Definition: sttnet.h:2305
bool unblock
Definition: sttnet.h:2545
void setFD(const int &fd, SSL *ssl=nullptr, const bool &flag1=false, const bool &flag2=true)
初始化对象,传入套接字等参数
Definition: sttnet.h:2367
tcp协议的套接字操作类
Definition: sttnet.h:1765
消息队列元素的结构体
Definition: sttnet.h:2512
bool readLine(std::string &data, const int linePos)
读取单行
bool writeLog(const std::string &data)
写一行日志
static size_t get_file_size(const std::string &fileName)
获取文件大小
static std::string createJson(T1 first, T2 second, Args...args)
创建多个键值对组成的 JSON 字符串(递归变参模板)。
Definition: sttnet.h:1634
std::string & readAll(std::string &data)
读取全部
表示时间间隔的结构体,支持天、小时、分钟、秒和毫秒粒度。
Definition: sttnet.h:519
std::string & readAllC(std::string &data)
读取全部
WebSocket协议的操作类 仅传入套接字,然后使用这个类进行WebSocket的操作
Definition: sttnet.h:2709
static void setLogFile(file::LogFile *logfile=nullptr, const std::string &language="")
设置日志系统的日志文件对象 传入的日志文件对象如果是没初始化的空的对象,系统自动在程序目录下生成server_log文件夹并且根据当前时间生成一个日志文件记录服务程序的网络通信 如果传入的日志文件对象是...
static void init(file::LogFile *logfile=nullptr, const std::string &language="")
执行setExceptionHandling和setLogFile两个函数,完成初始化信号和日志系统
bool isConnect()
判断对象是否有套接字绑定
Definition: sttnet.h:1821
时间操作、运算、计时的类
Definition: sttnet.h:834
bool createFD(const int &port, const bool &flag1=false, const int &sec=-1, const bool &flag2=true)
销毁原来的套接字,重新创建一个服务端
int getFD()
获取该对象的套接字
Definition: sttnet.h:1793
static long getRandomNumber(const long &a, const long &b)
生成一个随机整数
std::string_view locPara
url中的路径和参数
Definition: sttnet.h:2329
static int & str16toInt(const std::string_view &ori_str, int &result, const int &i=-1)
16进制数字的字符串表示转化为10进制int类型数字
bool deleteLine(const int &linePos=0)
删除行
void waitAndQuit(const time::Duration &t=time::Duration{0, 0, 0, 10, 10})
开始退出epoll倒计时,直到套接字有新的消息 如果套接字倒计时结束还没有新的消息,那么退出epoll
Definition: sttnet.h:2183
bool connect(const std::string &url, const int &min=20)
连接到websocket服务器
bool operator<=(const Duration &b)
判断当前时间间隔是否小于等于另一个时间间隔。
Definition: sttnet.h:615
static std::string & sha11(const std::string &ori_str, std::string &result)
计算输入字符串的 SHA-1 哈希值,并以十六进制字符串形式返回。
Http/HttpServer 服务端操作类
Definition: sttnet.h:2673
int recvData(std::string &data, const uint64_t &length, std::string &ip, int &port)
接收一次数据到string字符串容器
int sendData(const std::string &data, const bool &block=true)
向已连接的套接字发送字符串数据。
bool sendMessage(const int &fd, const std::string &msg, const std::string &type="0001")
发送 WebSocket 消息给某一个客户端
Definition: sttnet.h:2897
std::mutex * lq1
Definition: sttnet.h:2540
std::string body_chunked
请求体(chunked)
Definition: sttnet.h:2349
pid_t pid
进程id
Definition: sttnet.h:3275
bool allow(const std::string &ip)
根据连接数和速度判断是否允许某ip的连接
WebSocketClient(const bool &TLS=false, const char *ca="", const char *cert="", const char *key="", const char *passwd="")
WebSocketClient类的构造函数
Definition: sttnet.h:2220
Duration operator+(const Duration &b)
将两个时间间隔相加。
Definition: sttnet.h:631
void setFunction(std::function< bool(const std::string &msg, WebSocketServer &k, const WebSocketFDInformation &inf)> fc)
设置收到客户端消息后的回调函数 注册一个回调函数
Definition: sttnet.h:2830
Duration(long long a, int b, int c, int d, int e)
构造函数,传入天,时,分,秒,毫秒
Definition: sttnet.h:544
bool post(short value=1)
V 操作(释放),尝试将信号量值加上 value。
int getFD()
返回fd
Definition: sttnet.h:2980
static unsigned long & htonl_ntohl_64(unsigned long &data)
将 64 位无符号整数的字节序反转(大端 &lt;-&gt; 小端)。
bool stopListen()
停止监听
Duration endTiming()
停止计时
char argv1[20]
进程第二个参数
Definition: sttnet.h:3291
bool writeC(const char *data, const size_t &pos, const size_t &size)
写数据块
记录ip信息的结构体,比如连接数,连接速率等
Definition: sttnet.h:1716
bool postRequestFromFD(const int &fd, SSL *ssl, const std::string &url, const std::string &body="", const std::string &header="", const std::string &header1="Connection: keep-alive", const int &sec=2)
发送一个POST请求到服务器
std::string loc
文件路径
Definition: sttnet.h:113
unsigned long p_buffer_now
接收空间位置指针
Definition: sttnet.h:2497
bool isConnect()
返回对象的连接状态
Definition: sttnet.h:2001
std::ostream & operator<<(std::ostream &os, const Duration &a)
将 Duration 对象以可读格式输出到流中。
int sec
Definition: sttnet.h:536
~TcpServer()
TcpServer 类的析构函数
Definition: sttnet.h:2663
double convertToMin()
将当前时间间隔转换为以“分钟”为单位的浮点数表示。
Definition: sttnet.h:738
int recvDataByLength(std::string &data, const uint64_t &length, const int &sec=2)
从已连接的套接字中阻塞接收指定长度的数据到字符串
static bool decryptSymmetric(const unsigned char *before, const size_t &length, const unsigned char *passwd, const unsigned char *iv, unsigned char *after)
AES-256-CBC模式对称解密函数
static std::string & generateMask_4(std::string &mask)
生成一个 32 位(4 字节)的随机掩码。
static long & toLong(const std::string_view &ori_str, long &result, const long &i=-1)
string转化为long类型
static std::string & getRandomStr_base64(std::string &str, const int &length)
生成一个规定长度的“Base64 字符集内的伪随机字符串”,并在末尾用 &#39;=&#39; 补齐至符合 Base64 字符串格式
static float & toFloat(const std::string &ori_str, float &result, const float &i=-1)
string转化为float类型
unsigned long buffer_size
Definition: sttnet.h:2532
std::string getServerPort()
如果连接到了服务器 返回服务器端口
Definition: sttnet.h:2310
bool closeFile(const bool &del=false)
关闭对象打开的日志文件
TcpClient(const bool &TLS=false, const char *ca="", const char *cert="", const char *key="", const char *passwd="")
TcpClient类的构造函数
std::string message
消息
Definition: sttnet.h:2446
bool close
是不是关闭消息
Definition: sttnet.h:2521
HttpServer(const int &maxFD=10000000, const bool &security_open=true, const int &connectionNumLimit=20, const int &connectionRateLimit=6, const int &buffer_size=8, const int &requestRate=12, const int &checkFrequency=1, const int &connectionTimeout=60)
构造函数,默认是启用安全模块。限制一个ip最大连接为20;同一个ip每秒最快连接速度为6
Definition: sttnet.h:2692
void setTimeOutFunction(std::function< bool(const int &fd)> fcTimeOut)
设置epoll超时后出发的回调函数 注册一个回调函数
Definition: sttnet.h:2166
bool flag2
Definition: sttnet.h:1770
Duration recoverForm(const long long &t)
从给定的毫秒数恢复为标准的天-时-分-秒-毫秒格式。
Definition: sttnet.h:769
static std::string createArray(T first)
创建只包含一个元素的 JSON 数组字符串。
Definition: sttnet.h:1654
void close(const bool &cle=true)
置空对象,关闭套接字
UdpClient(const bool &flag1=false, const int &sec=-1)
构造函数
负责字符串和数字的转化
Definition: sttnet.h:1444
~EpollSingle()
EpollSingle的析构函数 调用eldListen阻塞退出epoll.
Definition: sttnet.h:2188
int threads
记录文件正在被多少个线程使用
Definition: sttnet.h:117
static double & toDouble(const std::string &ori_str, double &result, const double &i=-1)
string转化为double类型
static std::string language
系统的日志系统的语言选择,默认为English
Definition: sttnet.h:3130
static std::string & getPreciesFloat(const float &number, const int &bit, std::string &str)
将浮点数格式化为指定小数位数的字符串表示。
负责进程心跳监控,调度的类 用于监控服务进程,保证服务进程持续有效运行 进程结束后,0x5095这一块共享内存和信号量都没有删掉 目前只支持最多三个参数的进程加入监控 应该自己手动在程序编写加入心跳监控...
Definition: sttnet.h:3305
bool flag1
Definition: sttnet.h:1769
void startListen(const int &fd, const bool &flag=true, const time::Duration &dt=time::Duration{0, 0, 20, 0, 0})
开始监听
static bool createFile(const std::string &filePath, const mode_t &mode=0666)
新建一个文件
Duration checkTime()
计时过程中检查时间
void format()
格式化数据
size_t getFileSize()
获取二进制打开的文件的大小
Definition: sttnet.h:257
bool deleteAllC()
删除全部
Tcp服务端类
Definition: sttnet.h:2529
static std::string createArray(T first, Args...args)
创建多个元素组成的 JSON 数组字符串(递归变参模板)。
Definition: sttnet.h:1672
int fd
套接字
Definition: sttnet.h:2517
static std::mutex l1
Definition: sttnet.h:139
bool startListen(const int &port, const int &threads=8)
打开Tcp服务器监听程序
std::string port
客户端端口
Definition: sttnet.h:2473
UDP操作的类 传入套接字进行UDP协议的操作
Definition: sttnet.h:2947
void blockSet(const int &sec=-1)
设置对象中的套接字为阻塞模式
int recvData(std::string &data, const uint64_t &length)
从已连接的套接字中接收一次数据到string字符串容器
bool flag1
Definition: sttnet.h:2951
size_t getSize1()
获取二进制打开的文件在内存中的大小
Definition: sttnet.h:266
static std::enable_if<!std::is_convertible< Fn, std::string >::value, bool >::type startProcess(Fn &&fn, const int &sec=-1, Args &&...args)
通过函数创建子进程(可选择是否定时重启)
Definition: sttnet.h:3450
~File()
析构函数
Definition: sttnet.h:224
static std::string_view & get_location_str(const std::string_view &ori_str, std::string_view &str)
提取 URL 中 path 和 query 部分。
HttpClient(const bool &TLS=false, const char *ca="", const char *cert="", const char *key="", const char *passwd="")
HttpClient类的构造函数
Definition: sttnet.h:2028
TcpServer(const int &maxFD=10000, const bool &security_open=true, const int &connectionNumLimit=20, const int &connectionRateLimit=6, const int &buffer_size=8, const int &requestRate=12, const int &checkFrequency=1, const int &connectionTimeout=1800)
构造函数,默认是启用安全模块。限制一个ip最大连接为20;同一个ip每秒最快连接速度为6
Definition: sttnet.h:2579
static std::string_view & getLocPara(const std::string_view &url, std::string_view &locPara)
提取 URL 的 path 部分(不含 query)。
WebSocketServer服务端操作类
Definition: sttnet.h:2763
std::string locPara
握手阶段的Http/Https路径和参数
Definition: sttnet.h:2422
解析,响应Http/https请求的操作类 仅传入套接字,然后使用这个类进行Http的操作
Definition: sttnet.h:2357
int getMessage(TcpFDInf &Tcpinf, WebSocketFDInformation &Websocketinf, const int &ii=1)
获取一条websocket消息
bool chgLineC(const std::string &data, const int &linePos=0)
修改行
std::string_view body
请求体
Definition: sttnet.h:2345
bool operator<(const Duration &b)
判断当前时间间隔是否小于另一个时间间隔。
Definition: sttnet.h:567
bool isConnect()
返回连接状态
Definition: sttnet.h:2295
static bool HBCheck(const int &sec)
检查心跳监控系统 如果上一次心跳更新的时间和现在的时候相差大于等于sec秒,则杀死进程 先发送信号15杀死进程 如果8秒后进程还存在 则发送信号9强制杀死
负责加密,解密和哈希
Definition: sttnet.h:994
负责浮点数精度处理
Definition: sttnet.h:1171
static std::string & sha1(const std::string &ori_str, std::string &result)
计算输入字符串的 SHA-1 哈希值(原始二进制形式)。
SSL_CTX * ctx
Definition: sttnet.h:2546
bool deleteLogByTime(const std::string &date1="1", const std::string &date2="2")
删除指定时间区间内的日志
std::string & read(std::string &data, const int &linePos, const int &num)
读取行
static void list()
输出心跳监控系统的所有进程的信息
static std::string & jsonToUTF8(const std::string &input, std::string &output)
将 JSON 字符串中的 转换为 UTF-8 字符。
负责二进制数据,字符串之间的转化
Definition: sttnet.h:1049
static unsigned long & bitToNumber(const std::string &input, unsigned long &result)
将字符串转换为二进制,再转换为对应数值。
json数据操作类
Definition: sttnet.h:1575
int maxFD
Definition: sttnet.h:2533
static std::string & generateMask_4(std::string &mask)
生成一个 32 位(4 字节)的随机掩码。
static Duration & calculateTime(const std::string &time1, const std::string &time2, Duration &result, const std::string &format1=ISO8086A, const std::string &format2=ISO8086A)
计算两个用字符串表示的时间相减的差值
static Json::Value toJsonArray(const std::string &str)
解析 JSON 字符串为 Json::Value。
bool renew()
更新当前进程的心跳
~csemp()
析构函数,不自动销毁信号量。
ConnectionLimiter(const int &connectionLimit=20, const int &connectionRateLimit=6)
ConnectionLimiter 的构造函数
Definition: sttnet.h:1739
进程信息的结构体
Definition: sttnet.h:3270
std::string & readC(std::string &data, const int &linePos, const int &num)
读取行
static std::unordered_map< std::string, FileThreadLock > fl2
Definition: sttnet.h:140
void resetCTX(const bool &TLS=false, const char *ca="", const char *cert="", const char *key="", const char *passwd="")
重新或第一次设置TLS加密参数
bool getRequest(const std::string &url, const std::string &header="", const std::string &header1="Connection: keep-alive", const int &sec=-1)
发送一个GET请求到服务器
std::string_view type
请求类型
Definition: sttnet.h:2325
static std::string base64_encode(const std::string &input)
对字符串进行 Base64 编码。
bool deleteLineC(const int &linePos=0)
删除行
bool multiUseSet()
设置SO_REUSEADDR模式
#define MAX_PROCESS_NAME
定义MAX_PROCESS_NAME这个宏为100,意思是进程信息中的进程名字长度不超过100个字节
Definition: sttnet.h:3253
void setJudgeFunction(std::function< bool(const WebSocketFDInformation &k)> fcc)
设置websocket握手阶段的检查函数,只有检查通过才执行后续握手 注册一个回调函数
Definition: sttnet.h:2818
static std::string createHeader(const std::string &first, const std::string &second)
创建一个 HTTP 请求头字段字符串。
int getvalue()
获取信号量当前的值。
tcp协议客户端操作类
Definition: sttnet.h:1926
负责Http字符串和URL解析 包括从 URL 或请求报文中提取参数、IP、端口、请求头字段等功能。
Definition: sttnet.h:1226
double convertToHour()
将当前时间间隔转换为以“小时”为单位的浮点数表示。
Definition: sttnet.h:728
csemp()
构造函数,初始化内部状态。
Definition: sttnet.h:3194
time_t lastTime
进程最后一次心跳时间,是时间戳
Definition: sttnet.h:3279
long long day
Definition: sttnet.h:524
static int & getPort(const std::string &url, int &port)
从 URL 中提取端口号。
int sec
Definition: sttnet.h:2953
static void setExceptionHandling()
设置系统的信号
bool chgLine(const std::string &data, const int &linePos=0)
修改行
static std::string & strto16(const std::string &ori_str, std::string &result)
将普通字符串转化为对应的十六进制表示字符串(hex string)。
void redrawTLS()
撤销TLS加密,ca证书等
std::string_view loc
url中的路径
Definition: sttnet.h:2333
bool close()
如果对象有套接字连接,关闭和释放这个连接和套接字,并且重新新建一个套接字。
std::deque< std::chrono::steady_clock::time_point > connectionTimeQueue
Definition: sttnet.h:1719
std::mutex lock
此文件的锁
Definition: sttnet.h:121
int min
Definition: sttnet.h:532
std::queue< QueueFD > * fdQueue
Definition: sttnet.h:2539
void endListenWithSignal()
发送结束epoll的信号
Definition: sttnet.h:2177
static float & getValidFloat(float &number, const int &bit)
根据数值动态调整小数精度,保留指定数量的有效数字。
保存HTTP/HTTPS请求信息的结构体
Definition: sttnet.h:2320
bool unlockMemory(const bool &rec=false)
把数据从内存写入磁盘
SSL * ssl
Definition: sttnet.h:1771
Duration operator-(const Duration &b)
计算两个时间间隔的差值(当前对象减去参数 b)。
Definition: sttnet.h:675
bool readLineC(std::string &data, const int linePos)
读取单行
static bool & toBool(const std::string_view &ori_str, bool &result)
string转化为bool类型
static char & toBit(const std::string &input, char &result)
将最多 8 位的 &quot;01&quot; 字符串压缩成 1 个字节(char)。
bool createFD(const bool &flag1=false, const int &sec=-1)
销毁原来的套接字,重新创建一个客户端
char argv2[20]
进程第三个参数
Definition: sttnet.h:3295
UdpServer(const int &port, const bool &flag1=false, const int &sec=-1, const bool &flag2=true)
构造函数
static std::string toString(const Json::Value &val)
将 Json::Value 转换为字符串。
bool write(const char *data, const size_t &pos, const size_t &size)
写数据块
bool allowRequest(const int &cclientfd)
bool TLS
Definition: sttnet.h:2547
double convertToSec()
将当前时间间隔转换为以“秒”为单位的浮点数表示。
Definition: sttnet.h:748
static std::string base64_decode(const std::string &input)
对 Base64 编码的字符串进行解码。
std::string getUrl()
如果连接到了服务器 返回url
Definition: sttnet.h:2300
static file::LogFile * logfile
系统的日志系统的读写日志对象的指针
Definition: sttnet.h:3126
size_t recv_length
待接收的长度
Definition: sttnet.h:2438
static std::string createHeader(const std::string &first, const std::string &second, Args...args)
递归构造多个 HTTP 请求头字段。
Definition: sttnet.h:1416
用epoll监听单个句柄
Definition: sttnet.h:2107
static std::string & transfer_websocket_key(std::string &str)
生成 WebSocket 握手响应中的 Sec-WebSocket-Accept 字段值。
std::string_view header
请求头
Definition: sttnet.h:2341
int consumerNum
Definition: sttnet.h:2543
bool getRequestFromFD(const int &fd, SSL *ssl, const std::string &url, const std::string &header="", const std::string &header1="Connection: keep-alive", const int &sec=2)
从tcp套接字发送一个GET请求到服务器
int requestRate
Definition: sttnet.h:2550
bool sendMessage(const std::string &message, const std::string &type="0001")
发送 WebSocket 消息
bool flag3
如果sendData的block=true,如果发送过程中连接断开,这个标志位会置为true
Definition: sttnet.h:1777
bool lockMemory()
把数据从磁盘读入内存
bool sendMessage(const std::string &msg, const std::string &type="0001")
发送一条websocket信息
static std::string & bitOutput(char input, std::string &result)
将单个字符转换为其对应的 8 位二进制字符串。
void setFD(const int &fd, SSL *ssl=nullptr, const bool &flag1=false, const bool &flag2=true)
初始化对象,传入套接字等参数
Definition: sttnet.h:2719
FileThreadLock(const std::string &loc, const int &threads)
这个结构体的构造函数
Definition: sttnet.h:127
bool operator>=(const Duration &b)
判断当前时间间隔是否大于等于另一个时间间隔。
Definition: sttnet.h:599
保存客户端WS/WSS请求信息的结构体
Definition: sttnet.h:2409
std::condition_variable * cv
Definition: sttnet.h:2542
std::string_view para
url中的参数
Definition: sttnet.h:2337
bool wait(short value=-1)
P 操作(等待),尝试将信号量值减去 value。
bool destroy()
销毁当前信号量。
int fd
Definition: sttnet.h:2950
static bool copy(const std::string &sourceFile, const std::string &objectFile)
复制文件
std::string getFileName()
获取打开的文件名字
Definition: sttnet.h:239
~TcpClient()
TcpClient的析构函数,会关闭释放套接字和其连接
Definition: sttnet.h:1985
static std::string_view & getPara(const std::string_view &url, std::string_view &para)
获取 URL 中的查询参数字符串(包括 ?)。
void setEndFunction(std::function< void(const int &fd)> fcEnd)
设置epoll退出前的回调函数 注册一个回调函数
Definition: sttnet.h:2156
std::string body
服务器返回响应体
Definition: sttnet.h:2101
static std::string & getIP(const std::string &url, std::string &IP)
从 URL 中提取主机 IP 或域名。
~HBSystem()
HBSystem的析构函数
负责websocket协议有关字符串的操作
Definition: sttnet.h:1425
Duration getDt()
获取上一次计时的时间
Definition: sttnet.h:918
数据编码解码,掩码处理等
Definition: sttnet.h:1513
int findC(const std::string &targetString, const int linePos=1)
查找行
~UdpServer()
析构函数,对象生命结束会会关闭套接字
Definition: sttnet.h:3103
HttpServerFDHandler k
处理http的类
Definition: sttnet.h:2502
bool operator==(const Duration &b)
判断当前时间间隔是否等于另一个时间间隔。
Definition: sttnet.h:583
bool appendLineC(const std::string &data, const int &linePos=0)
插入行
std::deque< std::chrono::steady_clock::time_point > requestSpeedQueue
用于请求限速的队列,实现滑动窗口算法
Definition: sttnet.h:2506
static bool createDir(const std::string &ddir, const mode_t &mode=0775)
新建一个目录
int message_type
消息类型
Definition: sttnet.h:2442
bool deleteFromHBS()
把当前进程从心跳系统中删除
bool join(const char *name, const char *argv0="", const char *argv1="", const char *argv2="")
把进程加入到心跳系统
void close(const bool &cle=true)
关闭对象
char * buffer
接收空间指针
Definition: sttnet.h:2493
static unsigned long & bitStrToNumber(const std::string &input, unsigned long &result)
将 &quot;01&quot; 字符串(二进制字符串)转换为无符号整数。
记录文件和线程关系的结构体
Definition: sttnet.h:108
static size_t get_split_str(const std::string_view &ori_str, std::string_view &str, const std::string_view &a, const std::string_view &b, const size_t &pos=0)
从原始字符串中提取两个标记之间的子串。
int status
当前fd的状态,用于保存处理机逻辑
Definition: sttnet.h:2477
bool init(key_t key, unsigned short value=1, short sem_flg=SEM_UNDO)
初始化信号量。
int sec
Definition: sttnet.h:1772
time_t HBTime
发送心跳的时间(没有发送过就填0) (检查完又要清空为0)
Definition: sttnet.h:2430
static bool convertFormat(std::string &timeStr, const std::string &oldFormat, const std::string &newFormat=ISO8086A)
转化时间字符串的格式
初始化服务系统的类
Definition: sttnet.h:3120
~UdpClient()
析构函数,对象生命结束会会关闭套接字
Definition: sttnet.h:3078
bool close()
关闭监听和所有已连接的套接字
bool deleteAll()
删除全部
uint64_t getFileLine()
获取打开的文件的行数
Definition: sttnet.h:248
void setFD(const int &fd, const bool &flag1=false, const int &sec=-1, const bool &flag2=false)
设置fd
bool isOpen()
判断对象是否打开了文件
Definition: sttnet.h:229
int flag1
Definition: sttnet.h:2538
bool isReturn()
获取服务器返回响应状态
Definition: sttnet.h:2093
std::string_view data
保存收到的客户端传来的数据
Definition: sttnet.h:2481
int connectionNum
Definition: sttnet.h:1718
std::chrono::duration< uint64_t, std::milli > Milliseconds
Definition: sttnet.h:816
bool flag2
Definition: sttnet.h:2952
WebSocketServer(const int &maxFD=10000000, const bool &security_open=true, const int &connectionNumLimit=20, const int &connectionRateLimit=6, const int &buffer_size=8, const int &requestRate=12)
构造函数,默认是启用安全模块。限制一个ip最大连接为20;同一个ip每秒最快连接速度为6
Definition: sttnet.h:2799
static std::string & jsonFormatify(const std::string &a, std::string &b)
将格式化后的 JSON 字符串去除缩进、空格等变成紧凑格式。
std::string header
服务器返回响应头
Definition: sttnet.h:2097
bool openFile(const std::string &fileName, const bool &create=true, const int &multiple=0, const size_t &size=0, const mode_t &mode=0666)
打开文件
static std::string & maskCalculate(std::string &data, const std::string &mask)
使用给定的 4 字节掩码对字符串进行异或操作(XOR Masking)。
Websocket客户端操作的类 -如果需要重新设置TLS/Https加密的证书,目前需要销毁对象后重新构造 底层TCP默认是阻塞的
Definition: sttnet.h:2196
bool isBinary()
判断对象是否以二进制模式打开文件
Definition: sttnet.h:234
void blockSet(const int &sec=-1)
设置为阻塞模式
void setFD(const int &fd, SSL *ssl, const bool &flag1=false, const bool &flag2=false, const int &sec=-1)
传入套接字初始化对象
std::string getServerIP()
返回已连接的服务端的ip return 已连接的服务端的ip
Definition: sttnet.h:1991
int solveRequest(TcpFDInf &TcpInf, const unsigned long &buffer_size, const int &times=1)
解析Http/Https请求
static std::string & getPreciesDouble(const double &number, const int &bit, std::string &str)
将双精度浮点数格式化为指定小数位数的字符串表示。
封装 System V 信号量的同步工具类。
Definition: sttnet.h:3169
std::string mask
mask
Definition: sttnet.h:2454
bool openFile(const std::string &fileName, const std::string &timeFormat=ISO8086A, const std::string &contentFormat=" ")
打开一个日志文件
bool clearLog()
清空所有日志
负责大小端字节序转换
Definition: sttnet.h:1151
static bool encryptSymmetric(const unsigned char *before, const size_t &length, const unsigned char *passwd, const unsigned char *iv, unsigned char *after)
AES-256-CBC模式对称加密函数
~WebSocketServer()
WebSocketServer的析构函数
Definition: sttnet.h:2940
std::mutex che
Definition: sttnet.h:142
bool startListen(const int &port, const int &threads=8)
打开Websocket服务器监听程序
Definition: sttnet.h:2909
std::string getFileName()
获取对象打开的文件名
Definition: sttnet.h:956
udp服务端的操作类
Definition: sttnet.h:3083
double convertToDay()
将当前时间间隔转换为以“天”为单位的浮点数表示。
Definition: sttnet.h:718
bool isListen()
返回epoll监听状态
Definition: sttnet.h:2138
Http/Https客户端操作类
Definition: sttnet.h:2011
bool closeflag
true:发送了关闭帧 false:没有发送关闭帧
Definition: sttnet.h:2418
char argv0[20]
进程第一个参数
Definition: sttnet.h:3287
int fd
套接字fd
Definition: sttnet.h:2465
bool postRequest(const std::string &url, const std::string &body="", const std::string &header="", const std::string &header1="Connection: keep-alive", const int &sec=-1)
发送一个POST请求到服务器
bool security_open
Definition: sttnet.h:2553
bool setTLS(const char *cert, const char *key, const char *passwd, const char *ca)
启用 TLS 加密并配置服务器端证书与密钥
void formatC()
格式化数据
进程管理的静态工具类
Definition: sttnet.h:3353
static std::string_view & get_value_str(const std::string_view &ori_str, std::string_view &str, const std::string &name)
从 URL 查询参数中提取指定 key 的值。
bool sendBack(const std::string &data, const std::string &header="", const std::string &code="200 OK", const std::string &header1="")
发送Http/Https响应
static std::string_view & get_value_header(const std::string_view &ori_str, std::string_view &str, const std::string &name)
从 HTTP 请求头中提取指定字段的值。
static int getValue(const std::string &oriStr, std::string &result, const std::string &type="value", const std::string &name="a", const int &num=0)
提取 JSON 字符串中指定字段的值或嵌套结构。
int hour
Definition: sttnet.h:528
long long convertToMsec()
将当前时间间隔转换为总毫秒数。
Definition: sttnet.h:758
int connectionTimeout
Definition: sttnet.h:2552
void setFunction(std::function< bool(const int &fd)> fc)
设置epoll触发后的处理函数 注册一个回调函数
Definition: sttnet.h:2148
udp客户端的操作类
Definition: sttnet.h:3060
static int & toInt(const std::string_view &ori_str, int &result, const int &i=-1)
string转化为int类型
static std::string createJson(T1 first, T2 second)
创建仅包含一个键值对的 JSON 字符串。
Definition: sttnet.h:1614
保存Tcp客户端信息的结构体
Definition: sttnet.h:2460
static std::string jsonAdd(const std::string &a, const std::string &b)
将两个 JSON 字符串拼接为一个有效的 JSON(适用于对象或数组拼接)。
static bool compareTime(const std::string &time1, const std::string &time2, const std::string &format1=ISO8086A, const std::string &format2=ISO8086A)
比较两个时间字符串表示的时间的大小
security::ConnectionLimiter connectionLimiter
Definition: sttnet.h:2534
bool closeFile(const bool &del=false)
关闭已打开了的文件
bool appendLine(const std::string &data, const int &linePos=0)
插入行
std::string ip
客户端ip
Definition: sttnet.h:2469
bool isOpen()
获取对象是否打开日志文件的状态
Definition: sttnet.h:951
int fd
底层的socket套接字
Definition: sttnet.h:2414
void setHBTimeOutTime(const int &secb)
设置发送心跳后的等待时间
Definition: sttnet.h:2841
提供文件操作的静态函数工具类
Definition: sttnet.h:66
日志文件操作类
Definition: sttnet.h:932
读写磁盘文件的类
Definition: sttnet.h:136
int msec
毫秒
Definition: sttnet.h:540
std::mutex lco1
Definition: sttnet.h:2544
随机数,字符串生成相关
Definition: sttnet.h:1115
int find(const std::string &targetString, const int linePos=1)
查找行
bool setFunction(std::function< bool(const HttpRequestInformation &inf, HttpServerFDHandler &k)> fc)
设置一个收到Http/Https请求并成功解析后进行响应的回调函数 注册一个回调函数
Definition: sttnet.h:2703
static char & bitOutput_bit(char input, const int pos, char &result)
获取字符 input 的从左向右第 pos 位(二进制)并返回 &#39;1&#39; 或 &#39;0&#39;。
bool endListen()
结束epoll监听 会阻塞直到epoll退出完成
void unblockSet()
设置对象中的套接字为非阻塞模式
SSL * ssl
如果加密了,存放加密句柄
Definition: sttnet.h:2489
bool isListen()
返回对象的监听状态
Definition: sttnet.h:2653
bool setFunction(std::function< bool(TcpFDHandler &k, TcpFDInf &inf)> fc)
设置收到客户端消息后的回调函数 注册一个回调函数
Definition: sttnet.h:2628
bool multiUseSet()
设置对象中的套接字为SO_REUSEADDR模式
char name[MAX_PROCESS_NAME]
进程名字
Definition: sttnet.h:3283
static bool startProcess(const std::string &name, const int &sec=-1, Args...args)
启动一个新进程(可选择是否定时重启)
Definition: sttnet.h:3379
SSL * getSSL(const int &fd)
查询和服务端的连接,传入套接字,返回加密的SSL句柄
void unblockSet()
设置为非阻塞模式
static std::string & getTime(std::string &timeStr, const std::string &format=ISO8086A)
获取当前时间
#define ISO8086A
定义ISO8086A这个宏为&quot;yyyy-mm-ddThh:mi:ss&quot;
Definition: sttnet.h:821
void setTimeOutTime(const int &seca)
设置心跳时间
Definition: sttnet.h:2835
void setFunction(std::function< bool(const std::string &message, WebSocketClient &k)> fc)
设置收到服务端消息后的回调函数 注册一个回调函数
Definition: sttnet.h:2231
void clearIP(const std::string &ip)
把记录某ip的连接数清零