⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 srvmainunit.~cpp

📁 使用与中国移动CMPP2.0的短信网关
💻 ~CPP
📖 第 1 页 / 共 2 页
字号:
//短消息发送服务程序
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "srvMainUnit.h"
#include "api.h"

//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "wwdbedit"
#pragma link "Wwdbgrid"
#pragma link "Wwdbigrd"
#pragma link "Wwdbcomb"
#pragma link "Wwdotdot"
#pragma resource "*.dfm"

USEFORM("singleSubUnit.cpp", singleSubForm);

TsmsSrvForm *smsSrvForm;

int result=1;
int g_conn_id;
int g_conn_mo_id;
char cSpNumber[21],cSP_Id[7],cUserName[7],cPassWord[21],cMTgw_ip[21],cMOgw_ip[21];
int iMTport,iMOport;

int OutInfFlag=NO_OUT_INF;
int InInfFlag=NO_OUT_INF;
int OutSysInfFlag=OUT_INF;
int MisPauseFlag=MIS_PAUSE;
int MaxSubmitNum=MAX_SUBMIT_NUM;
int MaxDeliverNum=MAX_DELIVER_NUM;


//---------------------------------------------------------------------------
__fastcall TsmsSrvForm::TsmsSrvForm(TComponent* Owner)
     : TForm(Owner)
{
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::ToolButton1Click(TObject *Sender)
{
  if (PC1->ActivePageIndex != 0)
    PC1->ActivePageIndex=0;
  PnlSingle->Visible=true;
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::tlbLookClick(TObject *Sender)
{

  if (PC1->ActivePageIndex != 1)
    PC1->ActivePageIndex=1;

  OutInfFlag=OUT_INF;
  InInfFlag=OUT_INF;
  CBIn->Checked=true;
  CBOut->Checked=true;
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::tlbLookMissClick(TObject *Sender)
{
  if (PC1->ActivePageIndex != 2)
    PC1->ActivePageIndex=2;

  Query1->Close();
  Query1->Open();
}


//---------------------------------------------------------------------------
//启动服务
int __fastcall TsmsSrvForm::StartService()
{
    int i;
    String charadd,RecvTimes,QryTimes,PorcTimes,ListenPort,TimesFlag,MaxSubmit,MaxDeliver;
    String SpNumber,SP_Id,UserName,PassWord,MTgw_ip,MTport,MOgw_ip,MOport;
    String apppath;
    String bdename;
    String dbuser; 
    String dbpass; 

    int iFileHandle;
    Memo1->Lines->LoadFromFile("config.ini");

    //SP特服号码
    SpNumber = Memo1->Lines->Values["SpNumber"];
    for (i=1;i<=SpNumber.Length();i++)
    {
       charadd=SpNumber.SubString(i,1);
       cSpNumber[i-1]=charadd[1];
    }
    cSpNumber[i-1]='\0';

    //SP企业ID
    SP_Id = Memo1->Lines->Values["SP_Id"];
    for (i=1;i<=SP_Id.Length();i++)
    {
       charadd=SP_Id.SubString(i,1);
       cSP_Id[i-1]=charadd[1];
    }
    cSP_Id[i-1]='\0';

    //用户名
    UserName=Memo1->Lines->Values["UserName"];
    for (i=1;i<=UserName.Length();i++)
    {
       charadd=UserName.SubString(i,1);
       cUserName[i-1]=charadd[1];
    }
    cUserName[i-1]='\0';

    //密码
    PassWord=Memo1->Lines->Values["PassWord"];
    for (i=1;i<=PassWord.Length();i++)
    {
       charadd=PassWord.SubString(i,1);
       cPassWord[i-1]=charadd[1];
    }
    cPassWord[i-1]='\0';

    //MT的IP地址
    MTgw_ip=Memo1->Lines->Values["MTgw_ip"];
    for (i=1;i<=MTgw_ip.Length();i++)
    {
       charadd=MTgw_ip.SubString(i,1);
       cMTgw_ip[i-1]=charadd[1];
    }
    cMTgw_ip[i-1]='\0';

    //MT的端口号
    MTport=Memo1->Lines->Values["MTport"];
    iMTport=StrToInt(MTport);

    //MO的IP地址
    MOgw_ip=Memo1->Lines->Values["MOgw_ip"];
    for (i=1;i<=MOgw_ip.Length();i++)
    {
       charadd=MOgw_ip.SubString(i,1);
       cMOgw_ip[i-1]=charadd[1];
    }
    cMOgw_ip[i-1]='\0';

    //MO的端口号
    MOport=Memo1->Lines->Values["MOport"];
    iMOport=StrToInt(MOport);
    
    RecvTimes = Memo1->Lines->Values["RecvTimes"];
    PorcTimes = Memo1->Lines->Values["PorcTimes"];

    bdename=Memo1->Lines->Values["BDENAME"];
    dbuser=Memo1->Lines->Values["DBUSER"];
    dbpass=Memo1->Lines->Values["DBPASS"];

    //MO连接
    g_conn_id = CMPP_Connect(cMTgw_ip,iMTport,cUserName,cPassWord);

    if(g_conn_id >0)  //连接移动发送网关成功
    {
      TimerRe->Enabled=false;
      //TimerRe->Interval=StrToInt(RecvTimes);
      //TimerRe->Enabled=true;

      TimerProc->Enabled=false;
      TimerProc->Interval=StrToInt(PorcTimes);
      TimerProc->Enabled=true;

      DB1->Close();
      DB1->AliasName=bdename;
      try
      {
        DB1->Params->Add("username="+dbuser);
        DB1->Params->Add("password="+dbpass);
        DB1->Open();
      }
      catch (...)
      {
        ShowMessage("连接数据库服务器失败!");
        return RT_ERR;
      }
      OutAllInf(INF_TYPE_SYS,"连接移动发送网关成功.");
      return RT_OK;
    }
    else            //连接移动发送网关失败
    {
      return RT_ERR;
    }
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::FormCreate(TObject *Sender)
{
  //窗口建立事件

  //启动服务
  if (RT_ERR==StartService())
      ShowMessage("连接移动网关失败,不能收发数据包!");

  if (Query1->Active)                 //如果是激活的,则关闭之
      Query1->Close();

  if (PC1->ActivePageIndex != 3)      //显示系统运行信息
      PC1->ActivePageIndex=3;

  CBSysInf->Checked=true;
  CBOut->Checked=true;
  CBIn->Checked=true;
  InInfFlag=OUT_INF;
  OutInfFlag=OUT_INF;
  OutSysInfFlag=OUT_INF;

}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::BSubmitClick(TObject *Sender)
{
   int 	nRetCode;
   __int64 msgid;

   if(MsgContent->Text == "")
   {
     ShowMessage("消息内容不可为空!");
     MsgContent->SetFocus();
     return;
   }

   if(MobileNumber->Text == "")
   {
     ShowMessage("发送手机号码不能为空!");
     MobileNumber->SetFocus();
     return;
   }

   //发送短消息
   if (g_conn_id>0)                                           //处于连接状态才可发送短消息
   {
      String mobilenumber=Trim(MobileNumber->Text);
      String mobilecontent=Trim(MsgContent->Text);            //消息内容
      char charnumber[20],charmobilecontent[200];
      String charadd;
      int length=mobilecontent.Length();
      int i;
      for (i=1;i<=mobilenumber.Length();i++)
      {
         charadd=mobilenumber.SubString(i,1);
         charnumber[i-1]=charadd[1];
      }
      charnumber[i-1]='\0';

      for (i=1;i<=mobilecontent.Length();i++)
      {
         charadd=mobilecontent.SubString(i,1);
         charmobilecontent[i-1]=charadd[1];
      }
      charmobilecontent[i-1]='\0';

      nRetCode = CMPP_Brief_Submit(cMTgw_ip,
                             iMTport,
                             cUserName,
                             cPassWord,
                             &msgid,
                             3,
                             "TEST",
                             15,
                             cSP_Id,
                             "01",
                             "000000",
                             "0",
                             "0",
                             0,
                             0,
                             0,
                             "0",
                             cSpNumber,
                             1,
                             charnumber,
                             charmobilecontent,
                             length,
                             0);

      if(nRetCode==0)
      {
         ShowMessage("发送成功!");
         MobileNumber->Text="13899930321";
         OutAllInf(INF_TYPE_OUT,"给手机:"
                        +mobilenumber
                        +"的消息: "
                        +mobilecontent
                        +",发送成功!");
      }
      else
      {
         ShowMessage("发送失败!");
         MobileNumber->Text="13899930321";
         OutAllInf(INF_TYPE_OUT,"给手机:"
                        +mobilenumber
                        +"的消息: "
                        +mobilecontent
                        +",发送失败!");
      }

  }
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::BCloseClick(TObject *Sender)
{
  //关闭发送窗口
  PnlSingle->Visible=false;
}


//---------------------------------------------------------------------------
//收包处理函数
int __fastcall TsmsSrvForm::ProcReceive()
{
   return 0;
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::TimerReTimer(TObject *Sender)
{
  TimerRe->Enabled=false;
  //自动清除发送记录
  if (MOutDat->Lines->Count>100)
  {
     MOutDat->Clear();
  }
  ProcReceive();
  TimerRe->Enabled=true;
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::CBInClick(TObject *Sender)
{
  //是否观察发送的数据
  if (true==CBIn->Checked)
    InInfFlag=OUT_INF;
  else
    InInfFlag=NO_OUT_INF;
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::CBOutClick(TObject *Sender)
{
  //是否观察接收的数据
  if (true==CBOut->Checked)
    OutInfFlag=OUT_INF;
  else
    OutInfFlag=NO_OUT_INF;
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::BtClearDatClick(TObject *Sender)
{
  MOutDat->Clear();
  MInDat->Clear();
}


//---------------------------------------------------------------------------
void __fastcall TsmsSrvForm::BtSaveClick(TObject *Sender)
{
  //保存至文件
  if (0!=MOutDat->Lines->Count)
  {
    SD1->Title="保存发送数据记录";
    SD1->FileName="OutDat"
          +FormatDateTime("YYYY-mm-dd-hh-mm",Now())
          +".log";
    if(SD1->Execute())
    {
      MOutDat->Lines->SaveToFile(SD1->FileName);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -