📄 moi.c
字号:
#include "moi.h"
#include "string.h"
#include "message.h"
#include "ci.h"
#include<stdlib.h>
#include<time.h>
int port=8001;
CI *ci;
MOI *moi;
/**
* Create a MOI object
*/
MOI * createMOI()
{
MOI *moi;
moi=(MOI*)malloc(sizeof(MOI));
if (moi!=NULL)
{
moi->ci=createCI(port);
ci=moi->ci;
return moi;
}
else
{
return NULL;
}
}
/**
* Register to MTS. If registration fails, then returns null, else returns * MOI object for communication.
* @param appName The name of Application
* @param appID The ID of Application
* @param group The group that Application asks DMT to join
* @return MOI objects
*/
int serial=1;
int app_register(app_name_id_t app_name_id, char group[32])
{
int i=0,result;
moi=createMOI();
StartCI(moi->ci);
Message *msg=NULL,*sendMsg;
int type=16,priority=4,length,srcPort;
void *content;
char src[32],des[32],srcIp[32];
if(strlen(app_name_id.app_Name)>32)
{
return 1; //app_name error!
}
if (app_name_id.app_ID<0)
{
return 2; //app_id error!
}
/* init MOI */
moi->appId=app_name_id.app_ID;
strcpy(moi->appName,app_name_id.app_Name);
strcpy(moi->src,"dmt_1");
/*init content*/
content=(void *)malloc(sizeof(char)*500);
strcpy(((AppRegContent*)(content))->appName,moi->appName);
((AppRegContent*)(content))->appId=moi->appId;
strcpy(((AppRegContent*)(content))->Group,group);
((AppRegContent*)(content))->port=moi->ci->listenPort;
/* init Message */
strcpy(src,moi->src);
strcpy(des,moi->src);
strcpy(srcIp,"127.0.0.1");
srcPort=port;
serial++;
length=sizeof(AppRegContent);
sendMsg=createMessage(type,serial,src,srcIp,srcPort,des,priority,length,content);
putMessage(moi->ci,sendMsg,"127.0.0.1",8000);
while((msg=getMessage(moi->ci))==NULL)
{
sleep(1);
i++;
if (i>5) break;
}
if (i>5)
{
return 7;
}
else
{
if (msg->type==14)
{
result=((CommonRespondContent*)(msg->content))->result;
return result;
}
destroyMessage(msg);
}
return 6; // RGE_INTERNAL_ERROR
}
/*..............................................................................................*/
void transnate_setoption(int SetOptiop,int *sendRange,int *type,int *syn,int *compulsory,int *priority)
{
*sendRange = 0;
if((SetOptiop&1)!=0)
{
*sendRange=1; //sendRange : 0|1|2
}
if((SetOptiop&2)!=0)
{
if(*sendRange==1)
{
*sendRange=0;
}
else
{
*sendRange=2;
}
}
if((SetOptiop&4)!=0)
{
*type=1; //type : 0|1|2
}
if((SetOptiop&8)!=0)
{
*type=2;
}
if((SetOptiop&16)!=0)
{
*compulsory=1; //compulsory : 0|1
}
if((SetOptiop&32)!=0)
{
*priority=2; //priority : 2|3|4
}
if((SetOptiop&64)!=0)
{
*priority=4;
}
if((SetOptiop&128)!=0)
{
*syn=1; //syn : 0|1
}
else
{
*syn=0;
}
}
int app_send(app_info_t dest_app, int SendOption, msg_t msg)
{
Message *msg_respond,*message;
int type=15,serial,length,priority,i,srcPort;
int sendRange = 0,con_type=0,syn,compulsory=0,con_priority=3;
char src[32],des[32],srcIp[32],*data;
void *content;
if(strlen(dest_app.dest_dmt_name)>32)
{
return 1; //SEND_DEST_NAME_ERROR
}
if(dest_app.dest_app_id<0)
{
return 2; //SEND_DEST_APP_ID_ERROR
}
if(SendOption>255)
{
return 3; //SEND_SENDING_OPTION_ERROR
}
if(moi==NULL)
{
return 4; //SEND_APP_HAS_NOT_REGISTERED
}
/*..................init message......................*/
strcpy(src,moi->src);
strcpy(des,moi->src);
strcpy(srcIp,"127.0.0.1");
srcPort=port;
serial++;
priority=3;
/*..................init message->content..............*/
content=(void*)malloc(sizeof(char)*500);
transnate_setoption(SendOption,&sendRange,&con_type,&syn,&compulsory,&con_priority);
((DataMsgContent*)(content))->type=con_type;
((DataMsgContent*)(content))->sendRange=sendRange;
((DataMsgContent*)content)->syn=syn;
((DataMsgContent*)content)->compulsory=compulsory;
((DataMsgContent*)content)->state=0;
((DataMsgContent*)content)->srcApp=moi->appId;
strcpy(((DataMsgContent*)content)->src,moi->src);
strcpy(((DataMsgContent*)content)->des,dest_app.dest_dmt_name);
((DataMsgContent*)content)->desApp=dest_app.dest_app_id;
((DataMsgContent*)content)->priority=con_priority;
((DataMsgContent*)content)->length=msg.length;
printf("data length : %d\n",((DataMsgContent*)content)->length);
printf("before malloc!\n");
data=(char *)malloc(sizeof(char)*100);
((DataMsgContent*)content)->data=data;
strcpy(((DataMsgContent*)content)->data,msg.message);
length=msg.length;
message=createMessage(type, serial, src, srcIp,srcPort,des, priority, length, content);
putMessage(moi->ci,message,"127.0.0.1",8000);
if(syn==1)
{
i=0;
sleep(1);
while((msg_respond=getMessage(moi->ci))==NULL)
{
sleep(1);
i++;
if(i>10) { break; }
}
if(i>10)
{
return 7; //time out
}
else
{
if(msg_respond->type=13)
{
return ((CommonRespondContent*)(msg_respond->content))->result;
}
return 6;
}
}
return 0;
}
/*..............................................................................................*/
int receive(app_info_t* src_app, int time, msg_t *msg)
{
Message *rec_msg;
int i=0;
if(src_app->dest_app_id<0 || strlen(src_app->dest_dmt_name)>32)
{
return 1; //RECV_INPUT_APPINFO_ERROR
}
if(time<-1)
{
return 2;
}
if(moi==NULL)
{
return 3; //RECV_APP_HAS_NOT_REGISTERED
}
rec_msg=getMessage(moi->ci);
if(time==0)
{
if(rec_msg==NULL)
{
return 5;
}
}
else if(time==-1)
{
while((rec_msg=getMsgFromCi(moi->ci))==NULL);
}
else
{
while((rec_msg=getMsgFromCi(moi->ci))==NULL)
{
sleep(1);
i++;
if(i>time)
{
break;
}
}
if(i>time)
{
return 5;
}
}
msg->message=((DataMsgContent*)(rec_msg->content))->data;
msg->length=((DataMsgContent*)(rec_msg->content))->length;
strcpy(src_app->dest_dmt_name,((DataMsgContent*)(rec_msg->content))->src);
src_app->dest_app_id=((DataMsgContent*)(rec_msg->content))->srcApp;
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -