#include <stdio.h>
#include <sys/msg.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <errno.h>
#include <unistd.h>
#include <stdlib.h>
#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 <sys/msg.h>
#include <sys/types.h>
#include <sys/ipc.h>
#define MSG_PATH "./msg/msg"
#define MSG_PJID 1818
#define MAX_MSG_LENGTH 256
typedef 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 <stdio.h>
#include <stdlib.h>
#include <string.h>
#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);
}