summaryrefslogtreecommitdiff
path: root/NET/worlds/console/RealG2.java
diff options
context:
space:
mode:
authorFuwn <[email protected]>2026-02-12 22:33:32 -0800
committerFuwn <[email protected]>2026-02-12 22:33:32 -0800
commitc7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9 (patch)
treedf9f48bf128a6c0186a8e91857d6ff30fe0e9f18 /NET/worlds/console/RealG2.java
downloadworldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.tar.xz
worldsplayer-c7a9d4a6bd53ed7d61731770f2f10e8b9fd435f9.zip
Initial commit
Diffstat (limited to 'NET/worlds/console/RealG2.java')
-rw-r--r--NET/worlds/console/RealG2.java251
1 files changed, 251 insertions, 0 deletions
diff --git a/NET/worlds/console/RealG2.java b/NET/worlds/console/RealG2.java
new file mode 100644
index 0000000..188edc6
--- /dev/null
+++ b/NET/worlds/console/RealG2.java
@@ -0,0 +1,251 @@
+package NET.worlds.console;
+
+import NET.worlds.core.IniFile;
+import NET.worlds.scape.CDAudio;
+import java.awt.Dimension;
+import java.awt.Rectangle;
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Vector;
+
+public class RealG2 implements Runnable, MainCallback, MainTerminalCallback {
+ private static RealG2 instance = new RealG2();
+ private Thread realThread;
+ private Vector<RealG2.RG2Request> requestList = new Vector<RealG2.RG2Request>(2, 1);
+ private boolean cancel;
+ private boolean isPlaying = false;
+
+ private RealG2() {
+ this.realThread = new Thread(this);
+ this.realThread.start();
+ }
+
+ public static RealG2 get() {
+ return instance;
+ }
+
+ @Override
+ public void run() {
+ boolean initerror = false;
+ this.cancel = false;
+ Main.register(this);
+
+ while (!this.cancel) {
+ if (!this.requestList.isEmpty()) {
+ CDAudio.get().setEnabled(false);
+ }
+
+ while (!this.requestList.isEmpty()) {
+ this.startPlaying();
+
+ try {
+ initRealG2();
+ } catch (IOException var5) {
+ this.cancel = true;
+ initerror = true;
+ }
+
+ while (!this.requestList.isEmpty()) {
+ RealG2.RG2Request request = this.requestList.firstElement();
+ this.requestList.removeElementAt(0);
+
+ try {
+ this.browse(request.getURL(), request.getPosition());
+ } catch (IOException var4) {
+ }
+ }
+
+ if (!initerror) {
+ closeRealG2();
+ }
+
+ this.stopPlaying();
+ if (this.requestList.isEmpty()) {
+ CDAudio.get().setEnabled(true);
+ }
+ }
+
+ if (!this.cancel) {
+ this.timedWait(15);
+ }
+ }
+
+ Main.unregister(this);
+ }
+
+ private synchronized void timedWait(int secs) {
+ if (!this.cancel) {
+ try {
+ this.wait(secs * 1000);
+ } catch (InterruptedException var3) {
+ }
+ }
+ }
+
+ private synchronized void startPlaying() {
+ this.isPlaying = true;
+ }
+
+ private synchronized void stopPlaying() {
+ this.isPlaying = false;
+ }
+
+ public synchronized boolean playing() {
+ return this.isPlaying;
+ }
+
+ public void pleaseStopNow() {
+ if (this.playing()) {
+ this.setPlayInterrupt();
+
+ while (this.playing()) {
+ try {
+ this.wait(500L);
+ } catch (InterruptedException var2) {
+ }
+ }
+ }
+ }
+
+ public void pleaseStop() {
+ this.setPlayInterrupt();
+ }
+
+ public static boolean isInstalled() {
+ IniFile ini = new IniFile("RealPlayer");
+ return ini.getIniInt("HasReal", 0) != 0;
+ }
+
+ public void play(String urlin) throws IOException {
+ this.play(urlin, null);
+ }
+
+ public void play(String urlin, Rectangle placementin) throws IOException {
+ if (!isInstalled()) {
+ throw new IOException();
+ } else {
+ RealG2.RG2Request r = new RealG2.RG2Request(urlin, placementin);
+ this.requestList.addElement(r);
+ this.setPlayInterrupt();
+ this.realThread.interrupt();
+ }
+ }
+
+ private Rectangle getAdPartPlacement() {
+ Rectangle placement = null;
+ Console c = Console.getActive();
+ if (c != null) {
+ AdPart ap = null;
+ Enumeration<FramePart> e = c.getParts();
+
+ while (e.hasMoreElements()) {
+ Object o = e.nextElement();
+ if (o instanceof AdPart) {
+ ap = (AdPart)o;
+ break;
+ }
+ }
+
+ if (ap != null) {
+ placement = new Rectangle(ap.getLocationOnScreen(), new Dimension(ap.getWindow().fullWidth(), ap.getWindow().fullHeight()));
+ }
+ }
+
+ return placement;
+ }
+
+ private Rectangle getMapPartPlacement() {
+ Rectangle placement = null;
+ Console c = Console.getActive();
+ if (c != null) {
+ MapPart ap = null;
+ Enumeration<FramePart> e = c.getParts();
+
+ while (e.hasMoreElements()) {
+ Object o = e.nextElement();
+ if (o instanceof MapPart) {
+ ap = (MapPart)o;
+ break;
+ }
+ }
+
+ if (ap != null) {
+ placement = new Rectangle(ap.getLocationOnScreen(), ap.getSize());
+ }
+ }
+
+ return placement;
+ }
+
+ public void browse(String url, Rectangle placement) throws IOException {
+ int x = -1;
+ int y = -1;
+ int w = -1;
+ int h = -1;
+ if (placement != null) {
+ x = placement.x;
+ y = placement.y;
+ w = placement.width;
+ h = placement.height;
+ } else if ((placement = this.getMapPartPlacement()) != null) {
+ x = placement.x - 18;
+ y = placement.y - 34;
+ w = placement.width;
+ h = placement.height;
+ }
+
+ try {
+ browse(url, x, y, w, h);
+ } catch (IOException var8) {
+ this.close();
+ throw var8;
+ }
+ }
+
+ @Override
+ public void mainCallback() {
+ }
+
+ @Override
+ public void terminalCallback() {
+ this.close();
+ }
+
+ public void close() {
+ this.cancel = true;
+ playInterrupt();
+ this.realThread.interrupt();
+ }
+
+ private static native void browse(String var0, int var1, int var2, int var3, int var4) throws IOException;
+
+ private static native void initRealG2() throws IOException;
+
+ private static native void closeRealG2();
+
+ private static native void playInterrupt();
+
+ public synchronized void setPlayInterrupt() {
+ if (this.playing()) {
+ playInterrupt();
+ }
+ }
+
+ public class RG2Request {
+ private String url = null;
+ private Rectangle position = null;
+
+ public RG2Request(String u, Rectangle r) {
+ this.url = u;
+ this.position = r;
+ }
+
+ public Rectangle getPosition() {
+ return this.position;
+ }
+
+ public String getURL() {
+ return this.url;
+ }
+ }
+}