package tc.oc.api.minecraft.sessions; import java.util.Collections; import javax.inject.Inject; import javax.inject.Singleton; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import tc.oc.api.docs.Session; import tc.oc.api.docs.UserId; import tc.oc.api.docs.virtual.ServerDoc; import tc.oc.api.docs.virtual.SessionDoc; import tc.oc.api.exceptions.NotFound; import tc.oc.api.message.types.FindMultiResponse; import tc.oc.api.minecraft.users.OnlinePlayers; import tc.oc.api.minecraft.users.UserStore; import tc.oc.api.model.NullModelService; import tc.oc.api.sessions.SessionService; import tc.oc.api.sessions.SessionStartRequest; import tc.oc.minecraft.api.entity.Player; @Singleton public class LocalSessionService extends NullModelService<Session, SessionDoc.Partial> implements SessionService { @Inject private OnlinePlayers<Player> onlinePlayers; @Inject private UserStore<Player> userStore; @Inject private LocalSessionFactory factory; @Override public ListenableFuture<Session> start(SessionStartRequest request) { return Futures.immediateFuture(factory.newSession(request::player_id, request.ip())); } @Override public ListenableFuture<?> finish(Session session) { return Futures.immediateFuture(null); } @Override public ListenableFuture<Session> online(UserId userId) { return onlinePlayers.byUserId(userId) .flatMap(userStore::session) .map(Futures::immediateFuture) .orElseGet(() -> Futures.immediateFailedFuture(new NotFound())); } @Override public ListenableFuture<FindMultiResponse<Session>> friends(UserId player) { return Futures.immediateFuture(Collections::emptyList); } @Override public ListenableFuture<FindMultiResponse<Session>> staff(ServerDoc.Network network, boolean disguised) { return Futures.immediateFuture(Collections::emptyList); } }