package com.psddev.cms.rtc; import com.psddev.dari.db.Database; import com.psddev.dari.db.Query; import com.psddev.dari.db.Record; import java.util.List; import java.util.UUID; /** * @since 3.1 */ public class RtcSession extends Record { private UUID userId; @Indexed private long lastPing; private boolean closed; public UUID getUserId() { return userId; } public void setUserId(UUID userId) { this.userId = userId; } public long getLastPing() { return lastPing; } public void setLastPing(long lastPing) { this.lastPing = lastPing; } public boolean isClosed() { return closed; } public void setClosed(boolean closed) { this.closed = closed; } public void disconnect() { List<RtcEvent> events = Query .from(RtcEvent.class) .where("cms.rtc.event.sessionId = ?", getId()) .selectAll(); Database database = Database.Static.getDefault(); database.beginWrites(); try { events.forEach(RtcEvent::onDisconnect); database.commitWrites(); } finally { database.endWrites(); } database.beginWrites(); try { setClosed(true); save(); events.forEach(e -> e.getState().delete()); database.commitWrites(); } finally { database.endWrites(); } delete(); } }