亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? sendsms.cpp

?? 一個在linux下連接Sybase數據庫
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
#include "SendSms.hpp"
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

unsigned long long StringTimeToInt(char *pDateTime)
{
	if(0==pDateTime||0==*pDateTime)
		return 0;
	unsigned long Time=time(0);
	tm *ptm=localtime((const long *)&Time);
	tm TM;
//	memset(&TM,0,sizeof(tm));
	memcpy(&TM,ptm,sizeof(TM));
	sscanf(pDateTime,"%d.%d.%d %d:%d:%d",&TM.tm_year,&TM.tm_mon,&TM.tm_mday,&TM.tm_hour,&TM.tm_min,&TM.tm_sec);
	TM.tm_year-=1900;
	--TM.tm_mon;
	return mktime(&TM);
}
unsigned long SendSms::GetTime()
{
	unsigned long Time=time(0);
	tm *ptm=localtime((const long *)&Time);
	return mktime(ptm);
}

SendSms::SendSms()
{
	memset(ret,0,sizeof(ret));

	memset(MaxStrategy,0,sizeof(MaxStrategy));
	memset(MaxSTable,0,sizeof(MaxSTable));
	memset(MaxSendRecord,0,sizeof(MaxSendRecord));

	memset(&SendRecord,0,sizeof(SendRecord));
	memset(&STable,0,sizeof(STable));
	memset(&Strategy,0,sizeof(Strategy));

	memset(StrategyState,0,sizeof(StrategyState));
	memset(STableState,0,sizeof(STableState));
	memset(SendRecordState,0,sizeof(SendRecordState));

	memset(SAlarmsTable,0,sizeof(SAlarmsTable));
	memset(TypeState,0,sizeof(TypeState));

	pEndSendRecord=MaxSendRecord;

	Cfg.SetFileName("./Config.ini");
	Cfg.ReadFileConfig();
	MaxTime=Cfg.MaxTime;
	pLogFile=fopen("SMLog.log","wr+");
	Init();
}
SendSms::~SendSms()
{
	if(pLogFile)fclose(pLogFile);
	disconnectDb(0);
}

unsigned long SendSms::OnTime(TimerEvent *Event)
{
	SendMessage((SMS*)Event->lpvoid);
	return 0;
}
int SendSms::SendMessage(SMS *pSMS)
{
	if(!pSMS)
		return -1;
	static unsigned long MaxSN=atoi(GsmRecv[0].ser)+1;
	GSMOntime Sms;
	memset(&Sms,0,sizeof(Sms));
	memcpy(Sms.ACCOUNT,"joyit//zyj",10);
	memcpy(Sms.CALLED,pSMS->Strategy.MSISDN_AlarmList,sizeof(pSMS->Strategy.MSISDN_AlarmList));
	memcpy(Sms.CONTENT,pSMS->STable.Info,sizeof(Sms.CONTENT));
	sprintf(Sms.SRVPARAM,"%04d",(int)MaxSN);
	sprintf(Sms.SENDTIME,"%d",(int)time(0));
	Sms.CALLEDTYPE=1;
	strcpy(Sms.CURSRVDT,"joyit");
	Sms.RESENDCOUNT=2;
	disconnectDb(0);
	connectDb("sa","","JoyitServer");
	int ret=::SendGSMOntime(&Sms,0);
	if(0==ret)
	{
		SMS *pMs=(SMS*)malloc(sizeof(SMS));
		if(pMs)
		{
			memcpy(pMs,pSMS,sizeof(SMS));
			AManage.Add(MaxSN++,pMs,Cfg.MaxTime);
		}
#if TEST
		printf("告警表處理成功 type=%d:%s\n",(int)pSMS->STable.AlarmCode.type,getLastError());
#endif
	}
	else
	{
		fprintf(pLogFile,"%s--SendGSMOntime function Error%s\n",GetCurrTime(),getLastError());
	}
	disconnectDb(0);
	return 0;
}
int SendSms::Init()
{	
	disconnectDb(0);
	connectDb("sa","","JoyitServer");
	GetRecord();
	InitStrategy();
	InitRecvTable();
	InitAlarmsTable();
	return 1;
}
int SendSms::GetRecord()
{
//	unsigned long long DateTime[2];
	while(ReadSMSendRecord()==1)
	{
		memcpy(&MaxSendRecord[SendRecord.InfoType&15],&SendRecord,sizeof(SendRecord));
/*		DateTime[0]=StringTimeToInt(MaxSendRecord[SendRecord.InfoType&15].SendTime);
		DateTime[1]=StringTimeToInt(SendRecord.SendTime);
		if(DateTime[0]<DateTime[1])
		{
			SendRecordState[SendRecord.InfoType&15]=1;
			memcpy(&MaxSendRecord[SendRecord.InfoType&15],&SendRecord,sizeof(SendRecord));
		}
*/
	}
	return 0;
}
char * SendSms::GetCurrTime()
{
	static char Time[30];
	long tm=time(0);
	struct tm *p=localtime(&tm);
	sprintf(Time,"%04d-%02d-%02d %02d:%02d:%02d\0",p->tm_year+1900,p->tm_mon+1,p->tm_mday,p->tm_hour,p->tm_min,p->tm_sec);
	return Time;
}
int SendSms::Run()
{
	do
	{
		Explore();
		sleep(Cfg.MainTime);
		CarryOut();
	}while(GetExit());
	return 0;
}
int SendSms::WriteRealtimeStatus()
{
	RealTimeStatus TimeStatus;
	memset(&TimeStatus,0,sizeof(RealTimeStatus));
	TimeStatus.NEavailability=1;
	memcpy(TimeStatus.UpdateTime,GetCurrTime(),sizeof(TimeStatus.UpdateTime));
	memcpy(TimeStatus.NEname,Cfg.NEname,sizeof(Cfg.NEname));//strlen(Cfg.NeName)+1);
	TimeStatus.NEid=Cfg.NEid;
	memcpy(TimeStatus.NEname,Cfg.NEname,sizeof(TimeStatus.NEname));
	::WriteRealtimeStatus(&TimeStatus);
	CommitWork();
	return 0;
}

int SendSms::DisposeAlarmsTable()
{
	return 0;
}

int SendSms::DisposeRecordTable()
{
	return 0;
}

int SendSms::DisposeStrategyTable()
{
	return 0;
}
int SendSms::DistributeStrategy(SMS *pSMS)
{
	switch(pSMS->Strategy.AlarmMode)
	{
	case 0:
		{
			if(TypeState[pSMS->STable.AlarmCode.type])
			{
#if TEST
								printf("上一封短信還沒發送完,丟棄!!TYPE=%d\n",(int)pSMS->STable.AlarmCode.type);
#endif
				return 0;
			}
			memcpy(&SAlarmsTable[pSMS->STable.AlarmCode.type],pSMS,sizeof(SMS));
			SAlarmsTable[pSMS->STable.AlarmCode.type].Count=time(0)+Strategy.DelayTime*60;
			TypeState[pSMS->STable.AlarmCode.type]=1;
#if TEST
				printf("告警表已提交,將會根據策略表表決:type=%d\n",(int)pSMS->STable.AlarmCode.type);
#endif
		}
		break;
	case 1:
		if(!CountDispose(pSMS))
			return 0;
		break;
	default:
		return -2;
	}
	return -1;
}

int SendSms::Construe()
{
	for(int i=0;i<16;i++)
	{
		if(1==STableState[i])
		{
			STableState[i]=0;
			unsigned long long DateTime[2];
			DateTime[0]=StringTimeToInt(MaxSTable[i].DateTime);
			DateTime[1]=StringTimeToInt(MaxSendRecord[i].SendTime);
			if(DateTime[1]<DateTime[0])
			{
				SMS Sms;
				memcpy(&Sms.STable,&MaxSTable[i],sizeof(AlarmsTable));
				memcpy(&Sms.Strategy,&MaxStrategy[i],sizeof(SendStrategy));
				if(GetTime()-StringTimeToInt(Sms.STable.DateTime)<MaxTime||GetTime()<StringTimeToInt(Sms.STable.DateTime))
				{
					DistributeStrategy(&Sms);
				}
			}
		}
	}
	return DisposeAlarmsTable();
}
int SendSms::ReadAlarmsTable()
{
	if(1==ret[0])
		ret[0]=readAlarmsTable(&STable,0,0);
	else
		ret[0]=readAlarmsTable(&STable,1,0);
	if(ret[0]==Cfg.ErrConnect)
	{
		Init();
	}
	return ret[0];
}
int SendSms::ReadSMSendStrategy()
{	
	if(1==ret[1])
		ret[1]=::ReadSMSendStrategy(&Strategy,0,0);
	else
		ret[1]=::ReadSMSendStrategy(&Strategy,1,0);
	return ret[1];
}
int SendSms::ReadSMSendRecord()
{
	if(1==ret[2])
		ret[2]=::ReadSMSendRecord(&SendRecord,0,0);
	else
		ret[2]=::ReadSMSendRecord(&SendRecord,1,0);
	return ret[2];
}
int SendSms::ReadGSMRecvTable()
{
	if(1==ret[3])
		ret[3]=::ReadGSMRecvTable(GsmRecv,0,0);
	else
		ret[3]=::ReadGSMRecvTable(GsmRecv,1,0);
	return ret[3];

}

GSMOntime* SendSms::ReadGSMOntime()
{
	static GSMOntime pOntime;
	if(1==ret[4])
		ret[4]=::ReadGSMOntime(&pOntime, 0,0);
	else
		ret[4]=::ReadGSMOntime(&pOntime,1,0);
	return ret[4]==1?&pOntime:0;
}
void SendSms::Explore()
{
	unsigned long long DateTime[2];
	while(ReadAlarmsTable()==1)
	{
		DateTime[0]=StringTimeToInt(MaxSTable[STable.AlarmCode.type].DateTime);
		DateTime[1]=StringTimeToInt(STable.DateTime);
		if(DateTime[0]<DateTime[1])
		{
			memcpy(&MaxSTable[STable.AlarmCode.type],&STable,sizeof(MaxSTable[STable.AlarmCode.type]));
			Dispatch(&STable);
		}
	}
	vector<GSMRECV> GSMRecv;
	while(ReadGSMRecvTable()==1)
	{
		int SN[2];
		SN[0]=atoi(GsmRecv[0].ser);
		SN[1]=atoi(GsmRecv[1].ser);
		if(SN[0]>SN[1])
		{
			memcpy(&GsmRecv[1],GsmRecv,sizeof(GsmRecv[0]));
			GSMRecv.push_back(GsmRecv[0]);
		}
	}
	CommitWork();
	vector<GSMRECV>::iterator lp;
    for(lp = GSMRecv.begin(); lp != GSMRecv.end();lp++)
    {
    	if(1==lp->mtype)
    	{
    		WriteSendRecord(atoi(lp->ser));
    	}
		else
		{
			fprintf(pLogFile,"%s --SMS Send error",GetCurrTime());
#if TEST
			printf("短信發送失敗,并不寫入結果表\n");
#endif
			void *lpTemp=(AManage-atoi(lp->ser));
			if(lpTemp)free(lpTemp);
		}
    }
}
int SendSms::Dispatch(AlarmsTable *pTable)
{
	unsigned long DateTime[2];
	DateTime[0]=StringTimeToInt(pTable->DateTime);
	DateTime[1]=StringTimeToInt(MaxSendRecord[pTable->AlarmCode.type].SendTime);
	if(DateTime[0]>DateTime[1])
	{
		memcpy(&SAlarmsTable[pTable->AlarmCode.type].ATable,pTable,sizeof(*pTable));
		Apportion(&SAlarmsTable[pTable->AlarmCode.type]);
	}
	return 0;
}
int SendSms::Apportion(_SAlarmsTable *pSAlarmsTable)
{
	switch(MaxStrategy[pSAlarmsTable->ATable.AlarmCode.type].AlarmMode)
	{
	case 0:
		{
			if(pSAlarmsTable->Count)
			{
#if TEST
				printf("丟失:一個沒完成的操作TYPE=%d\n",(int)pSAlarmsTable->ATable.AlarmCode.type);
#endif
				return -1;
			}
			
			if(MaxStrategy[pSAlarmsTable->ATable.AlarmCode.type].MSISDN_AlarmList[0]==0)
				return -2;
			pSAlarmsTable->Count=time(0)+MaxStrategy[pSAlarmsTable->ATable.AlarmCode.type].DelayTime*60;
		}
		break; 
	case 1:
		{
			pSAlarmsTable->Count++;
		}
	}
	return 0;
}
void SendSms::CarryOut()
{
	for(int i=0;i<16;i++)
	{
		if(SAlarmsTable[i].Count)
		{

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
人人狠狠综合久久亚洲| 欧美无乱码久久久免费午夜一区 | 久久精品国产亚洲a| 粉嫩蜜臀av国产精品网站| 欧美日韩亚洲综合在线 欧美亚洲特黄一级 | 成人免费视频播放| 欧美蜜桃一区二区三区| 中文字幕亚洲不卡| 国产综合成人久久大片91| 6080亚洲精品一区二区| 亚洲精品v日韩精品| 国产精品自拍网站| 欧美一级日韩免费不卡| 一二三区精品福利视频| 99久久免费精品高清特色大片| 精品国产1区二区| 日韩精品乱码免费| 欧美色偷偷大香| 亚洲欧美福利一区二区| 国产精品888| 亚洲精品一区二区在线观看| 日韩激情一区二区| 欧美精品久久天天躁| 一区二区三区精品视频在线| 99久久精品国产一区二区三区| 久久久国产一区二区三区四区小说 | 亚洲精品视频在线观看免费| 成人一区在线看| 国产欧美日韩激情| 国产一区二区美女| 久久婷婷国产综合精品青草| 美女视频免费一区| 2024国产精品| 国产成a人亚洲精品| 国产精品美女久久久久久久| 成人黄色在线视频| 亚洲丝袜精品丝袜在线| 91久久精品一区二区三区| 亚洲黄色免费电影| 一本色道综合亚洲| 亚洲国产精品一区二区久久恐怖片| 色婷婷综合视频在线观看| 亚洲影视在线播放| 欧美男人的天堂一二区| 另类专区欧美蜜桃臀第一页| 久久久综合视频| 成人av影视在线观看| 一区二区国产盗摄色噜噜| 欧美三级三级三级爽爽爽| 免费xxxx性欧美18vr| 久久精品亚洲乱码伦伦中文| av在线播放一区二区三区| 亚洲欧美日韩国产另类专区| 欧美日韩在线免费视频| 毛片一区二区三区| 国产精品色呦呦| 欧美午夜免费电影| 精品亚洲porn| 最新国产の精品合集bt伙计| 欧美精品欧美精品系列| 国产在线视视频有精品| 亚洲三级免费观看| 制服丝袜成人动漫| 国产精品亚洲第一| 亚洲第一狼人社区| 26uuu国产电影一区二区| 99久久精品国产一区| 日本亚洲免费观看| 国产精品久久久久影院老司| 欧美一区午夜视频在线观看| 国产成人午夜精品影院观看视频| 亚洲一区二区三区国产| 国产三级三级三级精品8ⅰ区| 色天天综合色天天久久| 国产乱码精品一区二区三区av| 亚洲欧洲国产专区| www日韩大片| 欧美日韩国产首页| 波多野结衣亚洲| 久久精品国产第一区二区三区| 亚洲免费在线播放| 国产肉丝袜一区二区| 91精品久久久久久蜜臀| av在线综合网| 国产成人在线观看| 日韩有码一区二区三区| 一区二区三区欧美日韩| 日本一区二区高清| 欧美成人伊人久久综合网| 欧美视频在线不卡| 不卡影院免费观看| 国产精品 欧美精品| 日本亚洲最大的色成网站www| 亚洲精品一二三区| 最近日韩中文字幕| 欧美国产精品一区二区三区| 精品1区2区在线观看| 欧美区视频在线观看| 欧美亚洲国产bt| 91丨九色丨蝌蚪丨老版| 粉嫩欧美一区二区三区高清影视| 老司机精品视频在线| 日韩影院在线观看| 污片在线观看一区二区| 亚洲精品免费电影| 亚洲欧美激情视频在线观看一区二区三区| 精品国产3级a| 26uuu国产一区二区三区| 日韩免费成人网| 欧美刺激午夜性久久久久久久| 在线播放亚洲一区| 91精品福利在线一区二区三区| 91精品欧美久久久久久动漫| 欧美精品久久久久久久多人混战| 欧美日韩亚洲国产综合| 欧美午夜在线观看| 69久久99精品久久久久婷婷| 91麻豆精品久久久久蜜臀| 欧美一区二区三区小说| 精品免费日韩av| 久久久精品综合| 国产精品丝袜在线| 亚洲三级视频在线观看| 亚洲国产精品一区二区久久| 一区二区三区自拍| 亚洲成av人片| 日本 国产 欧美色综合| 紧缚奴在线一区二区三区| 国产麻豆精品theporn| 国产精品亚洲成人| 色综合久久99| 欧美一区二区三区啪啪| 久久综合久久综合亚洲| 欧美国产激情二区三区 | 蜜臀精品一区二区三区在线观看| 免费不卡在线视频| 大桥未久av一区二区三区中文| 国产精品一卡二| 91浏览器入口在线观看| 欧美日本在线视频| www一区二区| 亚洲精品国产第一综合99久久 | 亚洲精品日韩一| 日韩福利电影在线观看| 极品美女销魂一区二区三区 | 亚洲综合久久久| 精品一区在线看| 97精品久久久午夜一区二区三区| 精品1区2区3区| 国产欧美综合在线观看第十页| 亚洲最大成人网4388xx| 狠狠久久亚洲欧美| 91福利国产精品| 久久精品视频一区二区| 亚洲电影中文字幕在线观看| 国产一区二区日韩精品| 欧美日韩小视频| 国产精品国产三级国产普通话99 | 粗大黑人巨茎大战欧美成人| 欧美性三三影院| 国产喷白浆一区二区三区| 亚洲国产视频网站| 国产99久久久久| 日韩精品一区二区三区视频播放 | 欧美人动与zoxxxx乱| 中文成人av在线| 美美哒免费高清在线观看视频一区二区| 国产91精品一区二区麻豆亚洲| 欧美精品丝袜久久久中文字幕| 国产精品久久久久久福利一牛影视| 日韩高清不卡在线| 欧美在线小视频| 综合激情网...| 国产91精品一区二区麻豆网站| 日韩精品一区二区三区四区 | 欧美一区在线视频| 亚洲精品第1页| 91蜜桃在线免费视频| 国产清纯在线一区二区www| 日本最新不卡在线| 欧美日韩精品一区二区三区蜜桃| 专区另类欧美日韩| 不卡一区二区在线| 国产三级一区二区| 国产老肥熟一区二区三区| 日韩亚洲欧美成人一区| 午夜精品久久一牛影视| 欧美中文一区二区三区| 亚洲永久精品大片| 欧美这里有精品| 亚洲成人av电影在线| 欧美在线视频全部完| 亚洲免费视频成人| 色94色欧美sute亚洲线路二| 日韩理论电影院| 91视频在线观看| 亚洲人妖av一区二区| 91农村精品一区二区在线| 日韩毛片精品高清免费| 色婷婷综合视频在线观看|