📄 sessionobject.cpp
字号:
_StrUpper(TArg *argv)
参数1:源字符串
参数2:返回字符串
功能: 将字符串转换成大写
返回结果:返回放在参数2中
************************************************************************************/
RTCS_CTuint TSessionObject::StrUpper(TArg *argv)
{
argv[0].sptr = strupr(argv[0].sptr);
return RTCS_Error_OK;
}
/************************************************************************************
_StrLower(TArg *argv)
参数1:源字符串
参数2:返回字符串
功能: 将字符串转换成小写
返回结果:返回放在参数2中
************************************************************************************/
RTCS_CTuint TSessionObject::StrLower(TArg *argv)
{
argv[0].sptr = strlwr(argv[0].sptr);
return RTCS_Error_OK;
}
/************************************************************************************
_StrDigital(TArg *argv)
参数1:源字符串
功能: 判断字符串是否全为数字
evtReturn [0] 表示全为数字
evtReturn [-1] 表示不全为数字
************************************************************************************/
RTCS_CTuint TSessionObject::StrDigital(TArg *argv)
{
RTCS_CTpdu pdu;
pdu.sender = m_pOwner->GetGOR();
pdu.receiver = m_pOwner->GetGOR();
pdu.messageID = EvtRTCS_DRIVER_Return;
pdu.receiverObj = m_SessionID;
pdu.status = 0;
char temp[256];
strcpy(temp,argv[0].sptr);
int i = 0;
while(temp[i])
{
if (temp[i] >= '0' && temp[i] <='9')
{
i++;
if (i < 256)
continue;
else
break;
}
else
{
pdu.status = -1;
break;
}
}
m_pOwner->PostMessage(pdu);
return RTCS_Error_OK;
}
RTCS_CTuint TSessionObject::SMACmdBind(TArg *argv)
{
m_pOwner->logfile->Trace(1, "TSessionObject::SMACmdBind\n");
RTCS_CTpdu sendpdu;
sendpdu.messageID = CmdRTCS_ISMA_Bind;
sendpdu.sender = m_pOwner->GetGOR();
sendpdu.receiver = m_pOwner->m_SMAIGOR;
sendpdu.senderObj = m_SessionID;
sendpdu.PutUInt(RTCS_ISMA_TaskRefID,m_SessionID);
m_pOwner->PostMessage(sendpdu);
return RTCS_Error_OK;
}
RTCS_CTuint TSessionObject::SMAGetDeliverData(TArg *argv)
{
SMAInitData();
RTCS_CTbyteArray temp;
RTCS_CTuint len = 0;
if (m_pdu.GetByteArray(RTCS_ISMA_UserNumber,&temp,&len) == RTCS_Error_OK)
{
len = CMPP_SIZE_Src_terminal_id > len ? len : CMPP_SIZE_Src_terminal_id;
memcpy(SMA_Srcterminalid,temp,len);
SMA_Srcterminalid[len] = NULL;
}
if (m_pdu.GetByteArray(RTCS_ISMA_MessageContent,&temp,&len) == RTCS_Error_OK)
{
len = CMPP_SIZE_Msg_Content > len ? len : CMPP_SIZE_Msg_Content;
// if(len < 18)
// {
// SMA_MsgLength = 0;
// SMA_MsgContent[0] = 0;
// return RTCS_Error_OK;
// }
// else
// {
SMA_MsgLength = len;
memcpy(SMA_MsgContent,temp,len);
SMA_MsgContent[len] = NULL;
// }
}
// 针对联通短消息缴费所作的修改
RTCS_CTbyte messagecoding = 0;
if (m_pdu.GetByte(RTCS_ISMA_MessageCoding, &messagecoding) == RTCS_Error_OK)
{
// 短消息的编码格式暂时只支持:
// 0:纯ASCII字符串
// 8:UCS2编码
if (messagecoding == 8)
{
//if ((SMA_MsgLength % 2) || SMA_MsgLength < 40)
if ((SMA_MsgLength % 2))
{ // 出错:UCS2编码的字符串的长度为2的倍数
SMA_MsgLength = 0;
SMA_MsgContent[0] = 0;
}
else
{
SMA_MsgLength /= 2;
for (int i = 0; i < SMA_MsgLength; ++ i)
{
if(SMA_MsgContent[2*i] != 0)
{
SMA_MsgLength = 0;
SMA_MsgContent[0] = 0;
return RTCS_Error_OK;
}
SMA_MsgContent[i] = SMA_MsgContent[2*i+1];
}
SMA_MsgContent[SMA_MsgLength] = 0;
}
}
else if (messagecoding != 15 && messagecoding != 0)
{
SMA_MsgLength = 0;
SMA_MsgContent[0] = 0;
}
}
return RTCS_Error_OK;
}
RTCS_CTuint TSessionObject::SMACmdSubmit(TArg *argv)
{
m_pOwner->logfile->Trace(0, "TSessionObject::SMACmdSubmit\n");
RTCS_CTpdu sendpdu;
RTCS_CTbyteArray temp;
RTCS_CTuint len;
sendpdu.messageID = CmdRTCS_ISMA_Submit;
sendpdu.sender = m_pOwner->GetGOR();
sendpdu.senderObj = m_SessionID;
sendpdu.receiver = m_pOwner->m_SMAIGOR;
sendpdu.qualifier = m_Socket;
sendpdu.PutUInt(RTCS_ISMA_TaskRefID,m_SessionID);
temp = (RTCS_CTbyteArray)" ";
temp = &SMA_Srcterminalid[0];
sendpdu.PutByteArray(RTCS_ISMA_Src_terminal_id,temp,CMPP_SIZE_Src_terminal_id);
sendpdu.PutByte(RTCS_ISMA_DestUsr_tl,SMA_DestUsrtl);
temp = &SMA_Destterminalid[0];
len = 21 * SMA_DestUsrtl;
sendpdu.PutByteArray(RTCS_ISMA_Dest_terminal_id,temp,len);
temp = &SMA_MsgContent[0];
len = SMA_MsgLength;
sendpdu.PutByteArray(RTCS_ISMA_Msg_Content,temp,len);
m_pOwner->PostMessage(sendpdu);
return RTCS_Error_OK;
}
RTCS_CTuint TSessionObject::SMAGetMsgContentLength(TArg *argv)
{
*(argv[0].iptr) = strlen((LPCTSTR)SMA_MsgContent);
return RTCS_Error_OK;
}
RTCS_CTuint TSessionObject::SMACmdUnbind(TArg *argv)
{
m_pOwner->logfile->Trace(1, "TSessionObject::SMACmdUnbind\n");
RTCS_CTpdu sendpdu;
sendpdu.messageID = CmdRTCS_ISMA_Unbind;
sendpdu.sender = m_pOwner->GetGOR();
sendpdu.senderObj = m_SessionID;
sendpdu.receiver = m_pOwner->m_SMAIGOR;
sendpdu.qualifier = m_Socket;
sendpdu.PutUInt(RTCS_ISMA_TaskRefID,m_SessionID);
m_pOwner->PostMessage(sendpdu);
return RTCS_Error_OK;
}
//--------------------TSessionObjectTable的实现----------------------------
TSessionObjectTable::TSessionObjectTable()
{
m_CurrPos = NULL;
m_ToTailFlag = 0;
m_CurrSessionID = INVALID_SESSION_ID;
}
TSessionObjectTable::~TSessionObjectTable()
{
ClearAll();
}
void TSessionObjectTable::ClearAll()
{
POSITION pos = NULL;
RTCS_CTuint ret_sessionid;
TSessionObject * ret_obj;
//Lock();
pos = GetStartPosition();
while(pos)
{
ret_obj = NULL;
GetNextAssoc(pos, ret_sessionid, ret_obj);
if(ret_obj)
{
delete ret_obj;
ret_obj = NULL;
}
}
RemoveAll();
//Unlock();
}
int TSessionObjectTable::AddSessionObject(TSessionObject* Obj)
{
if(!Obj)
return -1; //输入参数不正确
//Lock();
TSessionObject* ret_obj = NULL;
if(Lookup(Obj->m_SessionID , ret_obj))
{
//Unlock();
return -2; //已经有相同ID的对象存在
}
SetAt(Obj->m_SessionID, Obj);
//Unlock();
return 0; //成功
}
TSessionObject* TSessionObjectTable::GetSessionObject(RTCS_CTuint SessionID)
{
TSessionObject * get_obj = NULL;
//Lock();
if(Lookup(SessionID, get_obj))
{
//Unlock();
return get_obj;
}
//Unlock();
return NULL;
}
void TSessionObjectTable::DeleteSessionObject(RTCS_CTuint SessionID)
{
//Lock();
TSessionObject * ret_obj = NULL;
if(Lookup(SessionID, ret_obj))
{
if(ret_obj)
{
delete ret_obj;
ret_obj = NULL;
}
RemoveKey(SessionID);
}
//Unlock();
return ;
}
void TSessionObjectTable::Lock()
{
m_Lock.Lock();
}
void TSessionObjectTable::Unlock()
{
m_Lock.Unlock();
}
void TSessionObjectTable::Reset()
{
m_CurrPos = NULL;
m_ToTailFlag = 0;
}
TSessionObject* TSessionObjectTable::Next()
{
RTCS_CTuint ret_sessionid;
TSessionObject * ret_obj = NULL;
if(!m_CurrPos)
{
if(!m_ToTailFlag)
m_CurrPos = GetStartPosition();
else
return NULL;
}
if(m_CurrPos)
{
GetNextAssoc(m_CurrPos, ret_sessionid, ret_obj);
if(!m_CurrPos)
m_ToTailFlag = 1;
}
else
m_ToTailFlag = 1;
return ret_obj;
}
RTCS_CTuint TSessionObjectTable::GenerateSessionID()
{
m_CurrSessionID++;
if(m_CurrSessionID == 0)
m_CurrSessionID = 1;
return m_CurrSessionID;
}
void TSessionObjectTable::Snapshot(FILE* fp)
{
if(!fp)
return;
TSessionObject* ret_obj;
RTCS_CTuint ret_sessionid;
POSITION pos = NULL;
//Lock();
RTCS_CTuint TotalCount = GetCount();
fprintf(fp, "Total Session Count = %d.\n", TotalCount);
pos = GetStartPosition();
while(pos)
{
ret_obj = NULL;
GetNextAssoc(pos, ret_sessionid, ret_obj);
if(ret_obj)
{
ret_obj->Snapshot(fp);
}
}
//Unlock();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -