move code to src
add linux implementation
This commit is contained in:
parent
4ddb60472d
commit
9147e4a63f
|
@ -1,13 +1,17 @@
|
|||
# cmake_minimum_required(VERSION <specify CMake version here>)
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project(esc C)
|
||||
|
||||
set(CMAKE_C_STANDARD 99)
|
||||
|
||||
include_directories(c:/Users/nicol/dev/thirdparty/protobuf-c)
|
||||
link_directories(c:/Users/nicol/dev/thirdparty/protobuf-c/protobuf-c/.libs)
|
||||
if(WIN32)
|
||||
include_directories(c:/Users/nicol/dev/thirdparty/protobuf-c)
|
||||
link_directories(c:/Users/nicol/dev/thirdparty/protobuf-c/protobuf-c/.libs)
|
||||
endif()
|
||||
|
||||
add_executable(esc main.c mutex.c mutex.h thread.c thread.h socket.c socket.h esc.c esc.h ClientMessageDtos.pb-c.c ClientMessageDtos.pb-c.h uuid.c uuid.h buffer.c buffer.h tcp_package.c tcp_package.h)
|
||||
add_executable(esc src/main.c src/mutex.c src/mutex.h src/thread.c src/thread.h src/socket.c src/socket.h src/esc.c src/esc.h src/proto.c src/proto.h src/uuid.c src/uuid.h src/buffer.c src/buffer.h src/tcp_package.c src/tcp_package.h)
|
||||
|
||||
if(WIN32)
|
||||
target_link_libraries(esc wsock32 ws2_32 libprotobuf-c.a)
|
||||
else()
|
||||
target_link_libraries(esc protobuf-c)
|
||||
endif()
|
61
socket.c
61
socket.c
|
@ -1,61 +0,0 @@
|
|||
//
|
||||
// Created by nicol on 2018-03-18.
|
||||
//
|
||||
|
||||
#include "socket.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <ws2tcpip.h>
|
||||
struct st_socket {
|
||||
SOCKET s;
|
||||
int af;
|
||||
int type;
|
||||
int proto;
|
||||
};
|
||||
|
||||
socket_t socket_create(int type) {
|
||||
if (type == SOCKET_TYPE_TCP) {
|
||||
socket_t s = malloc(sizeof(struct st_socket));
|
||||
s->af = AF_INET;
|
||||
s->type = SOCK_STREAM;
|
||||
s->proto = IPPROTO_TCP;
|
||||
s->s = socket(s->af, s->type, s->proto);
|
||||
if (s->s == INVALID_SOCKET) {
|
||||
free(s);
|
||||
return NULL;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void socket_close(socket_t s) {
|
||||
closesocket(s->s);
|
||||
}
|
||||
|
||||
int socket_connect(socket_t s, char* addr, unsigned short port) {
|
||||
char port_s[6];
|
||||
ADDRINFO hints;
|
||||
memset(&hints, 0, sizeof(ADDRINFO));
|
||||
hints.ai_family = s->af;
|
||||
hints.ai_socktype = s->type;
|
||||
hints.ai_protocol = s->proto;
|
||||
ADDRINFO* result;
|
||||
if (getaddrinfo(addr, itoa(port, port_s, 10), &hints, &result) != 0) {
|
||||
return -1;
|
||||
}
|
||||
return connect(s->s, result->ai_addr, (int)result->ai_addrlen);
|
||||
}
|
||||
|
||||
int socket_send(socket_t s, char* data, int len) {
|
||||
return send(s->s, data, len, 0);
|
||||
}
|
||||
|
||||
int socket_recv(socket_t s, char* buf, int len) {
|
||||
return recv(s->s, buf, len, 0);
|
||||
}
|
||||
|
||||
int socket_error() {
|
||||
return WSAGetLastError();
|
||||
}
|
||||
#endif
|
|
@ -2,14 +2,13 @@
|
|||
// Created by nicol on 2018-03-18.
|
||||
//
|
||||
|
||||
#include <mem.h>
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <winsock2.h>
|
||||
#include <string.h>
|
||||
#include "esc.h"
|
||||
#include "socket.h"
|
||||
#include "buffer.h"
|
||||
#include "ClientMessageDtos.pb-c.h"
|
||||
#include "proto.h"
|
||||
#include "tcp_package.h"
|
||||
|
||||
struct st_connection_settings {
|
|
@ -20,8 +20,8 @@ struct st_credentials {
|
|||
typedef struct st_credentials esc_credentials_t;
|
||||
|
||||
struct st_esc_position {
|
||||
__int64 prepare_position;
|
||||
__int64 commit_position;
|
||||
int64_t prepare_position;
|
||||
int64_t commit_position;
|
||||
};
|
||||
typedef struct st_esc_position esc_position_t;
|
||||
|
|
@ -5,6 +5,8 @@
|
|||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
#include "mutex.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
|
@ -25,4 +27,23 @@ void mutex_unlock(mutex_t mutex) {
|
|||
void mutex_destroy(mutex_t mutex) {
|
||||
DeleteCriticalSection(mutex);
|
||||
}
|
||||
#else
|
||||
mutex_t mutex_create() {
|
||||
mutex_t mutex = malloc(sizeof(mutex_t));
|
||||
pthread_mutex_init(mutex, 0);
|
||||
return mutex;
|
||||
}
|
||||
|
||||
void mutex_lock(mutex_t mutex) {
|
||||
pthread_mutex_lock(mutex);
|
||||
}
|
||||
|
||||
void mutex_unlock(mutex_t mutex) {
|
||||
pthread_mutex_unlock(mutex);
|
||||
}
|
||||
|
||||
void mutex_destroy(mutex_t mutex) {
|
||||
pthread_mutex_destroy(mutex);
|
||||
free(mutex);
|
||||
}
|
||||
#endif
|
|
@ -8,6 +8,9 @@
|
|||
#ifdef _WIN32
|
||||
#include <windows.h>
|
||||
typedef LPCRITICAL_SECTION mutex_t;
|
||||
#else
|
||||
#include <pthread.h>
|
||||
typedef pthread_mutex_t* mutex_t;
|
||||
#endif
|
||||
|
||||
mutex_t mutex_create();
|
|
@ -6,7 +6,7 @@
|
|||
#define PROTOBUF_C__NO_DEPRECATED
|
||||
#endif
|
||||
|
||||
#include "ClientMessageDtos.pb-c.h"
|
||||
#include "proto.h"
|
||||
void event_store__client__messages__new_event__init
|
||||
(EventStore__Client__Messages__NewEvent *message)
|
||||
{
|
|
@ -1,8 +1,8 @@
|
|||
/* Generated by the protocol buffer compiler. DO NOT EDIT! */
|
||||
/* Generated from: Protos/ClientAPI/ClientMessageDtos.proto */
|
||||
|
||||
#ifndef PROTOBUF_C_Protos_2fClientAPI_2fClientMessageDtos_2eproto__INCLUDED
|
||||
#define PROTOBUF_C_Protos_2fClientAPI_2fClientMessageDtos_2eproto__INCLUDED
|
||||
#ifndef ESC_PROTO_H
|
||||
#define ESC_PROTO_H
|
||||
|
||||
#include <protobuf-c/protobuf-c.h>
|
||||
|
||||
|
@ -1690,4 +1690,4 @@ extern const ProtobufCMessageDescriptor event_store__client__messages__client_id
|
|||
PROTOBUF_C__END_DECLS
|
||||
|
||||
|
||||
#endif /* PROTOBUF_C_Protos_2fClientAPI_2fClientMessageDtos_2eproto__INCLUDED */
|
||||
#endif /* ESC_PROTO_H */
|
123
src/socket.c
Normal file
123
src/socket.c
Normal file
|
@ -0,0 +1,123 @@
|
|||
//
|
||||
// Created by nicol on 2018-03-18.
|
||||
//
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <sys/socket.h>
|
||||
#include <netinet/in.h>
|
||||
#include <unistd.h>
|
||||
#include <netdb.h>
|
||||
#include <string.h>
|
||||
#include <errno.h>
|
||||
#include <stdio.h>
|
||||
#include "socket.h"
|
||||
|
||||
#ifdef _WIN32
|
||||
#include <ws2tcpip.h>
|
||||
struct st_socket {
|
||||
SOCKET s;
|
||||
int af;
|
||||
int type;
|
||||
int proto;
|
||||
};
|
||||
|
||||
socket_t socket_create(int type) {
|
||||
if (type == SOCKET_TYPE_TCP) {
|
||||
socket_t s = malloc(sizeof(struct st_socket));
|
||||
s->af = AF_INET;
|
||||
s->type = SOCK_STREAM;
|
||||
s->proto = IPPROTO_TCP;
|
||||
s->s = socket(s->af, s->type, s->proto);
|
||||
if (s->s == INVALID_SOCKET) {
|
||||
free(s);
|
||||
return NULL;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void socket_close(socket_t s) {
|
||||
closesocket(s->s);
|
||||
}
|
||||
|
||||
int socket_connect(socket_t s, char* addr, unsigned short port) {
|
||||
char port_s[6];
|
||||
ADDRINFO hints;
|
||||
memset(&hints, 0, sizeof(ADDRINFO));
|
||||
hints.ai_family = s->af;
|
||||
hints.ai_socktype = s->type;
|
||||
hints.ai_protocol = s->proto;
|
||||
ADDRINFO* result;
|
||||
if (getaddrinfo(addr, itoa(port, port_s, 10), &hints, &result) != 0) {
|
||||
return -1;
|
||||
}
|
||||
return connect(s->s, result->ai_addr, (int)result->ai_addrlen);
|
||||
}
|
||||
|
||||
int socket_send(socket_t s, char* data, int len) {
|
||||
return send(s->s, data, len, 0);
|
||||
}
|
||||
|
||||
int socket_recv(socket_t s, char* buf, int len) {
|
||||
return recv(s->s, buf, len, 0);
|
||||
}
|
||||
|
||||
int socket_error() {
|
||||
return WSAGetLastError();
|
||||
}
|
||||
#else
|
||||
struct st_socket {
|
||||
int s;
|
||||
int af;
|
||||
int type;
|
||||
int proto;
|
||||
};
|
||||
|
||||
socket_t socket_create(int type) {
|
||||
if (type == SOCKET_TYPE_TCP) {
|
||||
socket_t s = malloc(sizeof(struct st_socket));
|
||||
s->af = AF_INET;
|
||||
s->type = SOCK_STREAM;
|
||||
s->proto = IPPROTO_TCP;
|
||||
s->s = socket(s->af, s->type, s->proto);
|
||||
if (s->s == -1) {
|
||||
free(s);
|
||||
return NULL;
|
||||
}
|
||||
return s;
|
||||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void socket_close(socket_t s) {
|
||||
close(s->s);
|
||||
}
|
||||
|
||||
int socket_connect(socket_t s, char* addr, unsigned short port) {
|
||||
struct addrinfo hints;
|
||||
memset(&hints, 0, sizeof(struct addrinfo));
|
||||
hints.ai_family = s->af;
|
||||
hints.ai_socktype = s->type;
|
||||
hints.ai_protocol = s->proto;
|
||||
struct addrinfo* result;
|
||||
char port_s[6];
|
||||
snprintf(port_s, 6, "%d", port);
|
||||
if (getaddrinfo(addr, port_s, &hints, &result) != 0) {
|
||||
return -1;
|
||||
}
|
||||
return connect(s->s, result->ai_addr, (int)result->ai_addrlen);
|
||||
}
|
||||
|
||||
int socket_send(socket_t s, char* data, int len) {
|
||||
return (int)send(s->s, data, (size_t)len, 0);
|
||||
}
|
||||
|
||||
int socket_recv(socket_t s, char* buf, int len) {
|
||||
return (int)recv(s->s, buf, (size_t)len, 0);
|
||||
}
|
||||
|
||||
int socket_error() {
|
||||
return errno;
|
||||
}
|
||||
#endif
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
#include <memory.h>
|
||||
#include <stdlib.h>
|
||||
#include <mem.h>
|
||||
#include <string.h>
|
||||
#include "tcp_package.h"
|
||||
|
||||
const uint32_t CommandOffset = 0;
|
Loading…
Reference in New Issue
Block a user