📄 service.java
字号:
* A (probably empty) list that will be populated with inbound
* messages read.
* @param msgClass
* Filtering: Class of messages that need to be read.
* @param gateway
* The gateway object from which to read messages.
* @return The number of messages read.
* @throws TimeoutException
* The gateway did not respond in a timely manner.
* @throws GatewayException
* A Gateway error occurred.
* @throws IOException
* An IO error occurred.
* @throws InterruptedException
* The call was interrupted.
* @see MessageClasses
* @see AGateway
*/
public int readMessages(Collection<InboundMessage> msgList, MessageClasses msgClass, AGateway gateway) throws TimeoutException, GatewayException, IOException, InterruptedException
{
synchronized (getGateways())
{
try
{
gateway.readMessages(msgList, msgClass);
}
catch (TimeoutException e)
{
getLogger().logWarn("readMessages(): Gateway " + gateway.getGatewayId() + " does not respond, marking for restart.", null, null);
gateway.setGatewayStatus(GatewayStatuses.RESTART);
}
catch (IOException e)
{
getLogger().logWarn("readMessages(): Gateway " + gateway.getGatewayId() + " throws IO errors, marking for restart.", null, null);
gateway.setGatewayStatus(GatewayStatuses.RESTART);
}
}
return msgList.size();
}
/**
* Reads a specific gateway for a message matching the given Memory Location
* and Memory Index.
* <p>
* This is a "dummy" approach. It does not implement the CGMR command,
* rather it reads all messages and searches for a match.
*
* @param gatewayId
* The Gateway ID of the gateway to read from.
* @param memLoc
* The memory location string.
* @param memIndex
* The memory index.
* @return The message read. Null if no relevant message is found or if the
* Gateway ID given is invalid.
* @throws TimeoutException
* The gateway did not respond in a timely manner.
* @throws GatewayException
* A Gateway error occurred.
* @throws IOException
* An IO error occurred.
* @throws InterruptedException
* The call was interrupted.
*/
public InboundMessage readMessage(String gatewayId, String memLoc, int memIndex) throws TimeoutException, GatewayException, IOException, InterruptedException
{
InboundMessage msg = null;
synchronized (getGateways())
{
AGateway gateway = findGateway(gatewayId);
if ((gateway != null) && (gateway.isInbound()))
{
try
{
msg = gateway.readMessage(memLoc, memIndex);
}
catch (TimeoutException e)
{
getLogger().logWarn("readMessages(): Gateway " + gateway.getGatewayId() + " does not respond, marking for restart.", null, null);
gateway.setGatewayStatus(GatewayStatuses.RESTART);
}
catch (IOException e)
{
getLogger().logWarn("readMessages(): Gateway " + gateway.getGatewayId() + " throws IO errors, marking for restart.", null, null);
gateway.setGatewayStatus(GatewayStatuses.RESTART);
}
}
}
return msg;
}
/**
* Sends a single message. The following logic is applied in order for
* SMSLib to decide from which gateway it will send the message:<br>
* 1. If the message holds gateway information (member field "gatewayId"),
* SMSLib will try to send it from that gateway.<br>
* 2. If the message does not hold gateway information (member field
* "gatewayId" is empty or "*") then if router and load balancer is defined,
* then message is processed by these classes.<br>
* 3. Otherwise the method selects the first outbound-capable gateway
* defined and sends the message from it.<br>
* The method blocks until the message is actually sent (synchronous
* operation).
*
* @param msg
* An OutboundMessage object.
* @return True if the message is sent.
* @throws TimeoutException
* The gateway did not respond in a timely manner.
* @throws GatewayException
* A Gateway error occurred.
* @throws IOException
* An IO error occurred.
* @throws InterruptedException
* The call was interrupted.
* @see #queueMessage(OutboundMessage)
*/
public boolean sendMessage(OutboundMessage msg) throws TimeoutException, GatewayException, IOException, InterruptedException
{
synchronized (getGateways())
{
AGateway gateway = routeMessage(msg);
if (gateway != null)
{
try
{
return gateway.sendMessage(msg);
}
catch (TimeoutException e)
{
getLogger().logWarn("sendMessage(): Gateway " + gateway.getGatewayId() + " does not respond, marking for restart.", null, null);
gateway.setGatewayStatus(GatewayStatuses.RESTART);
msg.setMessageStatus(MessageStatuses.FAILED);
msg.setFailureCause(FailureCauses.GATEWAY_FAILURE);
return false;
}
catch (IOException e)
{
getLogger().logWarn("sendMessage(): Gateway " + gateway.getGatewayId() + " throws IO errors, marking for restart.", null, null);
gateway.setGatewayStatus(GatewayStatuses.RESTART);
msg.setMessageStatus(MessageStatuses.FAILED);
msg.setFailureCause(FailureCauses.GATEWAY_FAILURE);
return false;
}
}
return false;
}
}
/**
* Sends a single message from the specified gateway.
*
* @param msg
* An OutboundMessage object.
* @param gatewayId
* The id of the gateway that will be used for sending.
* @return True if the message is sent.
* @throws TimeoutException
* The gateway did not respond in a timely manner.
* @throws GatewayException
* A Gateway error occurred.
* @throws IOException
* An IO error occurred.
* @throws InterruptedException
* The call was interrupted.
* @see #sendMessage(OutboundMessage)
*/
public boolean sendMessage(OutboundMessage msg, String gatewayId) throws TimeoutException, GatewayException, IOException, InterruptedException
{
msg.setGatewayId(gatewayId);
return sendMessage(msg);
}
/**
* Sends a list of messages.
*
* @param msgList
* A list of OutboundMessage objects.
* @return The number of messages sent.
* @throws TimeoutException
* The gateway did not respond in a timely manner.
* @throws GatewayException
* A Gateway error occurred.
* @throws IOException
* An IO error occurred.
* @throws InterruptedException
* The call was interrupted.
* @see #sendMessage(OutboundMessage)
*/
public int sendMessages(Collection<OutboundMessage> msgList) throws TimeoutException, GatewayException, IOException, InterruptedException
{
int counter = 0;
for (OutboundMessage msg : msgList)
if (sendMessage(msg)) counter++;
return counter;
}
/**
* Sends a list of messages from the specified gateway.
*
* @param msgList
* A list of OutboundMessage objects.
* @param gatewayId
* The id of the gateway that will be used for sending.
* @return The number of messages sent.
* @throws TimeoutException
* The gateway did not respond in a timely manner.
* @throws GatewayException
* A Gateway error occurred.
* @throws IOException
* An IO error occurred.
* @throws InterruptedException
* The call was interrupted.
* @see #sendMessage(OutboundMessage)
*/
public int sendMessages(Collection<OutboundMessage> msgList, String gatewayId) throws TimeoutException, GatewayException, IOException, InterruptedException
{
int counter = 0;
for (OutboundMessage msg : msgList)
{
msg.setGatewayId(gatewayId);
if (sendMessage(msg)) counter++;
}
return counter;
}
/**
* Queues a message for sending. The gateway selection logic is the same as
* for sendMessage(). The method does not block - returns immediately. If
* you wish to be alerted about the fate of the message, you may implement a
* IOutboundMessageNotification listener.
*
* @param msg
* Message to be sent
* @return True if the message is accepted in the Queue.
* @see #sendMessage(OutboundMessage)
* @see IOutboundMessageNotification
*/
public boolean queueMessage(OutboundMessage msg)
{
synchronized (getGateways())
{
AGateway gateway = routeMessage(msg);
if (gateway != null) return gateway.queueMessage(msg);
return false;
}
}
/**
* Queues a message for sending from the specific gateway.
*
* @param msg
* A OutboundMessage object.
* @param gatewayId
* The id of the gateway that will be used for sending.
* @return True if the message is accepted in the Queue.
* @see #queueMessage(OutboundMessage)
*/
public boolean queueMessage(OutboundMessage msg, String gatewayId)
{
synchronized (getGateways())
{
msg.setGatewayId(gatewayId);
return queueMessage(msg);
}
}
/**
* Queues a list of messages for sending.
*
* @param msgList
* A list of OutboundMessage objects.
* @return The number of messages accepted in the Queue.
* @see #queueMessage(OutboundMessage)
*/
public int queueMessages(Collection<OutboundMessage> msgList)
{
int counter = 0;
for (OutboundMessage msg : msgList)
if (queueMessage(msg)) counter++;
return counter;
}
/**
* Queues a list of messages for sending from the specific gateway.
*
* @param msgList
* A list of OutboundMessage objects.
* @param gatewayId
* The id of the gateway to be used for sending.
* @return The number of messages accepted in the Queue.
* @see #queueMessage(OutboundMessage)
*/
public int queueMessages(Collection<OutboundMessage> msgList, String gatewayId)
{
int counter = 0;
for (OutboundMessage msg : msgList)
{
msg.setGatewayId(gatewayId);
if (queueMessage(msg)) counter++;
}
return counter;
}
/**
* Attempts to remove the specified message from the background sending
* queue. Can only be used for messages previously queued up with the
* queueMessage() calls.
*
* @param msg
* The outbound message to be unqueued.
* @return true if the message is indeed removed from the respective
* background queue.
*/
public boolean unqueueMessage(OutboundMessage msg)
{
AGateway gtw;
if (msg.getGatewayId() != null) gtw = findGateway(msg.getGatewayId());
else gtw = null;
if (gtw != null) return gtw.unqueueMessage(msg);
for (AGateway g : getGateways())
if (g.unqueueMessage(msg)) return true;
return false;
}
/**
* Deletes the specified message. The operation is not supported by all
* gateways.
*
* @param msg
* The message to be deleted. It must be a valid InboundMessage
* object. <b>DO NOT PASS invalid objects to the method!</b>
* @return True if the message is deleted.
* @throws TimeoutException
* The gateway did not respond in a timely manner.
* @throws GatewayException
* A Gateway error occurred.
* @throws IOException
* An IO error occurred.
* @throws InterruptedException
* The call was interrupted.
*/
public boolean deleteMessage(InboundMessage msg) throws TimeoutException, GatewayException, IOException, InterruptedException
{
synchronized (getGateways())
{
AGateway gateway = findGateway(msg.getGatewayId());
if (gateway != null)
{
try
{
return gateway.deleteMessage(msg);
}
catch (TimeoutException e)
{
getLogger().logWarn("deleteMessage(): Gateway " + gateway.getGatewayId() + " does not respond, marking for restart.", null, null);
gateway.setGatewayStatus(GatewayStatuses.RESTART);
return false;
}
catch (IOException e)
{
getLogger().logWarn("deleteMessage(): Gateway " + gateway.getGatewayId() + " throws IO errors, marking for restart.", null, null);
gateway.setGatewayStatus(GatewayStatuses.RESTART);
return false;
}
}
return false;
}
}
/**
* Returns the total number of messages received by the specified gateway.
*
* @param gatewayId
* The id of the gateway to query.
* @return The number of received messages or -1 on error.
*/
public int getInboundMessageCount(String gatewayId)
{
return getInboundMessageCount(findGateway(gatewayId));
}
/**
* Returns the total number of messages received by the specified gateway.
*
* @param gateway
* The AGateway object to query.
* @return The number of received messages or -1 on error.
*/
public int getInboundMessageCount(AGateway gateway)
{
return (gateway != null ? gateway.getInboundMessageCount() : -1);
}
/**
* Returns the total number of messages sent via the specified gateway.
*
* @param gatewayId
* The id of the gateway to query.
* @return The number of sent messages or -1 on error.
*/
public int getOutboundMessageCount(String gatewayId)
{
return getOutboundMessageCount(findGateway(gatewayId));
}
/**
* Returns the total number of messages sent via the specified gateway.
*
* @param gateway
* The AGateway object to query.
* @return The number of sent messages or -1 on error.
*/
public int getOutboundMessageCount(AGateway gateway)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -