use of co.aurasphere.botmill.core.BotDefinition in project fb-botmill by BotMill.
the class IncomingToOutgoingMessageHandler method handleOutgoingMessage.
/**
* Handle outgoing message.
*
* @param message
* the message
*/
private void handleOutgoingMessage(MessageEnvelope message) {
methodMapCatchAll = new ArrayList<FbBotClassMethod>();
boolean isAuthorized = false;
for (BotDefinition defClass : ConfigurationUtils.getBotDefinitionInstances()) {
if (defClass.getClass().isAnnotationPresent(Bot.class)) {
Bot botClass = defClass.getClass().getAnnotation(Bot.class);
if (botClass.state().equals(BotBeanState.PROTOTYPE)) {
try {
defClass = defClass.getClass().newInstance();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
// Check authorization first.
for (Method authorizationMethod : defClass.getClass().getMethods()) {
if (authorizationMethod.isAnnotationPresent(BotAuthorization.class)) {
Boolean ob = false;
try {
defClass.getClass().getSuperclass().getDeclaredMethod(CONST_INCOMING_MSG_SETNAME, MessageEnvelope.class).invoke(defClass, message);
ob = (Boolean) authorizationMethod.invoke(defClass, message);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
if (ob) {
isAuthorized = true;
break;
}
}
}
// if (isAuthorized) {
for (Method method : defClass.getClass().getMethods()) {
if (method.isAnnotationPresent(FbBotMillController.class)) {
FbBotMillController botMillController = method.getAnnotation(FbBotMillController.class);
if (isAuthorized || botMillController.skipAuthorization()) {
try {
if (botMillController.pattern().equals(".*.") || botMillController.eventType().equals(FbBotMillEventType.ANY)) {
FbBotClassMethod fbCm = new FbBotClassMethod();
fbCm.setCls(defClass);
fbCm.setMethod(method);
methodMapCatchAll.add(fbCm);
} else {
FbBotMillEvent event = toEventActionFrame(botMillController);
if (event.verifyEventCondition(message)) {
defClass.getClass().getSuperclass().getDeclaredMethod(CONST_INCOMING_MSG_SETNAME, MessageEnvelope.class).invoke(defClass, message);
defClass.getClass().getSuperclass().getDeclaredMethod(CONST_EVENT_SETNAME, FbBotMillEvent.class).invoke(defClass, event);
FbBotApi.setFbBot(defClass);
method.invoke(defClass, message);
return;
}
}
} catch (Exception e) {
e.printStackTrace();
return;
}
}
}
}
// }
}
}
// if (isAuthorized) {
synchronized (this) {
for (FbBotClassMethod catchAllMethod : methodMapCatchAll) {
if (catchAllMethod.getMethod().isAnnotationPresent(FbBotMillController.class)) {
FbBotMillController botMillController = catchAllMethod.getMethod().getAnnotation(FbBotMillController.class);
if (isAuthorized || botMillController.skipAuthorization()) {
try {
FbBotMillEvent event = toEventActionFrame(botMillController);
if (event.verifyEventCondition(message)) {
catchAllMethod.getCls().getClass().getSuperclass().getDeclaredMethod(CONST_INCOMING_MSG_SETNAME, MessageEnvelope.class).invoke(catchAllMethod.getCls(), message);
catchAllMethod.getCls().getClass().getSuperclass().getDeclaredMethod(CONST_EVENT_SETNAME, FbBotMillEvent.class).invoke(catchAllMethod.getCls(), event);
FbBotApi.setFbBot(catchAllMethod.getCls());
catchAllMethod.getMethod().invoke(catchAllMethod.getCls(), message);
return;
}
} catch (Exception e) {
e.printStackTrace();
return;
}
}
}
}
}
// }
}
use of co.aurasphere.botmill.core.BotDefinition in project fb-botmill by BotMill.
the class AnnotatedTemplateTest method setup.
@Before
public void setup() {
Assume.assumeTrue(isConfigurationExist());
FbBotMillContext.getInstance().setup(System.getenv("fb.page.token"), System.getenv("fb.validation.token"));
// Load the Bot manually.
List<BotDefinition> botDefs = new ArrayList<BotDefinition>();
botDefs.add(new AnnotatedTemplatedBehaviourTest());
ConfigurationUtils.setBotDefinitionInstance(botDefs);
}
use of co.aurasphere.botmill.core.BotDefinition in project fb-botmill by BotMill.
the class AnnotatedTemplateTest method main.
public static void main(String[] args) {
StandardPBEStringEncryptor enc = new StandardPBEStringEncryptor();
// can be sourced out
enc.setPassword("password");
ConfigurationUtils.loadEncryptedConfigurationFile(enc, "botmill.properties");
List<BotDefinition> botDef = new ArrayList<BotDefinition>();
botDef.add(new AnnotatedTemplatedBehaviourTest());
ConfigurationUtils.loadBotConfig();
ConfigurationUtils.setBotDefinitionInstance(botDef);
for (int i = 0; i < 10; i++) {
new Thread(new Runnable() {
String json = "{\"sender\":{\"id\":\"1158621824216736\"},\"recipient\":{\"id\":\"1226565047419159\"},\"timestamp\":1490832021661,\"message\":{\"mid\":\"mid.$cAAUPCFn4ymdhTcignVbHH3rzpKd_\",\"seq\":844819,\"text\":\"Hi!\"}}";
MessageEnvelope envelope = FbBotMillJsonUtils.fromJson(json, MessageEnvelope.class);
@Override
public void run() {
try {
IncomingToOutgoingMessageHandler.getInstance().process(envelope);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
}
}
Aggregations