variables.currentNode = "";
variables.rootNode = "";
variables.returnChar = chr(13);
variables.type = "SMS";
variables.gatewayID="unknown";
variables.debug = false;
variables.aStringBuffer = arrayNew(1);
variables.start = 1;
variables.max = 3;
variables.maxlength = 254;
variables.currentNode = "";
variables.rootNode = "";
variables.type = arguments.type;
variables.gatewayid = arguments.gatewayID;
variables.aStringBuffer = arrayNew(1);
variables.start = 1;
variables.max = 3;
variables.maxlength = 254;
// println("navigate(" & str & ")");
if (str EQ "B")
{
goBack();
return;
}
else if (variables.currentNode.isLeaf())
{
return;
}
found = false;
aChildren = variables.currentNode.getChildren();
for(i = 1; i LTE arrayLen(aChildren); i = i + 1)
{
if (aChildren[i].getKey() EQ arguments.str)
{
variables.currentNode = aChildren[i];
break;
}
}
returnString = variables.returnChar;
aChildren = variables.currentNode.getChildren();
for(i = 1; i LTE arrayLen(aChildren); i = i + 1)
{
returnString = returnString & aChildren[i].getKey() & " - " & aChildren[i].getName() & variables.returnChar;
}
if (NOT isSimpleValue(variables.currentNode.getParent()))
returnString = returnString & "B - Back" & variables.returnChar;
else if (isdefined("variables.greeting"))
returnString = variables.greeting & variables.returnChar & returnString;
found = false;
aChildren = variables.currentNode.getChildren();
for(i = 1; i LTE arrayLen(aChildren); i = i + 1)
{
if (aChildren[i].getKey() EQ arguments.str)
{
found = true;
break;
}
}
if (NOT found AND str EQ "B")
found = true;
println("++++++++++++++++++++++++++++++++++++++");
println("RECEIVED MESSAGE");
println("message: " &arguments.message);
println("from: " &arguments.message_from);
println("to: " &arguments.message_to);
// check to see if the command is a valid menu option based on the user's current location
if (validate(arguments.message))
{
// make sure that the buffer is cleared
variables.aStringBuffer = arrayNew(1);
navigate(arguments.message);
if (variables.currentNode.isLeaf())
{
// invoke the "enter" method to see if the application sends something back on first entery
if( variables.currentNode.isEnterMode() )
{
str = trim(variables.currentNode.invokeCFC(message=arguments.message, message_from=arguments.message_from, message_to=arguments.message_to, networkInfo=arguments.networkInfo, method="enter"));
}
else
{
str = trim(variables.currentNode.invokeCFC(message=arguments.message, message_from=arguments.message_from, message_to=arguments.message_to, networkInfo=arguments.networkInfo, method=variables.currentNode.getMethod()));
goBack();
}
// the app has sent something back so send it to the user
if (len(str) neq 0)
{
str = reReplace(str, "
", variables.returnChar, "all");
if (len(str) GTE variables.maxlength)
{
// chunk the string into an array
variables.aStringBuffer = arrayNew(1);
for (i = 1; i LTE evaluate(len(str) / variables.maxlength + 1); i = i + 1)
{
arrayAppend(variables.aStringBuffer, Mid(str, i*variables.maxlength-variables.maxlength+1, variables.maxlength));
}
upperLoop = min(arrayLen(variables.aStringBuffer), variables.max);
for (i = 1; i LTE upperLoop; i = i + 1)
{
sendMessage(variables.aStringBuffer[1], message_to, message_from, networkInfo);
ArrayDeleteAt(variables.aStringBuffer, 1);
}
if (arrayLen(variables.aStringBuffer) NEQ 0)
{
sendMessage('"M"ore', arguments.message_to, arguments.message_from, arguments.networkInfo);
}
}
else
{
sendMessage(str, arguments.message_to, arguments.message_from, arguments.networkInfo);
}
}
// the app did not return anything from enter() so inform the user that they have entered the app
else
{
sendMessage("Entering " & variables.currentNode.getName(), arguments.message_to, arguments.message_from, arguments.networkInfo);
}
}
else
{
sendMessage(displayMenu(), arguments.message_to, arguments.message_from, arguments.networkInfo);
}
}
// if the user has entered an application from the menu pass on the request to the registered CFC
else if (variables.currentNode.isLeaf())
{
// check if the user is requesting more from the previous session
if (arrayLen(variables.aStringBuffer) NEQ 0 AND left(arguments..message, 1) EQ "M")
{
upperLoop = min(arrayLen(variables.aStringBuffer), variables.max);
for (i = 1; i LTE upperLoop; i = i + 1)
{
sendMessage(variables.aStringBuffer[1], arguments.message_to, arguments.message_from, arguments.networkInfo);
ArrayDeleteAt(variables.aStringBuffer, 1);
}
if (arrayLen(variables.aStringBuffer) NEQ 0)
{
sendMessage('"M"ore', arguments.message_to, arguments.message_from, arguments.networkInfo);
}
}
else
{
str = trim(variables.currentNode.invokeCFC(message=arguments.message, message_from=arguments.message_from, message_to=arguments.message_to, networkInfo=arguments.networkInfo));
str = reReplace(str, "
", variables.returnChar, "all");
if (len(str) GTE variables.maxlength)
{
// chunk the string into an array
variables.aStringBuffer = arrayNew(1);
for (i = 1; i LTE evaluate(len(str) / variables.maxlength + 1); i = i + 1)
{
arrayAppend(variables.aStringBuffer, Mid(str, i*variables.maxlength-variables.maxlength+1, variables.maxlength));
}
upperLoop = min(arrayLen(variables.aStringBuffer), variables.max);
for (i = 1; i LTE upperLoop; i = i + 1)
{
sendMessage(variables.aStringBuffer[1], arguments.message_to, arguments.message_from, arguments.networkInfo);
ArrayDeleteAt(variables.aStringBuffer, 1);
}
if (arrayLen(variables.aStringBuffer) NEQ 0)
{
sendMessage('"M"ore', arguments.message_to, arguments.message_from, arguments.networkInfo);
}
}
else
sendMessage(str, arguments.message_to, arguments.message_from, arguments.networkInfo);
}
}
// unknown command and the user is not in an application so just show the current location in the menu system
else
{
sendMessage(displayMenu(), arguments.message_to, arguments.message_from, arguments.networkInfo);
}
println("++++++++++++++++++++++++++++++++++++++");
if (variables.type EQ "IM")
{
println("SENDING IM");
mesg = structNew();
mesg.command = "submit";
mesg.buddyID = arguments.message_to;
mesg.message = arguments.message;
sendGatewayMessage(variables.gatewayID, mesg);
}
else if (variables.type EQ "SMS")
{
println("SENDING SMS");
mesg = structNew();
mesg.command = "submit";
mesg.sourceAddress = arguments.message_from;
mesg.destAddress = arguments.message_to;
mesg.shortMessage = arguments.message;
sendGatewayMessage(variables.gatewayID, mesg);
}
else if (variables.type EQ "Socket")
{
println("SENDING Socket Msg");
mesg = structNew();
mesg.MESSAGE = arguments.message;
mesg.OriginatorID = arguments.message_to;
sendGatewayMessage(variables.gatewayID, mesg);
}
else
{
println("Don't know how to send the message: unknown TYPE");
}
println("SENT MESSAGE");
println("GatewayId: " & variables.gatewayID);
println("message: " &arguments.message);
println("to: " &arguments.message_to);
println("from: " &arguments.message_from);