您的位置:首页 > 编程语言 > Go语言

paper4—Multi-MPE_Trigger_Algorithm—testing

2016-02-01 00:00 447 查看
在同一台电脑测试:

[client-manet.c] send to

[(MASTER) handle_client(void *arg) IN server-manet.c] send to

[(MASTER) m_thread(void *arg) IN server-manet.c] send to

[(SLAVE) slave(void *arg) IN server-manet-slave.c]

启动顺序:

[root@localhost server-client-pthread-c]# ./server-manet

[root@localhost server-client-pthread-c]# ./server-manet-slave

[root@localhost server-client-pthread-c]# ./client-manet

++++++++++++++++++++++++++++++++++++++++++++++

在CORE中测试时:

1. 在每个节点的主目录创建文件: ctrl.txt, masterip.txt, hosts,

根据batman-adv协议,选择 主节点,其它为从节点;要修改 上面3个文件的值

[client-manet.c] send to

[(MASTER) handle_client(void *arg) IN server-manet.c] send to

[(MASTER) m_thread(void *arg) IN server-manet.c] send to

[(SLAVE) slave(void *arg) IN server-manet.c]

点击(此处)折叠或打开

//********************
client-manet.c

int main(int argc, char
*argv[])

{

masterip <- read from masterip.txt; //global
variable, echo 1.1.1.1
>masterip.txt

connect(sock, masterip);

CHK(send(sock,
"running process, update database", strlen("running process, update database"),
0));

}

//********************
client-manet.c

点击(此处)折叠或打开

//********************
server-manet.c

int ctrl; //global variable

int changed=0;

int pipe_fd[2];

char *masterip;

char *self_ip;

//read
* from client-manet.c

//模拟 流程执行,数据库更新的事件,事件驱动 数据库同步

void *handle_client(void
*arg)

{

bind(listener, self_ip);

int pipe_write
= *((int
*)arg);

while (1)
{

CHK2(client, accept(listener,
(struct sockaddr *)&peer,
&socklen));

while
(1) {

CHK2(len, recv(client, clientmsg,
CLIENTMSG_SIZE, MSG_NOSIGNAL));

CHK(write(pipe_write, clientmsg, strlen(clientmsg))); //send
MSG to m_thread(void
*arg)

}

}

}

int main(int argc, char
*argv[])

{

sprintf(self_ip,"%s",getipaddress("enp13s0"));

pthread_create(&readctrl,
NULL, read_ctrl,
NULL);

pthread_create(&writer,
NULL, handle_client,
(void *)&pipe_fd[1]);

while (1)
{

pthread_create(&tid,
NULL, master,
NULL); //ctrl==1

or

pthread_create(&tid,
NULL, slave,
NULL); //ctrl==0

}

}

void *read_ctrl(void
*arg)

{

while (1)
{

ctrl <- read from ctrl.txt; //global
variable, echo 1
>ctrl.txt

masterip <- read from masterip.txt; //global
variable, echo 1.1.1.1
>masterip.txt

master_ip = ip2uint(getipaddress(masterip));

if (master_ip!=prev_ip)
{

replaceline(hosts, line,
"masterip mpe.localhost"); //update hosts

}

}

}

void *slave(void
*arg)

{

connect(sock, masterip);

while (1)

{

if (changed) break;

recv(sock, buf, BUF_SIZE, MSG_NOSIGNAL); //read
* from master

}

}

void *master(void
*arg)

{

sprintf(self_ip,"%s",getipaddress("enp13s0"));

bind(listener, self_ip);

while (1)
{

if (changed) break;

CHK2(client, accept(listener,
(struct sockaddr *)&peer,
&socklen));

int rt
= pthread_create(&reader,
NULL, m_thread,
(void *)&client);

}

}

//event_driven, read pipe_fd[0] from handle_client(void
*arg) which read
* from client-manet.c

void *m_thread(void
*arg)

{

int client
= *((int
*)arg);

CHK(epoll_ctl(epfd, EPOLL_CTL_ADD, pipe_fd[0],
&ev));

//使用epoll模拟 流程执行,数据库更新的事件,事件驱动 数据库同步

while (1)
{ //communication between master
& slave

if (changed) break;

if((epoll_events_count
= epoll_wait(epfd, events, 1, EPOLL_RUN_TIMEOUT))
< 0){

sleep(1);

continue;

}

for (int i
= 0; i
< epoll_events_count; i++)
{

if
(events[i].data.fd
== pipe_fd[0]) //管道读端,从client-manet.c接受信息

{

CHK2(res, read(pipe_fd[0],
clientmsg, CLIENTMSG_SIZE));

CHK(send(client,
"synchronous data", strlen("synchronous data"),
MSG_NOSIGNAL));

}

}

}

}

//********************
server-manet.c

点击(此处)折叠或打开

//********************
server-manet-slave.c

int main(int argc, char
*argv[])

{

sprintf(self_ip,"%s",getipaddress("enp13s0"));

pthread_create(&readctrl,
NULL, read_ctrl,
NULL);

while (1)
{

pthread_create(&tid,
NULL, slave,
NULL);

pthread_join(tid,
&tret);

} //end
while

}

void *read_ctrl(void
*arg)

{

char filename[6]
= "hosts"; //set master_ip
in /etc/hosts

uint32_t me_ip = ip2uint(getipaddress("enp13s0"));

while (1)
{

ctrl <- read from ctrl_slave.txt; //global
variable, echo 0
>ctrl_slave.txt

masterip <- read from masterip.txt; //global
variable, echo 1.1.1.1
>masterip.txt

master_ip = ip2uint(getipaddress(masterip));

if (master_ip!=prev_ip)
{

replaceline(hosts, line,
"masterip mpe.localhost"); //update hosts

}

}

}

void *slave(void
*arg)

{

connect(sock, masterip);

while (1)

{

if (changed) break;

recv(sock, buf, BUF_SIZE, MSG_NOSIGNAL));

}

}

//********************
server-manet-slave.c
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: