Hi Everyone,
My application waits for sms from mobile phone. When I send long message to smsc via mobile phone.My message comes as splitted with two parts to application.
And also May I ask what
"UserDataPdu.Headers.AddConcatenatedShortMessages8bit" method is for?Can I use it to deliver long messages without split.
Any help would be appreciated.
Thanks
DeliverSm receives splitted message
Moderator: alt
If your SMSC sends information about concatenated messages than you can combine message parts.
Here is code from SmppClientDemo
Here is code from SmppClientDemo
Code: Select all
private Dictionary<string, UserData[]> collector = new Dictionary<string, UserData[]>();
private void client_evDeliverSm(object sender, DeliverSm data)
{
if (data.SegmentNumber > 0)
{
AddMessageSegmentToCollector(data);
string messageText = SmppClient.GetMessageText(data.UserDataPdu.ShortMessage, data.DataCoding);
AddToLog("DeliverSm part received : "
+ " Sequence : " + data.Sequence.ToString()
+ " SourceAddr : " + data.SourceAddr
+ " Segments ( Number: " + data.SegmentNumber.ToString()
+ ", Total : " + data.TotalSegments.ToString()
+ ", Reference : " + data.MessageReferenceNumber.ToString()
+ " ) Coding : " + data.DataCoding.ToString()
+ " MessageText : " + messageText);
if (IsLastSegment(data))
{
string fullMessage = RetrieveFullMessage(data);
AddToLog("Full message: " + fullMessage);
}
}
else
{
string messageText = SmppClient.GetMessageText(data.UserDataPdu.ShortMessage, data.DataCoding);
AddToLog("DeliverSm received : "
+ " Sequence : " + data.Sequence.ToString()
+ " SourceAddr : " + data.SourceAddr
+ " Coding : " + data.DataCoding.ToString()
+ " MessageText : " + messageText);
}
}
private void AddMessageSegmentToCollector(DeliverSm data)
{
UserData[] userDataArray = null;
if (collector.ContainsKey(data.SourceAddr + data.MessageReferenceNumber))
{
userDataArray = (UserData[])collector[data.SourceAddr + data.MessageReferenceNumber];
}
else
{
userDataArray = new UserData[data.TotalSegments];
}
userDataArray[data.SegmentNumber - 1] = data.UserDataPdu;
collector[data.SourceAddr + data.MessageReferenceNumber] = userDataArray;
}
private bool IsLastSegment(DeliverSm data)
{
bool finished = false;
UserData[] userDataArray = null;
string key = data.SourceAddr + data.MessageReferenceNumber;
if (collector.ContainsKey(key))
{
userDataArray = (UserData[])collector[key];
finished = true;
foreach (UserData d in userDataArray)
{
if (d == null)
{
finished = false;
break;
}
}
}
return finished;
}
private string RetrieveFullMessage(DeliverSm data)
{
string message = null;
string key = data.SourceAddr + data.MessageReferenceNumber;
if (collector.ContainsKey(key))
{
UserData[] userDataArray = (UserData[])collector[key];
UserData fullUserData = null;
foreach (UserData d in userDataArray)
{
fullUserData += d;
}
message = SmppClient.GetMessageText(fullUserData.ShortMessage, data.DataCoding);
collector.Remove(key);
}
return message;
}