no message
parent
2a3e08582f
commit
37b0f641d9
|
@ -1,34 +0,0 @@
|
||||||
{
|
|
||||||
"graph_lock": {
|
|
||||||
"nodes": {
|
|
||||||
"0": {
|
|
||||||
"options": "OPENSSL:shared=False\nlibevent:shared=False",
|
|
||||||
"requires": [
|
|
||||||
"1"
|
|
||||||
],
|
|
||||||
"path": "conanfile.txt",
|
|
||||||
"context": "host"
|
|
||||||
},
|
|
||||||
"1": {
|
|
||||||
"ref": "libevent/2.1.2",
|
|
||||||
"options": "shared=False\nOPENSSL:shared=False",
|
|
||||||
"package_id": "915fde0f08e1a7b1285eb9692add2dc53fa23d1a",
|
|
||||||
"prev": "0",
|
|
||||||
"requires": [
|
|
||||||
"2"
|
|
||||||
],
|
|
||||||
"context": "host"
|
|
||||||
},
|
|
||||||
"2": {
|
|
||||||
"ref": "OPENSSL/1.1.1",
|
|
||||||
"options": "shared=False",
|
|
||||||
"package_id": "58687b9860a7859264803e7743813436a963299d",
|
|
||||||
"prev": "0",
|
|
||||||
"context": "host"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"revisions_enabled": false
|
|
||||||
},
|
|
||||||
"version": "0.4",
|
|
||||||
"profile_host": "[settings]\narch=x86_64\narch_build=x86_64\nbuild_type=Release\ncompiler=gcc\ncompiler.libcxx=libstdc++11\ncompiler.version=7.5\nos=Linux\nos_build=Linux\n[options]\n[build_requires]\n[env]\ncc=gcc"
|
|
||||||
}
|
|
|
@ -1,190 +0,0 @@
|
||||||
[includedirs]
|
|
||||||
/root/.conan/data/libevent/2.1.2/_/_/package/915fde0f08e1a7b1285eb9692add2dc53fa23d1a/include
|
|
||||||
/root/.conan/data/OPENSSL/1.1.1/_/_/package/58687b9860a7859264803e7743813436a963299d/include
|
|
||||||
|
|
||||||
[libdirs]
|
|
||||||
/root/.conan/data/OPENSSL/1.1.1/_/_/package/58687b9860a7859264803e7743813436a963299d/lib
|
|
||||||
|
|
||||||
[bindirs]
|
|
||||||
/root/.conan/data/OPENSSL/1.1.1/_/_/package/58687b9860a7859264803e7743813436a963299d/bin
|
|
||||||
|
|
||||||
[resdirs]
|
|
||||||
|
|
||||||
|
|
||||||
[builddirs]
|
|
||||||
/root/.conan/data/libevent/2.1.2/_/_/package/915fde0f08e1a7b1285eb9692add2dc53fa23d1a/
|
|
||||||
/root/.conan/data/OPENSSL/1.1.1/_/_/package/58687b9860a7859264803e7743813436a963299d/
|
|
||||||
|
|
||||||
[libs]
|
|
||||||
libevent_core.a
|
|
||||||
libevent.a
|
|
||||||
libevent_openssl.a
|
|
||||||
libevent_extra.a
|
|
||||||
|
|
||||||
[system_libs]
|
|
||||||
|
|
||||||
|
|
||||||
[defines]
|
|
||||||
|
|
||||||
|
|
||||||
[cppflags]
|
|
||||||
|
|
||||||
|
|
||||||
[cxxflags]
|
|
||||||
|
|
||||||
|
|
||||||
[cflags]
|
|
||||||
|
|
||||||
|
|
||||||
[sharedlinkflags]
|
|
||||||
|
|
||||||
|
|
||||||
[exelinkflags]
|
|
||||||
|
|
||||||
|
|
||||||
[sysroot]
|
|
||||||
|
|
||||||
|
|
||||||
[frameworks]
|
|
||||||
|
|
||||||
|
|
||||||
[frameworkdirs]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[includedirs_libevent]
|
|
||||||
/root/.conan/data/libevent/2.1.2/_/_/package/915fde0f08e1a7b1285eb9692add2dc53fa23d1a/include
|
|
||||||
|
|
||||||
[libdirs_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[bindirs_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[resdirs_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[builddirs_libevent]
|
|
||||||
/root/.conan/data/libevent/2.1.2/_/_/package/915fde0f08e1a7b1285eb9692add2dc53fa23d1a/
|
|
||||||
|
|
||||||
[libs_libevent]
|
|
||||||
libevent_core.a
|
|
||||||
libevent.a
|
|
||||||
libevent_openssl.a
|
|
||||||
libevent_extra.a
|
|
||||||
|
|
||||||
[system_libs_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[defines_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[cppflags_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[cxxflags_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[cflags_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[sharedlinkflags_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[exelinkflags_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[sysroot_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[frameworks_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[frameworkdirs_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
[rootpath_libevent]
|
|
||||||
/root/.conan/data/libevent/2.1.2/_/_/package/915fde0f08e1a7b1285eb9692add2dc53fa23d1a
|
|
||||||
|
|
||||||
[name_libevent]
|
|
||||||
libevent
|
|
||||||
|
|
||||||
[version_libevent]
|
|
||||||
2.1.2
|
|
||||||
|
|
||||||
[generatornames_libevent]
|
|
||||||
cmake_find_package=libevent
|
|
||||||
cmake_find_package_multi=libevent
|
|
||||||
|
|
||||||
[generatorfilenames_libevent]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[includedirs_OPENSSL]
|
|
||||||
/root/.conan/data/OPENSSL/1.1.1/_/_/package/58687b9860a7859264803e7743813436a963299d/include
|
|
||||||
|
|
||||||
[libdirs_OPENSSL]
|
|
||||||
/root/.conan/data/OPENSSL/1.1.1/_/_/package/58687b9860a7859264803e7743813436a963299d/lib
|
|
||||||
|
|
||||||
[bindirs_OPENSSL]
|
|
||||||
/root/.conan/data/OPENSSL/1.1.1/_/_/package/58687b9860a7859264803e7743813436a963299d/bin
|
|
||||||
|
|
||||||
[resdirs_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[builddirs_OPENSSL]
|
|
||||||
/root/.conan/data/OPENSSL/1.1.1/_/_/package/58687b9860a7859264803e7743813436a963299d/
|
|
||||||
|
|
||||||
[libs_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[system_libs_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[defines_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[cppflags_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[cxxflags_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[cflags_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[sharedlinkflags_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[exelinkflags_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[sysroot_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[frameworks_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[frameworkdirs_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[rootpath_OPENSSL]
|
|
||||||
/root/.conan/data/OPENSSL/1.1.1/_/_/package/58687b9860a7859264803e7743813436a963299d
|
|
||||||
|
|
||||||
[name_OPENSSL]
|
|
||||||
OPENSSL
|
|
||||||
|
|
||||||
[version_OPENSSL]
|
|
||||||
1.1.1
|
|
||||||
|
|
||||||
[generatornames_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
[generatorfilenames_OPENSSL]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[USER_OPENSSL]
|
|
||||||
[USER_libevent]
|
|
||||||
[ENV_libevent]
|
|
||||||
[ENV_OPENSSL]
|
|
|
@ -1,37 +0,0 @@
|
||||||
[settings]
|
|
||||||
arch=x86_64
|
|
||||||
build_type=Release
|
|
||||||
compiler=gcc
|
|
||||||
compiler.libcxx=libstdc++11
|
|
||||||
compiler.version=7.5
|
|
||||||
os=Linux
|
|
||||||
|
|
||||||
[requires]
|
|
||||||
libevent/2.Y.Z
|
|
||||||
|
|
||||||
[options]
|
|
||||||
|
|
||||||
|
|
||||||
[full_settings]
|
|
||||||
arch=x86_64
|
|
||||||
arch_build=x86_64
|
|
||||||
build_type=Release
|
|
||||||
compiler=gcc
|
|
||||||
compiler.libcxx=libstdc++11
|
|
||||||
compiler.version=7.5
|
|
||||||
os=Linux
|
|
||||||
os_build=Linux
|
|
||||||
|
|
||||||
[full_requires]
|
|
||||||
OPENSSL/1.1.1:58687b9860a7859264803e7743813436a963299d
|
|
||||||
libevent/2.1.2:915fde0f08e1a7b1285eb9692add2dc53fa23d1a
|
|
||||||
|
|
||||||
[full_options]
|
|
||||||
OPENSSL:shared=False
|
|
||||||
libevent:shared=False
|
|
||||||
|
|
||||||
[recipe_hash]
|
|
||||||
|
|
||||||
|
|
||||||
[env]
|
|
||||||
cc=gcc
|
|
|
@ -1,18 +0,0 @@
|
||||||
{
|
|
||||||
"options": [
|
|
||||||
[
|
|
||||||
"OPENSSL:shared",
|
|
||||||
"False"
|
|
||||||
],
|
|
||||||
[
|
|
||||||
"libevent:shared",
|
|
||||||
"False"
|
|
||||||
]
|
|
||||||
],
|
|
||||||
"root": {
|
|
||||||
"name": null,
|
|
||||||
"version": null,
|
|
||||||
"user": null,
|
|
||||||
"channel": null
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,11 +1,13 @@
|
||||||
/*
|
/*
|
||||||
* @Author: your name
|
* @Author: your name
|
||||||
* @Date: 2021-06-30 10:02:04
|
* @Date: 2021-06-30 10:02:04
|
||||||
* @LastEditTime: 2021-07-05 22:49:38
|
* @LastEditTime: 2021-07-06 21:55:15
|
||||||
* @LastEditors: Please set LastEditors
|
* @LastEditors: Please set LastEditors
|
||||||
* @Description: In User Settings Edit
|
* @Description: In User Settings Edit
|
||||||
* @FilePath: \server\main.cpp
|
* @FilePath: \server\main.cpp
|
||||||
*/
|
*/
|
||||||
|
#define _WSPIAPI_H_
|
||||||
|
#define _WINSOCKAPI_
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "tcp_server_libevent.h"
|
#include "tcp_server_libevent.h"
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
/*
|
/*
|
||||||
* @Author: your name
|
* @Author: your name
|
||||||
* @Date: 2021-06-30 10:02:04
|
* @Date: 2021-06-30 10:02:04
|
||||||
* @LastEditTime: 2021-07-05 00:55:11
|
* @LastEditTime: 2021-07-06 23:03:05
|
||||||
* @LastEditors: Please set LastEditors
|
* @LastEditors: Please set LastEditors
|
||||||
* @Description: In User Settings Edit
|
* @Description: In User Settings Edit
|
||||||
* @FilePath: \server\main.cpp
|
* @FilePath: \server\main.cpp
|
||||||
*/
|
*/
|
||||||
|
#define _WSPIAPI_H_
|
||||||
|
#define _WINSOCKAPI_
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include "tcp_swarm_libevent.h"
|
#include "tcp_swarm_libevent.h"
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
|
@ -46,9 +49,9 @@ int main(){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
std::cout<<"start server libevent\r\n";
|
std::cout<<"start swarm client libevent\r\n";
|
||||||
TcpSwarmClientLibevent swarm(8000);
|
TcpSwarmClientLibevent swarm(20);
|
||||||
swarm.ConnectToServer("127.0.0.1",8000);
|
swarm.ConnectToServer("192.168.100.110",8000);
|
||||||
while(true){
|
while(true){
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
Sleep(1000);
|
Sleep(1000);
|
||||||
|
|
|
@ -1,17 +1,19 @@
|
||||||
//
|
//
|
||||||
// Created by 29019 on 2020/4/18.
|
// Created by 29019 on 2020/4/18.
|
||||||
//
|
//
|
||||||
|
#define _WSPIAPI_H_
|
||||||
|
#define _WINSOCKAPI_
|
||||||
#include "tcp_client.h"
|
#include "tcp_client.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
static void conn_writecb(struct bufferevent *, void *);
|
static void conn_writecb(struct bufferevent *, void *);
|
||||||
static void conn_readcb(struct bufferevent *, void *);
|
static void conn_readcb(struct bufferevent *, void *);
|
||||||
static void conn_eventcb(struct bufferevent *, short, void *);
|
static void conn_eventcb(struct bufferevent *, short, void *);
|
||||||
|
|
||||||
void delay(int ms);
|
void delay(int ms);
|
||||||
int ThreadRun(TcpClientLibevent *p);
|
int ThreadRun(TcpClientLibevent *p);
|
||||||
|
|
||||||
//conn_writecwritecb函数将在bufferevent中的output evbuffer缓冲区发送完成后被调用。
|
//conn_writecwritecb函数将在bufferevent中的output evbuffer缓冲区发送完成后被调用。
|
||||||
//此时evbuffer_get_length(output) = 0,说明output evbuffer缓冲区被清空。
|
//此时evbuffer_get_length(output) = 0,说明output evbuffer缓冲区被清空。
|
||||||
//假设发现有10000条记录要发送出去,1次发送10000条将占用大量内存,所以,我们要分批发送
|
//假设发现有10000条记录要发送出去,1次发送10000条将占用大量内存,所以,我们要分批发送
|
||||||
|
@ -20,21 +22,7 @@ int ThreadRun(TcpClientLibevent *p);
|
||||||
//数据
|
//数据
|
||||||
void conn_writecb(struct bufferevent *bev, void *user_data)
|
void conn_writecb(struct bufferevent *bev, void *user_data)
|
||||||
{
|
{
|
||||||
// struct evbuffer *output = bufferevent_get_output(bev);
|
|
||||||
// if (evbuffer_get_length(output) == 0)
|
|
||||||
// {
|
|
||||||
// printf("Output evbuffer is flushed\n");
|
|
||||||
// bufferevent_free(bev);
|
|
||||||
// }
|
|
||||||
//delay 1 second
|
|
||||||
//delay(1000);
|
|
||||||
//static int msg_num = 1;
|
|
||||||
//char reply_msg[1000] = { '\0' };
|
|
||||||
//char *str = "I receive a message from client ";
|
|
||||||
//memcpy(reply_msg, str, strlen(str));
|
|
||||||
//sprintf(reply_msg + strlen(str), "%d", msg_num);
|
|
||||||
//bufferevent_write(bev, reply_msg, strlen(reply_msg));
|
|
||||||
//msg_num++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// 运行线程
|
// 运行线程
|
||||||
|
|
|
@ -1,6 +1,13 @@
|
||||||
|
#define _WSPIAPI_H_
|
||||||
|
#define _WINSOCKAPI_
|
||||||
#include "tcp_server_libevent.h"
|
#include "tcp_server_libevent.h"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
ConnectionLibevent::ConnectionLibevent(TcpServerLibevent *p,struct bufferevent *ev,uint32_t fd,struct sockaddr_in *p1):
|
ConnectionLibevent::ConnectionLibevent(TcpServerLibevent *p,struct bufferevent *ev,uint32_t fd,struct sockaddr_in *p1):
|
||||||
m_parent_server(nullptr),
|
m_parent_server(nullptr),
|
||||||
m_event(nullptr),
|
m_event(nullptr),
|
||||||
|
@ -12,7 +19,11 @@ m_addr(nullptr)
|
||||||
m_fd = fd;
|
m_fd = fd;
|
||||||
m_addr = p1;
|
m_addr = p1;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
ConnectionLibevent::ConnectionLibevent(struct bufferevent *ev,uint32_t fd,struct sockaddr_in *p1):
|
ConnectionLibevent::ConnectionLibevent(struct bufferevent *ev,uint32_t fd,struct sockaddr_in *p1):
|
||||||
m_parent_server(nullptr),
|
m_parent_server(nullptr),
|
||||||
m_event(nullptr),
|
m_event(nullptr),
|
||||||
|
@ -23,26 +34,47 @@ m_addr(nullptr)
|
||||||
m_fd = fd;
|
m_fd = fd;
|
||||||
m_addr = p1;
|
m_addr = p1;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
ConnectionLibevent* defaultConnAccept(struct bufferevent *ev,uint32_t fd,struct sockaddr_in *p1){
|
ConnectionLibevent* defaultConnAccept(struct bufferevent *ev,uint32_t fd,struct sockaddr_in *p1){
|
||||||
return new ConnectionLibevent(ev,fd,p1);
|
return new ConnectionLibevent(ev,fd,p1);
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
int ConnectionLibevent::OnRecv(char *p,uint32_t len){
|
int ConnectionLibevent::OnRecv(char *p,uint32_t len){
|
||||||
std::cout<<"OnRecv "<<p<<std::endl;
|
std::cout<<"OnRecv "<<p<<std::endl;
|
||||||
m_bytes_recv += len;
|
m_bytes_recv += len;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
int ConnectionLibevent::OnClose(){
|
int ConnectionLibevent::OnClose(){
|
||||||
std::cout<<"close "<<this->m_fd << " "<<this->IpAddress()<<std::endl;
|
std::cout<<"close "<<this->m_fd << " "<<this->IpAddress()<<std::endl;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
int ConnectionLibevent::OnWrite(){
|
int ConnectionLibevent::OnWrite(){
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
int ConnectionLibevent::WriteData(const char *p,uint16_t len){
|
int ConnectionLibevent::WriteData(const char *p,uint16_t len){
|
||||||
if(nullptr == p){
|
if(nullptr == p){
|
||||||
return -1;
|
return -1;
|
||||||
|
@ -53,7 +85,11 @@ int ConnectionLibevent::WriteData(const char *p,uint16_t len){
|
||||||
uint32_t ConnectionLibevent::SocketFd(){
|
uint32_t ConnectionLibevent::SocketFd(){
|
||||||
return m_fd;
|
return m_fd;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
int ConnectionLibevent::SetServer(TcpServerLibevent *p){
|
int ConnectionLibevent::SetServer(TcpServerLibevent *p){
|
||||||
if(nullptr != p){
|
if(nullptr != p){
|
||||||
this->m_parent_server = p;
|
this->m_parent_server = p;
|
||||||
|
@ -81,41 +117,46 @@ void read_cb(struct bufferevent *bev, void *arg)
|
||||||
cout << "client " << conn->IpAddress() << " say:" << buf << endl;
|
cout << "client " << conn->IpAddress() << " say:" << buf << endl;
|
||||||
conn->OnRecv(buf,sizeof(buf));
|
conn->OnRecv(buf,sizeof(buf));
|
||||||
}
|
}
|
||||||
/************************************
|
|
||||||
@ Author: woniu201
|
|
||||||
@ Created: 2018/11/21
|
|
||||||
@ Return:
|
|
||||||
************************************/
|
|
||||||
void write_cb(struct bufferevent *bev, void *arg)
|
void write_cb(struct bufferevent *bev, void *arg)
|
||||||
{
|
{
|
||||||
ConnectionLibevent* conn = (ConnectionLibevent*)arg;
|
ConnectionLibevent* conn = (ConnectionLibevent*)arg;
|
||||||
std::cout<<"connection "<<conn->IpAddress()<<" sended data success"<< std::endl;
|
std::cout<<"connection "<<conn->IpAddress()<<" sended data success"<< std::endl;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
void event_cb(struct bufferevent *bev, short events, void *arg)
|
void event_cb(struct bufferevent *bev, short events, void *arg)
|
||||||
{
|
{
|
||||||
ConnectionLibevent *conn = (ConnectionLibevent*)(arg);
|
ConnectionLibevent *conn = (ConnectionLibevent*)(arg);
|
||||||
TcpServerLibevent *server = conn->Server();
|
TcpServerLibevent *server = conn->Server();
|
||||||
if (events & BEV_EVENT_EOF)
|
if (events & BEV_EVENT_EOF)
|
||||||
{
|
{
|
||||||
conn->OnClose();
|
|
||||||
cout << "connection closed: " << conn->IpAddress() << " " << conn->SocketFd() << endl;
|
cout << "connection closed: " << conn->IpAddress() << " " << conn->SocketFd() << endl;
|
||||||
|
conn->OnClose();
|
||||||
|
bufferevent_free(bev);
|
||||||
|
server->RemoveConnection(conn->SocketFd());
|
||||||
}
|
}
|
||||||
else if (events & BEV_EVENT_ERROR)
|
else if (events & BEV_EVENT_ERROR)
|
||||||
{
|
{
|
||||||
cout << "some other error !" << endl;
|
conn->OnClose();
|
||||||
}
|
|
||||||
bufferevent_free(bev);
|
bufferevent_free(bev);
|
||||||
server->RemoveConnection(conn->SocketFd());
|
server->RemoveConnection(conn->SocketFd());
|
||||||
|
cout << "some other error !" << endl;
|
||||||
|
}
|
||||||
delete conn;
|
delete conn;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
void cb_listener(struct evconnlistener *listener, evutil_socket_t fd, struct sockaddr *addr, int len, void *ptr)
|
* @param {*}
|
||||||
{
|
* @return {*}
|
||||||
|
*/
|
||||||
|
void cb_listener(struct evconnlistener *listener, evutil_socket_t fd, struct sockaddr *addr, int len, void *ptr) {
|
||||||
struct sockaddr_in* client = (sockaddr_in*)addr ;
|
struct sockaddr_in* client = (sockaddr_in*)addr ;
|
||||||
cout << "connect new client: " << inet_ntoa(client->sin_addr) << fd << " ::"<< ntohs(client->sin_port)<< endl;
|
cout << "connect new client: " << inet_ntoa(client->sin_addr) << " " << fd << " ::"<< ntohs(client->sin_port)<< endl;
|
||||||
TcpServerLibevent *server = (TcpServerLibevent*)ptr;
|
TcpServerLibevent *server = (TcpServerLibevent*)ptr;
|
||||||
if(server != nullptr){
|
if(server != nullptr){
|
||||||
struct bufferevent *bev;
|
struct bufferevent *bev;
|
||||||
|
@ -128,44 +169,11 @@ void cb_listener(struct evconnlistener *listener, evutil_socket_t fd, struct soc
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int test_tcp_server()
|
/**
|
||||||
{
|
* @description:
|
||||||
#ifdef WIN32
|
* @param {*}
|
||||||
WORD wVersionRequested;
|
* @return {*}
|
||||||
WSADATA wsaData;
|
*/
|
||||||
wVersionRequested = MAKEWORD(2, 2);
|
|
||||||
(void)WSAStartup(wVersionRequested, &wsaData);
|
|
||||||
#endif
|
|
||||||
// init server
|
|
||||||
struct sockaddr_in serv;
|
|
||||||
|
|
||||||
memset(&serv, 0, sizeof(serv));
|
|
||||||
serv.sin_family = AF_INET;
|
|
||||||
serv.sin_port = htons(8888);
|
|
||||||
serv.sin_addr.s_addr = htonl(INADDR_ANY);
|
|
||||||
|
|
||||||
struct event_base * base;
|
|
||||||
base = event_base_new();
|
|
||||||
|
|
||||||
struct evconnlistener* listener;
|
|
||||||
listener = evconnlistener_new_bind(base,
|
|
||||||
cb_listener,
|
|
||||||
base,
|
|
||||||
LEV_OPT_CLOSE_ON_FREE|LEV_OPT_REUSEABLE,
|
|
||||||
30000,
|
|
||||||
(struct sockaddr*)&serv,
|
|
||||||
sizeof(serv));
|
|
||||||
|
|
||||||
if(NULL != listener){
|
|
||||||
event_base_dispatch(base);
|
|
||||||
evconnlistener_free(listener);
|
|
||||||
event_base_free(base);
|
|
||||||
return 0;
|
|
||||||
}else{
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void server_run(TcpServerLibevent *p){
|
void server_run(TcpServerLibevent *p){
|
||||||
if(nullptr != p){
|
if(nullptr != p){
|
||||||
if(p->m_status == TcpServerLibevent::STOP){
|
if(p->m_status == TcpServerLibevent::STOP){
|
||||||
|
@ -176,7 +184,6 @@ void server_run(TcpServerLibevent *p){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description:
|
* @description:
|
||||||
* @param {*}
|
* @param {*}
|
||||||
|
@ -185,7 +192,11 @@ void server_run(TcpServerLibevent *p){
|
||||||
TcpServerLibevent::SERVER_STATUS TcpServerLibevent::Status(){
|
TcpServerLibevent::SERVER_STATUS TcpServerLibevent::Status(){
|
||||||
return m_status;
|
return m_status;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
int TcpServerLibevent::AddConnection(uint32_t fd,ConnectionLibevent *p){
|
int TcpServerLibevent::AddConnection(uint32_t fd,ConnectionLibevent *p){
|
||||||
if( m_map_client.find(fd) == m_map_client.end()){
|
if( m_map_client.find(fd) == m_map_client.end()){
|
||||||
if(nullptr != p)
|
if(nullptr != p)
|
||||||
|
@ -195,7 +206,11 @@ int TcpServerLibevent::AddConnection(uint32_t fd,ConnectionLibevent *p){
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
int TcpServerLibevent::RemoveConnection(uint32_t fd){
|
int TcpServerLibevent::RemoveConnection(uint32_t fd){
|
||||||
if( m_map_client.find(fd) != m_map_client.end()){
|
if( m_map_client.find(fd) != m_map_client.end()){
|
||||||
m_map_client.erase(fd);
|
m_map_client.erase(fd);
|
||||||
|
@ -204,12 +219,15 @@ if( m_map_client.find(fd) != m_map_client.end()){
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description:
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
int TcpServerLibevent::SetNewConnectionHandle(OnAccept p){
|
int TcpServerLibevent::SetNewConnectionHandle(OnAccept p){
|
||||||
m_handle_accept = p;
|
m_handle_accept = p;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @description:
|
* @description:
|
||||||
* @param {int} ports
|
* @param {int} ports
|
||||||
|
@ -284,7 +302,11 @@ int TcpServerLibevent::StartServerAsync(){
|
||||||
}
|
}
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* @description: start server asynchronous
|
||||||
|
* @param {*}
|
||||||
|
* @return {*}
|
||||||
|
*/
|
||||||
TcpServerLibevent::~TcpServerLibevent(){
|
TcpServerLibevent::~TcpServerLibevent(){
|
||||||
if(this->m_status == RUNNING){
|
if(this->m_status == RUNNING){
|
||||||
m_thread->detach();
|
m_thread->detach();
|
||||||
|
|
|
@ -1,11 +1,13 @@
|
||||||
/*
|
/*
|
||||||
* @Author: your name
|
* @Author: your name
|
||||||
* @Date: 2021-07-04 16:06:47
|
* @Date: 2021-07-04 16:06:47
|
||||||
* @LastEditTime: 2021-07-05 11:11:00
|
* @LastEditTime: 2021-07-06 22:40:15
|
||||||
* @LastEditors: Please set LastEditors
|
* @LastEditors: Please set LastEditors
|
||||||
* @Description: In User Settings Edit
|
* @Description: In User Settings Edit
|
||||||
* @FilePath: \server\tcp_swarm_libevent.cpp
|
* @FilePath: \server\tcp_swarm_libevent.cpp
|
||||||
*/
|
*/
|
||||||
|
#define _WSPIAPI_H_
|
||||||
|
#define _WINSOCKAPI_
|
||||||
#include"tcp_swarm_libevent.h"
|
#include"tcp_swarm_libevent.h"
|
||||||
#include <cstring>
|
#include <cstring>
|
||||||
void conn_writecb(struct bufferevent *, void *);
|
void conn_writecb(struct bufferevent *, void *);
|
||||||
|
@ -48,6 +50,7 @@ void conn_eventcb(struct bufferevent *bev, short events, void *user_data)
|
||||||
if (events & BEV_EVENT_EOF)
|
if (events & BEV_EVENT_EOF)
|
||||||
{
|
{
|
||||||
evutil_socket_t fd = bufferevent_getfd(bev);
|
evutil_socket_t fd = bufferevent_getfd(bev);
|
||||||
|
bufferevent_free(bev);
|
||||||
server->removeConection(fd);
|
server->removeConection(fd);
|
||||||
}
|
}
|
||||||
else if (events & BEV_EVENT_ERROR)
|
else if (events & BEV_EVENT_ERROR)
|
||||||
|
@ -59,7 +62,6 @@ void conn_eventcb(struct bufferevent *bev, short events, void *user_data)
|
||||||
evutil_socket_t fd = bufferevent_getfd(bev);
|
evutil_socket_t fd = bufferevent_getfd(bev);
|
||||||
server->addConection(fd,bev);
|
server->addConection(fd,bev);
|
||||||
}
|
}
|
||||||
bufferevent_free(bev);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -120,7 +122,6 @@ int TcpSwarmClientLibevent::ConnectToServer(string server, int port){
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this->m_thread = new thread(thread_dispatch,this);
|
this->m_thread = new thread(thread_dispatch,this);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue