Sorry if
this may sound stupid or something, I am just new to developing web
applications using .NET. I have a web page that connects to a SMSC for sending
SMS spiels.
At first, i tried to put everything(connection, sending and receiving to SMSC)
inside Page Load. This works just fine. But when i tried to place my SMSC
functionalities inside classes I encountered a problem.
Problem : When i put break points on the lines in my page load and start to run
and DEBUG my web page, everything works out fine. But when I delete the break
points, the flow seems to skip SMSC functionalities(the classes).
Friend.aspx (code snippet from Page_Load)
TcpClient tcpc = smscc.ConnectClient(ConfigurationManager.AppSettings.Get("SMSCServer"),
int.Parse(ConfigurationManager.AppSettings.Get("SMSCPort")));
NetworkStream netStream = smscc.getConnectedNetworkStream();
if (netStream == null)
{
netStream = tcpc.GetStream();
}
StatusLabel.Text = cimdio.readStreamBeforeLogin(netStream, smscc.readBuffer);
string loginMessage =
cimdm.createLoginParams(ConfigurationManager.AppSettings.Get("SMSCUsername"),
ConfigurationManager.AppSettings.Get("SMSCPassword"));
bool tempBool = cimdio.isSuccessfulLogin(netStream, smscc.writeBuffer,
smscc.readBuffer, loginMessage);
if (tempBool)
{
string submitMessage = cimdm.createSubmitParams(senderMIN, "222",
"00", "00",
ConfigurationManager.AppSettings.Get("SenderSpiel"));
cimdio.sendMessage(netStream, smscc.writeBuffer, submitMessage);
string submitMessage2 = cimdm.createSubmitParams(friendMIN, "222",
"00", "00",
ConfigurationManager.AppSettings.Get("FriendSpiel"));
cimdio.sendMessage(netStream, smscc.writeBuffer, submitMessage2);
StatusLabel.Text = "sent messages";
}
string logoutMessage = cimdm.createLogoutParams();
cimdio.logout(tcpc, netStream, smscc.writeBuffer, logoutMessage);
public class SMSCConnection
{
private TcpClient client = new TcpClient();
private NetworkStream clientStream;
public byte[] writeBuffer;
public byte[] readBuffer = new byte[2048];
public TcpClient ConnectClient(string uid, int pw)
{
client.Connect(uid, pw);
return client;
}
public NetworkStream getConnectedNetworkStream()
{
if (this.client.Connected)
{
clientStream = this.client.GetStream();
return clientStream;
}
else
{
clientStream = null;
return clientStream;
}
}
}
public class CIMDMessages
{
private const int _tab = 9;
private const int _startText = 2;
private const int _endText = 3;
private string message;
private string _packetNumber = "000";
private string Chr(int p_intVal)
{
byte[] bytData = new byte[] { (byte)p_intVal };
return Encoding.GetEncoding(1252).GetString(bytData);
}
//CIMDMessage cimdm = new CIMDMessage();
public string createLoginParams(string uid, string pw)
{
string tempMessage = String.Format("010:{0}{1}011:{2}", uid, Chr(_tab), pw);
tempMessage = appendCIMDHeader(OperationCode.login, tempMessage);
this.message = appendCIMDTrailerTabbed(tempMessage);
return this.message;
}
public string createSubmitParams(string destNumber, string senderNumber, string tariffClass, string serviceDesc, string userData)
{
string tempMessage = String.Format("021:{0}{1}023:{2}{3}064:{4}{5}065:{6}{7}033:{8}", destNumber, Chr(_tab), senderNumber, Chr(_tab), tariffClass, Chr(_tab), serviceDesc, Chr(_tab), userData);
tempMessage = appendCIMDHeader(OperationCode.submit, tempMessage);
this.message = appendCIMDTrailerTabbed(tempMessage);
return this.message;
}
public string createLogoutParams()
{
string tempMessage = "";
tempMessage = appendCIMDHeader(OperationCode.logout, tempMessage);
this.message = appendCIMDTrailer(tempMessage);
return this.message;
}
private int getOpCode(OperationCode oper)
{
int operationCode = 0;
switch (oper.ToString())
{
case "login":
operationCode = 1;
break;
case "logout":
operationCode = 2;
break;
case "submit":
operationCode = 3;
break;
case "enquire":
operationCode = 4;
break;
case "deliveryrequest":
operationCode = 5;
break;
case "cancel":
operationCode = 6;
break;
case "delivermessage":
operationCode = 20;
break;
case "deliverstatusreport":
operationCode = 23;
break;
case "set":
operationCode = 8;
break;
case "get":
operationCode = 9;
break;
case "alive":
operationCode = 40;
break;
}
return operationCode;
}
private string appendCIMDHeader(OperationCode opType, string paramMessage)
{
string _messageHeader;
if (_packetNumber.Equals("000"))
{
_packetNumber = "001";
}
else
{
try
{
int packetNumberInt = int.Parse(_packetNumber);
packetNumberInt = packetNumberInt + 2;
_packetNumber = packetNumberInt.ToString();
//try to append zero's if length less than 3
if (_packetNumber.Length < 3)
{
_packetNumber = _packetNumber.PadLeft(3, '0');
}
}
catch (FormatException)
{
_packetNumber = "001";
}
}
string operationCode = getOpCode(opType).ToString();
if (operationCode.Length < 2)
{
operationCode = operationCode.PadLeft(2, '0');
}
////////////////////////////
_messageHeader = Chr(_startText) + operationCode + ":" + _packetNumber + Chr(_tab);
return _messageHeader + paramMessage;
}
private string appendCIMDTrailerTabbed(string paramMessage)
{
return paramMessage + Chr(_tab) + Chr(_endText);
}
private string appendCIMDTrailer(string paramMessage)
{
return paramMessage + Chr(_endText);
}
}
public class CIMDIO
{
public void sendMessage(NetworkStream netStream, byte[] writeBuffer, string message)
{
writeBuffer = Encoding.ASCII.GetBytes(message);
netStream.Write(writeBuffer, 0, writeBuffer.Length);
}
public bool isSuccessfulLogin(NetworkStream netStream, byte[] writeBuffer, byte[] readBuffer, string loginMessage)
{
StringBuilder loginResultMessage = new StringBuilder();
writeBuffer = Encoding.ASCII.GetBytes(loginMessage);
netStream.Write(writeBuffer, 0, writeBuffer.Length);
if (netStream.CanRead)
{
int numberOfBytesRead = 0;
do
{
numberOfBytesRead = netStream.Read(readBuffer, 0, readBuffer.Length);
loginResultMessage.AppendFormat("{0}", Encoding.ASCII.GetString(readBuffer, 0, numberOfBytesRead));
}
while (netStream.DataAvailable);
if (loginResultMessage.ToString().Contains("51:001"))
return true;
else
return false;
}
else
{
return false;
}
}
public string readStreamBeforeLogin(NetworkStream netStream, byte[] readBuffer)
{
StringBuilder loginResultMessage = new StringBuilder();
if (netStream != null)
{
while (netStream.DataAvailable)
{
int numberOfBytesRead = netStream.Read(readBuffer, 0, readBuffer.Length);
loginResultMessage.AppendFormat("{0}", Encoding.ASCII.GetString(readBuffer, 0, numberOfBytesRead));
}
return loginResultMessage.ToString();
}
else
return "";
}
public void logout(TcpClient tcpc, NetworkStream netStream, byte[] writeBuffer, string logoutMessage)
{
sendMessage(netStream, writeBuffer, logoutMessage);
netStream.Close();
tcpc.Close();
}
}
PLEASE HELP.