Changeset 2828 for trunk/rms

Show
Ignore:
Timestamp:
05/06/02 13:49:48 (7 years ago)
Author:
emostar
Message:

New version.

Supports viewing user events.

Location:
trunk/rms/src
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/rms/src/main.cpp

    r2522 r2828  
    3434const char *LP_Version() 
    3535{ 
    36   static const char version[] = "0.23"; 
     36  static const char version[] = "0.24"; 
    3737  return version; 
    3838} 
  • trunk/rms/src/rms.cpp

    r2478 r2828  
    4040const unsigned short CODE_LISTxDONE = 206; 
    4141const unsigned short CODE_LOGxTYPE = 207; 
     42const unsigned short CODE_VIEWxMSG = 208; 
     43const unsigned short CODE_VIEWxURL = 209; 
     44const unsigned short CODE_VIEWxCHAT= 210; 
     45const unsigned short CODE_VIEWxFILE = 211; 
     46const unsigned short CODE_VIEWxTIME = 220; 
     47const unsigned short CODE_VIEWxFLAGS = 221; 
     48const unsigned short CODE_VIEWxTEXTxSTART = 222; 
     49const unsigned short CODE_VIEWxTEXTxEND = 223; 
     50const unsigned short CODE_VIEWxUNKNOWN = 299; 
    4251// 300 - further action required 
    4352const unsigned short CODE_ENTERxUIN = 300; 
     
    5160const unsigned short CODE_INVALIDxSTATUS = 403; 
    5261const unsigned short CODE_EVENTxCANCELLED = 404; 
     62const unsigned short CODE_VIEWxNONE = 405; 
    5363// 500 - server error 
    5464const unsigned short CODE_EVENTxTIMEDOUT = 500; 
    5565const unsigned short CODE_EVENTxFAILED = 501; 
    5666const unsigned short CODE_EVENTxERROR = 502; 
    57  
    5867 
    5968const unsigned short STATE_UIN = 1; 
     
    98107    "Dump log messages { <log types> }." }, 
    99108  { "VIEW", &CRMSClient::Process_VIEW, 
    100     "View event { <uin> } (not yet implemented)." }, 
     109    "View event (next or specific user) { [ <uin> ] }." }, 
    101110  { "AR", &CRMSClient::Process_AR, 
    102111    "Set your (or a user custom) auto response { [ <uin> ] }." } 
     
    10211030 
    10221031 
     1032/*--------------------------------------------------------------------------- 
     1033 * CRMSClient::Process_VIEW 
     1034 * 
     1035 * Command: 
     1036 *   VIEW <uin> 
     1037 * 
     1038 * Response: 
     1039 * 
     1040 *-------------------------------------------------------------------------*/ 
    10231041int CRMSClient::Process_VIEW() 
    10241042{ 
    1025   unsigned long nUin = atol(data_arg); 
     1043  unsigned long nUin = 0; 
     1044 
     1045  if (*data_arg != '\0') 
     1046  { 
     1047    nUin = atol(data_arg); 
     1048  } 
     1049  else 
     1050  { 
     1051    // XXX Check system messages first 
     1052 
     1053    // Check user messages now 
     1054    FOR_EACH_USER_START(LOCK_R) 
     1055    { 
     1056      if(pUser->NewMessages() > 0) 
     1057        nUin = pUser->Uin(); 
     1058    } 
     1059    FOR_EACH_USER_END 
     1060   
     1061    if (nUin == 0) 
     1062    { 
     1063      fprintf(fs, "%d No new messages.\n", CODE_VIEWxNONE); 
     1064      return fflush(fs); 
     1065    } 
     1066  } 
    10261067 
    10271068  ICQUser *u = gUserManager.FetchUser(nUin, LOCK_W); 
     
    10311072    return fflush(fs); 
    10321073  } 
     1074 
     1075  CUserEvent *e = u->EventPop(); 
     1076  if (e) 
     1077  { 
     1078    char szEventHeader[75]; // Allows 50 chars for a nick 
     1079    switch (e->SubCommand()) 
     1080    { 
     1081      case ICQ_CMDxSUB_MSG: 
     1082        sprintf(szEventHeader, "%d Message ", CODE_VIEWxMSG); 
     1083        break; 
     1084 
     1085      case ICQ_CMDxSUB_URL: 
     1086        sprintf(szEventHeader, "%d URL ", CODE_VIEWxURL); 
     1087        break; 
     1088 
     1089      case ICQ_CMDxSUB_CHAT: 
     1090        sprintf(szEventHeader, "%d Chat Request ", CODE_VIEWxCHAT); 
     1091        break; 
     1092 
     1093      case ICQ_CMDxSUB_FILE: 
     1094        sprintf(szEventHeader, "%d File Request ", CODE_VIEWxFILE); 
     1095        break; 
     1096 
     1097      default: 
     1098        sprintf(szEventHeader, "%d Unknown Event ", CODE_VIEWxUNKNOWN); 
     1099    } 
     1100 
     1101    strcat(szEventHeader, "from "); 
     1102    strncat(szEventHeader, u->GetAlias(), 50); 
     1103    strcat(szEventHeader, "\n\0"); 
     1104 
     1105    // Write out the event header 
     1106    fprintf(fs, szEventHeader); 
     1107 
     1108    // Timestamp 
     1109    char szTimestamp[39]; 
     1110    char szTime[25]; 
     1111    time_t nMessageTime = e->Time(); 
     1112    struct tm *pTM = localtime(&nMessageTime); 
     1113    strftime(szTime, 25, "%H:%M:%S", pTM); 
     1114    sprintf(szTimestamp, "%d Sent At ", CODE_VIEWxTIME); 
     1115    strncat(szTimestamp, szTime, 25); 
     1116    strcat(szTimestamp, "\n\0"); 
     1117    fprintf(fs, szTimestamp); 
     1118 
     1119    // Message 
     1120    fprintf(fs, "%d Message Start\n", CODE_VIEWxTEXTxSTART); 
     1121    fprintf(fs, e->Text()); 
     1122    fprintf(fs, "%d Message Complete\n", CODE_VIEWxTEXTxEND); 
     1123  } 
     1124  else 
     1125  { 
     1126    fprintf(fs, "%d Invalid event\n", CODE_EVENTxERROR); 
     1127  } 
     1128 
    10331129  gUserManager.DropUser(u); 
    10341130 
    1035   return 0; 
    1036 } 
    1037  
    1038  
     1131  return fflush(fs); 
     1132} 
     1133 
     1134