|
onAddBuddyRequest
DescriptionHandles
incoming requests for users to add the gateway user name as one
of their buddies.
SyntaxonAddBuddyRequest(CFEvent)
ParametersThe
method must take one parameter, a CFEvent structure with the following fields:
Field
|
Description
|
gatewayType
|
Gateway type, either XMPP or SAMETIME
|
gatewayID
|
The ID of the gateway instance, as configured
in ColdFusion Administrator
|
originatorID
|
The IM ID of the message originator
|
cfcMethod
|
This CFC method; by default, onAddBuddyRequest.
|
data.MESSAGE
|
The message that was sent with the request
|
data.SENDER
|
The sender’s ID; identical to the originatorID
field value
|
data.RECIPIENT
|
The recipient’s ID, as specified in the
gateway’s configuration file
|
data.TIMESTAMP
|
The date and time when the message was sent
|
ReturnsThe
function can optionally return a value to send a response message.
The return structure must contain the following fields:
Field
|
Description
|
command
|
One of the following:
accept Accept
the request to add you as a buddy. ColdFusion adds the user to the
permit list of users that can get status information.
decline Deny request to add you as a buddy. ColdFusion adds
the user to the deny list of users that can get status information.
noact Take no action. ColdFusion does not respond to the
requestor.
|
buddyID
|
ID to which to send the message. Normally,
the value of the CFEvent.data.SENDER field. Not used with the noact command.
|
reason
|
A text message describing the reason for
the action. Not used with the noact command.
|
ExampleThe
following example searches for the requested buddy’s name in a data
source and, if it finds a unique entry, adds the buddy and updates
the buddy’s status information in an Application scope buddyStatus
structure. If it doesn’t find the name, it declines the buddy. If
there are multiple entries for the buddy name in the database, it
tells the gateway not to respond. It logs all actions.
<cffunction name="onAddBuddyRequest">
<cfargument name="CFEvent" type="struct" required="YES">
<cfquery name="buddysearch" datasource="cfdocexamples">
SELECT IM_ID
FROM Employees
WHERE IM_ID = '#CFEvent.Data.SENDER#'
</cfquery>
<cflock scope="APPLICATION" timeout="10" type="EXCLUSIVE">
<cfscript>
// If the name is in the DB once, accept; if it is missing, decline.
// If it is in the DB multiple times, take no action.
if (buddysearch.RecordCount IS 0) {
action="decline";
reason="Invalid ID";
}
else if (buddysearch.RecordCount IS 1) {
action="accept";
reason="Valid ID";
//Add the buddy to the buddy status structure only if accepted.
if (NOT StructKeyExists(Application,
"buddyStatus")) {
Application.buddyStatus=StructNew();
}
if (NOT StructKeyExists(Application.buddyStatus,
CFEvent.Data.SENDER)) {
Application.buddyStatus[#CFEvent.Data.SENDER#]=StructNew();
}
Application.buddyStatus[#CFEvent.Data.SENDER#].status=
"Accepted Buddy Request";
Application.buddyStatus[#CFEvent.Data.SENDER#].timeStamp=
CFEvent.Data.TIMESTAMP;
Application.buddyStatus[#CFEvent.Data.SENDER#].message=
CFEvent.Data.MESSAGE;
}
else {
action="noact";
}
</cfscript>
</cflock>
<!--- Log the request and decision information. --->
<cflog file="#CFEvent.GatewayID#Status"
text="onAddBuddyRequest; SENDER: #CFEvent.Data.SENDER# MESSAGE:
#CFEvent.Data.MESSAGE# TIMESTAMP: #CFEvent.Data.TIMESTAMP# ACTION: #action#">
<!--- Return the action decision. --->
<cfset retValue = structNew()>
<cfset retValue.command = action>
<cfset retValue.BuddyID = CFEvent.DATA.SENDER>
<cfset retValue.Reason = reason>
<cfreturn retValue>
</cffunction>
|