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_server.h"
|
||||||
|
|
||||||
|
#include "mk_service.h"
|
||||||
#include "mk_version.h"
|
#include "mk_version.h"
|
||||||
#include "mk_util.h"
|
#include "mk_util.h"
|
||||||
#include "mk_log.h"
|
#include "mk_log.h"
|
||||||
|
@ -16,6 +17,7 @@
|
||||||
|
|
||||||
struct sockaddr_un sun;
|
struct sockaddr_un sun;
|
||||||
int server;
|
int server;
|
||||||
|
extern const char* mk_errors[];
|
||||||
|
|
||||||
int mk_server_init(void){
|
int mk_server_init(void){
|
||||||
remove("/tmp/mokou.sock");
|
remove("/tmp/mokou.sock");
|
||||||
|
@ -40,15 +42,56 @@ int mk_server_init(void){
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#define PROTOCOL_ERROR "EProtocol Error\n"
|
||||||
|
|
||||||
void mk_server_loop(void){
|
void mk_server_loop(void){
|
||||||
struct sockaddr_un cun;
|
struct sockaddr_un cun;
|
||||||
socklen_t socklen = sizeof(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){
|
while(1){
|
||||||
mk_log("Waiting for the connection");
|
mk_log("Waiting for the connection");
|
||||||
int cli = accept(server, (struct sockaddr*)&cun, &socklen);
|
int cli = accept(server, (struct sockaddr*)&cun, &socklen);
|
||||||
send(cli, ver, strlen(ver), 0);
|
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);
|
close(cli);
|
||||||
}
|
}
|
||||||
free(ver);
|
free(ver);
|
||||||
|
free(ver);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ struct mk_service** services = NULL;
|
||||||
|
|
||||||
#ifdef __linux__
|
#ifdef __linux__
|
||||||
const char* sys_signame[] = {
|
const char* sys_signame[] = {
|
||||||
|
"",
|
||||||
"HUP",
|
"HUP",
|
||||||
"INT",
|
"INT",
|
||||||
"QUIT",
|
"QUIT",
|
||||||
|
@ -200,7 +201,7 @@ void mk_service_scan(void){
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* errors[] = {
|
const char* mk_errors[] = {
|
||||||
"Success",
|
"Success",
|
||||||
"No such service",
|
"No such service",
|
||||||
"Service is alive",
|
"Service is alive",
|
||||||
|
|
Loading…
Reference in New Issue
Block a user