#ifndef MSG_H
#define MSG_H
//msgid
#define LISTEN_THREAD??7
#define CENTER_THREAD??0
#define SEND_THREAD???2
#define REV_THREAD???3
#define TIME_THREAD???4
//lp
#define EXIT????0
#define SEND_SGIP_SUBMIT?1
#define SEND_SGIP_BIND
#define SEND_SGIP_R
#define SEND_SGIP_UNBIND
#define SEND_SGIP_UNBIND_R
#define REV_SGIP_SOCKET
//wp
#define SEND_SUCCESS
#define PACK_FAIL
#define SEND_FAIL
enum mgnt_cmd_type
{
?event_login???????? = 0,
??event_logout,
??event_sip_init_para,
??event_log_init_para,
??event_sip_clean,
??event_set_dtmf_mode,
??event_set_dhcp,
??event_set_pppoe,
??
??event_pstn_call_out,
??event_sip_call_out,
??event_answer_sipcall,
??event_release_sipcall,
??event_loadBMP_init,
??
??
??event_pstn_call_in=20,
??event_sip_call_in,
??event_remote_release_call,
??event_remote_establish_call,
??event_remote_cancelcall,
??event_login_return,
??event_remote_ignore,
??event_set_pstn_ring,
??event_set_sip_ring,
??event_set_alarm_ring,
??event_set_ring_volume
??
};
typedef struct msgbuf
{
?long???msgtype;
?unsigned long?msgid;
?unsigned long?lp;
?unsigned long?wp;
}MSGBuf, *pMSGBuf;
int vvMSGSend(long thread_id, unsigned long msgid, unsigned long lp, unsigned long wp);
int vvMSGRecv(long thread_id, struct msgbuf *msg, int is_wait);
#ifndef _WINDOWS
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <unistd.h>
#define?MSG_FILE_NAME??? "/rw/"????? //"/mnt/"
#define MSG_FLAG???(IPC_CREAT? | 00666)
//| IPC_EXCL
?
typedef struct sendMsg
{
?int sd;
?void *content;
}SendMsg, *pSendMsg;
#endif
#endif //MSG_H
#include "vvmsg.h"
#include <ps_log.h>
#ifndef _WINDOWS
#include <phone_Interface.h>
#include <pthread.h>
#include <basegdi.h>
#include <keyboard.h>
//#include "hash.h"
extern? pthread_t g_incomingthread;
//extern? hash_table table;
#endif
?
int vvMSGSend(long thread_id, unsigned long msgid, unsigned long lp, unsigned long wp)
{?
?struct msgbuf bmsg;
#ifndef _WINDOWS
?key_t key;
?int msg_id;
?bmsg.msgtype = thread_id;
?bmsg.msgid = msgid;
?bmsg.lp = lp;
?bmsg.wp = wp;
?if((key = ftok(MSG_FILE_NAME,'a')) == -1)
?{
??return -1;
?}
?if((msg_id = msgget(key,MSG_FLAG)) == -1)
?{
??return -1;
?}
?if (msgsnd(msg_id, &bmsg, sizeof(struct msgbuf), IPC_NOWAIT) == -1)
?{
??return -1;
?}
#endif
?return 1;
}
int vvMSGRecv(long thread_id, struct msgbuf *msg, int is_wait)
{
?#ifndef _WINDOWS
?key_t key;??
?int msg_id;
?if((key = ftok(MSG_FILE_NAME,'a')) == -1)
?{
??printf("Recv msg error 1!\n");
??return -1;
?}
?if((msg_id = msgget(key,MSG_FLAG)) == -1)
?{
??printf("Recv msg error 2!\n");
??return -1;
?}
?if (is_wait != 1)
?{
??if (msgrcv(msg_id, msg, sizeof(struct msgbuf), thread_id, IPC_NOWAIT) == -1)
??{
???printf("Recv msg error 3!\n");
???return -1;
??}?
?}
?else
?{
??if (msgrcv(msg_id, msg, sizeof(struct msgbuf), thread_id, 0) == -1)
??{
???//printf("Recv msg error 4!\n");
???return -1;
??}
?}
??#endif
?return 1;
}
void *skype_thread_start(void *arg)
{
?#ifndef _WINDOWS
?MSGBuf msg;
?pthread_setcancelstate(PTHREAD_CANCEL_ENABLE,0);//設(shè)置線(xiàn)程屬性
?pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS,0);
?for (;;)
?{
??pthread_testcancel();//設(shè)置取消點(diǎn)
??if (vvMSGRecv((long)g_incomingthread, &msg, 1) == -1)
???continue;
??
??// analysis the message
??switch (msg.msgid)
??{
???ps_show_str(log_DEBUG, "vvmsg event!!!!!!!!!!!!!!!%d\r\n", msg.msgid);
??case event_login:
???{
????userLogin();
????
???}
???break;
??case event_logout:
???{
????userLogout();
???}
??case event_sip_clean:
???{
????SipClean();
???}
???break;
??case event_sip_init_para:
???{
????ps_show_str(log_DEBUG, "event before################UpdateSipInitPara\r\n");
????UpdateSipInitPara();
????ps_show_str(log_DEBUG, "event after##################UpdateSipInitPara\r\n");
???}
???break;
??case event_log_init_para:
???{
????UpdateLogInitPara();
???}
???break;
??case event_set_dtmf_mode:
???{
????int i = (int)msg.lp;
????ps_show_str(log_DEBUG, "event_set_dtmf_mode########################%d\r\n", i);
????SetDTMFMode(i);
???}
???break;
??case event_set_dhcp:
???{
????SetDHCP();
???}
???break;
??case event_set_pppoe:
???{
????SetPPPOE();
???}
???break;
??case event_pstn_call_out:
???{
????pstncall((char*)msg.lp);
???}
???break;
??case event_sip_call_out:
???{
????
????sipcall((char*)msg.lp);
???}
???break;
??case event_answer_sipcall:
???{
????callmgr_answercall((LINE_ID_T *)msg.lp);
???}
???break;
??????? case event_release_sipcall:
???{
????callmgr_releasecall((LINE_ID_T *)msg.lp);
???}
???break;
??case event_loadBMP_init:
???{
????CreateSysBmp();
????
???}
???break;
???
?
?
?
?
?
?
?
??case event_pstn_call_in:
???{
????LINE_ID_T *line = (LINE_ID_T *)msg.wp;
????sipcome_create(line);
???}
???break;
??case event_sip_call_in:
???{
????LINE_ID_T *line = (LINE_ID_T *)msg.wp;
????sipcome_create(line);
???}
???break;
?
??case event_remote_establish_call:
???{
????
????LINE_ID_T *line = (LINE_ID_T *)msg.wp;
????pstnchat_create(line);
????if(g_Hwnd[HWND_CALLOUT]!=0)
????calling_destroy(g_Hwnd[HWND_CALLOUT]);
????
???}
???break;
??case event_remote_cancelcall:
???{
????if(g_Hwnd[HWND_CALLIN]!=0)
???SendMessage(g_Hwnd[HWND_CALLIN],MSG_KEYDOWN,KEY_SW_RSK,0);
???}
???break;
??case event_remote_release_call:
???{
????if(g_Hwnd[HWND_CHAT]!=0)
????SendMessage(g_Hwnd[HWND_CHAT],MSG_KEYDOWN,KEY_SW_RSK,0);
???}
???break;
??case event_login_return:
???{
????printf("sfds0000000000000000000000000000000dssssssss^^^^^^^^^^^^^^^^^\r\n");
????if(g_Hwnd[HWND_MAINSCREEN]!=0)
????{
?????UpdateWindow(g_Hwnd[HWND_MAINSCREEN],1);
????//?SetFocusChild(g_Hwnd[HWND_MAINSCREEN]);
????//?ShowWindow(g_Hwnd[HWND_MAINSCREEN], SW_SHOW);
????}
???}
???break;
??case event_remote_ignore:
???{
????if(g_Hwnd[HWND_CALLOUT]!=0)
????SendMessage(g_Hwnd[HWND_CALLOUT],MSG_KEYDOWN,KEY_SW_RSK,0);?
???}
???break;
??case event_set_pstn_ring:
???{
????SetPstnRing((int)msg.lp);
???}
???break;
??case event_set_sip_ring:
???{
????SetSipRing((int)msg.lp);
???}
???break;
??case event_set_ring_volume:
???{
????SetRingVolume((int)msg.lp);
???}
???break;
??}
?}
?#endif
}
附(創(chuàng)建線(xiàn)程):if (pthread_create(&g_incomingthread, NULL, skype_thread_start, NULL))
??return -1;