package com.github.shansun.sparrow.actor.spi;
import java.util.Collection;
import java.util.Map;
import com.github.shansun.sparrow.actor.api.Actor;
import com.github.shansun.sparrow.actor.api.Message;
/**
* @author: lanbo <br>
* @version: 1.0 <br>
* @date: 2012-7-20
*/
public interface ActorManager {
//创建一个Actor
Actor createActor(Class<? extends Actor> clazz);
Actor createActor(Class<? extends Actor> clazz, Map<String, Object> options);
//启动Actor
boolean startActor(Actor actor);
boolean detachActor(String name);
boolean detachActor(Actor actor);
//创建并启动Actor
Actor createAndStartActor(Class<? extends Actor> clazz);
Actor createAndStartActor(Class<? extends Actor> clazz, Map<String, Object> options);
/**
* 发送消息给指定Actor
*
* @param message 要发送的消息
* @param sourceActor 消息来源Actor,如果为null,则会自动设置为UnknownActor.
* @param targetName 目标actor的名称
* @return
*/
int send(Message message, Actor sourceActor, String targetName);
/**
* 发送消息给指定Actor
*
* @param message
* @param sourceActor 消息来源Actor,如果为null,则会自动设置为UnknownActor.
* @param targetNames 可以发送给多个actor
* @return
*/
int send(Message message, Actor sourceActor, String[] targetNames);
/**
* 发送消息给指定Actor
*
* @param message
* @param sourceActor 消息来源Actor,如果为null,则会自动设置为UnknownActor.
* @param targetNames
* @return
*/
int send(Message message, Actor sourceActor, Collection<String> targetNames);
/**
* 广播消息给所有Actor
*
* @param message
* @param sourceActor 消息来源Actor,如果为null,则会自动设置为UnknownActor.
* @return
*/
int broadcast(Message message, Actor sourceActor);
/**
* 初始化
*/
void initialize();
/**
* 待参数的初始化
* @param options
*/
void initialize(Map<String, Object> options);
/**
* 停止Actor引擎
*/
void terminateAndWait();
/**
* 停止Actor引擎
*/
void terminate();
}