1

i have registered event MessageReceivedEventHandler to recieve incoming sms in modem. i am using gsmcomm library to do it. I cannot read incoming short message sms, but when incoming message didn't short message i have no problem and it worked correctly.

this is my code :

private void comm_MessageReceived(object sender, MessageReceivedEventArgs e)
{
    try
    {
        var obj = e.IndicationObject;
        if (obj is MemoryLocation)
        {
            var loc = (MemoryLocation)obj;
            var msgs = string.Format("Pesan Baru Diterima dalam SIM \"{0}\", index {1}.", loc.Storage, loc.Index);
            MessageBox.Show(msgs, "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);

            DecodedShortMessage[] messages = CommSetting.comm.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Sim);
            foreach (DecodedShortMessage message in messages)
            {
                StoreSMSToDatabase(message.Data); //save sms recieve to database
            }
            return;
        }
        if (obj is ShortMessage) // when short message recieve couldn't store to database
        {
            var msgs = (ShortMessage)obj;
            var pdu = CommSetting.comm.DecodeReceivedMessage(msgs);
            MessageBox.Show("Message Recieve");

        DecodedShortMessage[] messages = CommSetting.comm.ReadMessages(PhoneMessageStatus.All, PhoneStorageType.Sim);
        foreach (DecodedShortMessage message in messages)
        {
            StoreSMSToDatabase(message.Data); //save sms recieve to database
        }
        return; 
    }
}
catch(Exception ex)
{
    MessageBox.Show(ex.Message);
    }
}

here is a code to store to database:

private void StoreSMSToDatabase(SmsPdu pdu)
{
    if (pdu is SmsDeliverPdu)
    {
        SmsDeliverPdu data = (SmsDeliverPdu)pdu;
        var phoneNumber = data.OriginatingAddress; 
        var msg = data.UserDataText;
        var tanggal = string.Format("{0:dd/MM/yyyy}", data.SCTimestamp.ToDateTime());
        var jam = string.Format("{0:HH:mm:ss}", data.SCTimestamp.ToDateTime());

    /*---------------------- insert into database ------------------*/
    if (koneksi_manual.con.State == ConnectionState.Open)
    {
        koneksi_manual.con.Close();
    }
        koneksi_manual.con.Open();

    OracleCommand cmd = new OracleCommand();
    cmd.CommandText = @"INSERT INTO PESANMASUK (IDMASUK, TANGGALMASUK, JAM, NOMERHP, ISIPESAN, USRPPP) VALUES 
                        (SQ_PESANMASUK.NEXTVAL, '" + tanggal + "', '" + jam + "', '" + phoneNumber + "', '" + msg.Replace("'", "''") + "', '"+ Program.NilaiIDUser +"')";
    cmd.Connection = koneksi_manual.con;
    cmd.ExecuteReader();
    /*-------------------------------------------------------------------------*/

    //delete all messages in storage defined by you: sim or mem
    CommSetting.comm.DeleteMessages(DeleteScope.All, PhoneStorageType.Sim);
    }
}

anyone can suggest me how to read short message and store it into database?

aminvincent
  • 553
  • 1
  • 12
  • 43

0 Answers0