/* * Copyright 2014-2016 CyberVision, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.kaaproject.kaa.server.operations.service.akka.actors.core.endpoint.local; import akka.actor.UntypedActor; import org.kaaproject.kaa.common.hash.EndpointObjectHash; import org.kaaproject.kaa.server.operations.service.akka.AkkaContext; import org.kaaproject.kaa.server.operations.service.akka.messages.core.endpoint.EndpointStopMessage; import org.kaaproject.kaa.server.operations.service.akka.messages.core.endpoint.SyncRequestMessage; import org.kaaproject.kaa.server.operations.service.akka.messages.core.logs.LogDeliveryMessage; import org.kaaproject.kaa.server.operations.service.akka.messages.core.notification.ThriftNotificationMessage; import org.kaaproject.kaa.server.operations.service.akka.messages.core.route.EndpointActorMsg; import org.kaaproject.kaa.server.operations.service.akka.messages.core.session.ActorTimeoutMessage; import org.kaaproject.kaa.server.operations.service.akka.messages.core.session.ChannelTimeoutMessage; import org.kaaproject.kaa.server.operations.service.akka.messages.core.session.RequestTimeoutMessage; import org.kaaproject.kaa.server.operations.service.akka.messages.core.topic.NotificationMessage; import org.kaaproject.kaa.server.operations.service.akka.messages.core.user.EndpointEventReceiveMessage; import org.kaaproject.kaa.server.operations.service.akka.messages.core.user.EndpointUserActionMessage; import org.kaaproject.kaa.server.operations.service.akka.messages.core.user.EndpointUserConfigurationUpdateMessage; import org.kaaproject.kaa.server.operations.service.akka.messages.core.user.verification.UserVerificationResponseMessage; import org.kaaproject.kaa.server.transport.channel.ChannelAware; import org.kaaproject.kaa.server.transport.message.SessionDisconnectMessage; import org.kaaproject.kaa.server.transport.message.SessionPingMessage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class LocalEndpointActor extends UntypedActor { private static final Logger LOG = LoggerFactory.getLogger(LocalEndpointActor.class); private final String actorKey; private final LocalEndpointActorMessageProcessor messageProcessor; /** * Instantiates a new endpoint actor. * * @param context the context * @param endpointActorKey the endpoint actor key * @param appToken the app token * @param key the key */ LocalEndpointActor(AkkaContext context, String endpointActorKey, String appToken, EndpointObjectHash key) { this.messageProcessor = new LocalEndpointActorMessageProcessor(context, appToken, key, endpointActorKey); this.actorKey = endpointActorKey; } /* * (non-Javadoc) * * @see akka.actor.UntypedActor#onReceive(java.lang.Object) */ @Override public void onReceive(Object message) throws Exception { if (LOG.isTraceEnabled()) { LOG.trace("[{}] Received: {}", actorKey, message); } else { LOG.debug("[{}] Received: {}", actorKey, message.getClass().getName()); } if (message instanceof SyncRequestMessage) { processEndpointSync((SyncRequestMessage) message); } else if (message instanceof EndpointActorMsg) { processEndpointActorMsg((EndpointActorMsg) message); } else if (message instanceof EndpointEventReceiveMessage) { processEndpointEventReceiveMessage((EndpointEventReceiveMessage) message); } else if (message instanceof LogDeliveryMessage) { processLogDeliveryMessage((LogDeliveryMessage) message); } else if (message instanceof EndpointUserConfigurationUpdateMessage) { processUserConfigurationUpdateMessage((EndpointUserConfigurationUpdateMessage) message); } else if (message instanceof UserVerificationResponseMessage) { processUserVerificationMessage((UserVerificationResponseMessage) message); } else if (message instanceof SessionDisconnectMessage) { processDisconnectMessage((ChannelAware) message); } else if (message instanceof SessionPingMessage) { processPingMessage((ChannelAware) message); } else if (message instanceof ThriftNotificationMessage) { processThriftNotification((ThriftNotificationMessage) message); } else if (message instanceof NotificationMessage) { processNotification((NotificationMessage) message); } else if (message instanceof RequestTimeoutMessage) { processRequestTimeoutMessage((RequestTimeoutMessage) message); } else if (message instanceof ActorTimeoutMessage) { processActorTimeoutMessage((ActorTimeoutMessage) message); } else if (message instanceof ChannelTimeoutMessage) { processChannelTimeoutMessage((ChannelTimeoutMessage) message); } else if (message instanceof EndpointUserActionMessage) { processEndpointUserActionMessage((EndpointUserActionMessage) message); } else if (message instanceof EndpointStopMessage) { LOG.debug("[{}] Received stop request from application actor", actorKey); context().stop(self()); } else { LOG.warn("[{}] Received unknown message {}", actorKey, message); } } private void processEndpointActorMsg(EndpointActorMsg msg) { messageProcessor.processEndpointActorMsg(context(), msg); } private void processUserConfigurationUpdateMessage( EndpointUserConfigurationUpdateMessage message) { messageProcessor.processUserConfigurationUpdate(context(), message); } private void processUserVerificationMessage(UserVerificationResponseMessage message) { messageProcessor.processUserVerificationMessage(context(), message); } private void processLogDeliveryMessage(LogDeliveryMessage message) { messageProcessor.processLogDeliveryMessage(context(), message); } private void processEndpointSync(SyncRequestMessage message) { messageProcessor.processEndpointSync(context(), message); } private void processEndpointEventReceiveMessage(EndpointEventReceiveMessage message) { messageProcessor.processEndpointEventReceiveMessage(context(), message); } private void processDisconnectMessage(ChannelAware message) { messageProcessor.processDisconnectMessage(context(), message); } private void processPingMessage(ChannelAware message) { messageProcessor.processPingMessage(context(), message); } private void processThriftNotification(ThriftNotificationMessage message) { messageProcessor.processThriftNotification(context()); } private void processNotification(NotificationMessage message) { messageProcessor.processNotification(context(), message); } private void processRequestTimeoutMessage(RequestTimeoutMessage message) { messageProcessor.processRequestTimeoutMessage(context(), message); } private void processActorTimeoutMessage(ActorTimeoutMessage message) { messageProcessor.processActorTimeoutMessage(context(), message); } private void processChannelTimeoutMessage(ChannelTimeoutMessage message) { messageProcessor.processChannelTimeoutMessage(context(), message); } private void processEndpointUserActionMessage(EndpointUserActionMessage message) { messageProcessor.processEndpointUserActionMessage(context(), message); } /* * (non-Javadoc) * * @see akka.actor.UntypedActor#preStart() */ @Override public void preStart() { LOG.debug("[{}] Starting", actorKey); } /* * (non-Javadoc) * * @see akka.actor.UntypedActor#postStop() */ @Override public void postStop() { LOG.debug("[{}] Stoped", actorKey); } }