-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathconnection_test.c
100 lines (81 loc) · 2.54 KB
/
connection_test.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include "connection.h"
typedef struct data_s {
int32_t a;
} data_t;
data_t *deserialize(uint8_t *buffer, int length);
void callback(const void *message, int socket);
int main(void)
{
rcv_handler_t handler;
serialization_fn_table_t serial = {.hash = "asdfasdf",
.serialize = NULL,
.deserialize = (const void*)deserialize};
type_callback_t type;
rcv_handler_init(&handler);
if (rcv_handler_register_type(&handler, &serial, callback) != HANDLER_SUCCESS) {
printf("Type register failed.\n");
return EXIT_FAILURE;
}
int sockfd = 0;
struct sockaddr_in serv_addr;
serv_addr.sin_family = AF_INET;
serv_addr.sin_port = htons(5000);
serv_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (connect(sockfd, (struct sockaddr *)&serv_addr, sizeof(serv_addr)) < 0) {
printf("Connection 1 Failed.\n");
return EXIT_FAILURE;
}
else {
printf("Connection 1: %d\n", sockfd);
}
if (rcv_handler_add_socket(&handler, sockfd) != HANDLER_SUCCESS) {
printf("Socket 1 add failed.\n");
return EXIT_FAILURE;
}
struct sockaddr_in serv_addr2;
serv_addr2.sin_family = AF_INET;
serv_addr2.sin_port = htons(6000);
serv_addr2.sin_addr.s_addr = inet_addr("127.0.0.1");
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (connect(sockfd, (struct sockaddr *)&serv_addr2, sizeof(serv_addr2)) < 0) {
printf("Connection 2 Failed.\n");
return EXIT_FAILURE;
}
else {
printf("Connection 2: %d\n", sockfd);
}
if (rcv_handler_add_socket(&handler, sockfd) != HANDLER_SUCCESS) {
printf("Socket 2 add failed.\n");
return EXIT_FAILURE;
}
while (42) {
if (rcv_handler_handle(&handler) != HANDLER_SUCCESS) {
printf("Handle fail.\n");
return EXIT_FAILURE;
}
}
return EXIT_SUCCESS;
}
data_t *deserialize(uint8_t *buffer, int length)
{
data_t *data = NULL;
data = malloc(sizeof(data_t));
int32_t var = 0;
var += (((int32_t)*buffer++)<<24);
var += (((int32_t)*buffer++)<<16);
var += (((int32_t)*buffer++)<<8);
var += (((int32_t)*buffer++)<<0);
data->a = var;
return data;
}
void callback(const void *message, int socket)
{
data_t *data = (data_t*)message;
printf("Callback from socket %d: %d\n", socket, data->a);
}