2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
7 * This program and the accompanying materials are made available under the
8 * terms of the Eclipse Public License 2.0 which is available at
9 * http://www.eclipse.org/legal/epl-2.0
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.binding.chromecast.internal;
15 import org.eclipse.jdt.annotation.NonNullByDefault;
16 import org.openhab.core.thing.ThingStatus;
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
20 import su.litvak.chromecast.api.v2.ChromeCastConnectionEvent;
21 import su.litvak.chromecast.api.v2.ChromeCastConnectionEventListener;
22 import su.litvak.chromecast.api.v2.ChromeCastSpontaneousEvent;
23 import su.litvak.chromecast.api.v2.ChromeCastSpontaneousEventListener;
24 import su.litvak.chromecast.api.v2.MediaStatus;
25 import su.litvak.chromecast.api.v2.Status;
28 * Responsible for listening to events from the Chromecast.
30 * @author Jason Holmes - Initial contribution
33 public class ChromecastEventReceiver implements ChromeCastSpontaneousEventListener, ChromeCastConnectionEventListener {
34 private final Logger logger = LoggerFactory.getLogger(ChromecastEventReceiver.class);
36 private final ChromecastScheduler scheduler;
37 private final ChromecastStatusUpdater statusUpdater;
39 public ChromecastEventReceiver(ChromecastScheduler scheduler, ChromecastStatusUpdater statusUpdater) {
40 this.scheduler = scheduler;
41 this.statusUpdater = statusUpdater;
45 public void connectionEventReceived(final @NonNullByDefault({}) ChromeCastConnectionEvent event) {
46 if (event.isConnected()) {
47 statusUpdater.updateStatus(ThingStatus.ONLINE);
48 scheduler.scheduleRefresh();
50 scheduler.cancelRefresh();
51 statusUpdater.updateStatus(ThingStatus.OFFLINE);
52 // We might have just had a connection problem, let's try to reconnect.
53 scheduler.scheduleConnect();
58 public void spontaneousEventReceived(final @NonNullByDefault({}) ChromeCastSpontaneousEvent event) {
59 logger.trace("Received an {} event (class={})", event.getType(), event.getData());
61 switch (event.getType()) {
63 statusUpdater.updateMediaStatus(null);
66 statusUpdater.updateMediaStatus(event.getData(MediaStatus.class));
69 statusUpdater.processStatusUpdate(event.getData(Status.class));
72 logger.debug("Received an 'APPEVENT' event, ignoring");
75 logger.debug("Received an 'UNKNOWN' event (class={})", event.getType().getDataClass());
78 logger.debug("Unhandled event type: {}", event.getType());