#include#include #include #include #include #include #include #include "message.h"int qid=0;int message_init(){ key_t key = ftok(MSG_PATH, MSG_PJID); if(key == -1) { perror("ftok failed"); exit(EXIT_FAILURE); } if((qid = msgget(key, IPC_CREAT | 0666)) == -1) { perror("create message queue failed"); exit(EXIT_FAILURE); } return qid; }int message_send(int msgid, const STRUCT_MSG_BUF* pmsg, int flag){ if( pmsg != NULL && pmsg->length >0 ) { if( msgsnd(msgid, pmsg, sizeof(STRUCT_MSG_BUF), 0) == -1) { perror("send msg to message queue failed"); exit(EXIT_FAILURE); } } return 0; } int message_receive(int msgid, STRUCT_MSG_BUF* pmsg, int flag){ if( msgrcv(msgid, pmsg, sizeof(STRUCT_MSG_BUF), 0, flag) == -1 ) { perror("receive msg from message queue failed"); exit(EXIT_FAILURE); } return 0;}
#ifndef __MESSAGE_H#define __MESSAGE_H#include#include #include #define MSG_PATH "./msg/msg"#define MSG_PJID 1818 #define MAX_MSG_LENGTH 256typedef struct tag_msg{ int length; char data[MAX_MSG_LENGTH];} STRUCT_MSG_BUF;int message_init();int message_receive(int msgid, STRUCT_MSG_BUF* pmsg, int flag);//int message_send(int msgid, const STRUCT_MSG_BUF* pmsg, int flag)int message_send(int msgid, const STRUCT_MSG_BUF* pmsg, int flag);#endif
#include#include #include #include "game.h"#include "engine.h"#include "message.h"int gqid=0;void game_init(){ //engine_init(); gqid=message_init();}void game_start(){ //engine_init(); game_send_msg(); game_receive_msg();}int game_abort(char* msg){ engine_shut(); fprintf(stderr, "%s\n", msg); exit(EXIT_FAILURE); }// void game_over(){ // print game over //engine_shut(); exit(EXIT_SUCCESS);}void game_send_msg(){ char test[]="hello"; STRUCT_MSG_BUF msg={ 0}; memset(&msg, 0, sizeof(STRUCT_MSG_BUF)); msg.length=5; strncpy(msg.data, test, sizeof(test)); message_send(gqid, &msg, 0);}void game_receive_msg(){ STRUCT_MSG_BUF msg={ 0}; memset(&msg, 0, sizeof(STRUCT_MSG_BUF)); message_receive(gqid, &msg, 0);}