can start and stop service now
git-svn-id: file:///raid/svn-personal/mokou/trunk@8 35d6bad2-6c5c-c749-ada2-a2c82cb3bd79
This commit is contained in:
parent
818fd9fc92
commit
ea6732d1a8
|
@ -2,6 +2,7 @@
|
|||
|
||||
#include "mk_server.h"
|
||||
|
||||
#include "mk_service.h"
|
||||
#include "mk_version.h"
|
||||
#include "mk_util.h"
|
||||
#include "mk_log.h"
|
||||
|
@ -16,6 +17,7 @@
|
|||
|
||||
struct sockaddr_un sun;
|
||||
int server;
|
||||
extern const char* mk_errors[];
|
||||
|
||||
int mk_server_init(void){
|
||||
remove("/tmp/mokou.sock");
|
||||
|
@ -40,15 +42,56 @@ int mk_server_init(void){
|
|||
return 0;
|
||||
}
|
||||
|
||||
#define PROTOCOL_ERROR "EProtocol Error\n"
|
||||
|
||||
void mk_server_loop(void){
|
||||
struct sockaddr_un cun;
|
||||
socklen_t socklen = sizeof(cun);
|
||||
char* ver = mk_strcat3("V", mk_get_version(), "\n");
|
||||
char* ver = mk_strcat3("R", mk_get_version(), "\n");
|
||||
char cbuf[2];
|
||||
cbuf[1] = 0;
|
||||
char* str = malloc(1);
|
||||
str[0] = 0;
|
||||
while(1){
|
||||
mk_log("Waiting for the connection");
|
||||
int cli = accept(server, (struct sockaddr*)&cun, &socklen);
|
||||
send(cli, ver, strlen(ver), 0);
|
||||
while(1){
|
||||
if(recv(cli, cbuf, 1, 0) <= 0) break;
|
||||
if(cbuf[0] == '\n'){
|
||||
if(str[0] == 'U'){
|
||||
int err = mk_start_service(str + 1);
|
||||
if(err != 0){
|
||||
send(cli, "E", 1, 0);
|
||||
send(cli, mk_errors[err], strlen(mk_errors[err]), 0);
|
||||
send(cli, "\n", 1, 0);
|
||||
}else{
|
||||
send(cli, "Mok\n", 4, 0);
|
||||
}
|
||||
}else if(str[0] == 'D'){
|
||||
int err = mk_stop_service(str + 1);
|
||||
if(err != 0){
|
||||
send(cli, "E", 1, 0);
|
||||
send(cli, mk_errors[err], strlen(mk_errors[err]), 0);
|
||||
send(cli, "\n", 1, 0);
|
||||
}else{
|
||||
send(cli, "Mok\n", 4, 0);
|
||||
}
|
||||
}else{
|
||||
send(cli, PROTOCOL_ERROR, strlen(PROTOCOL_ERROR), 0);
|
||||
}
|
||||
free(str);
|
||||
str = malloc(1);
|
||||
str[0] = 0;
|
||||
break;
|
||||
}else if(cbuf[0] != '\r'){
|
||||
char* tmp = str;
|
||||
str = mk_strcat(tmp, cbuf);
|
||||
free(tmp);
|
||||
}
|
||||
}
|
||||
close(cli);
|
||||
}
|
||||
free(ver);
|
||||
free(ver);
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@ struct mk_service** services = NULL;
|
|||
|
||||
#ifdef __linux__
|
||||
const char* sys_signame[] = {
|
||||
"",
|
||||
"HUP",
|
||||
"INT",
|
||||
"QUIT",
|
||||
|
@ -200,7 +201,7 @@ void mk_service_scan(void){
|
|||
}
|
||||
}
|
||||
|
||||
const char* errors[] = {
|
||||
const char* mk_errors[] = {
|
||||
"Success",
|
||||
"No such service",
|
||||
"Service is alive",
|
||||
|
|
Loading…
Reference in New Issue
Block a user