/* */ package NET.worlds.console; /* */ /* */ import NET.worlds.core.IniFile; /* */ import NET.worlds.network.URL; /* */ import NET.worlds.network.WorldServer; /* */ import NET.worlds.scape.CDAudio; /* */ import NET.worlds.scape.Pilot; /* */ import NET.worlds.scape.WavSoundPlayer; /* */ import java.io.File; /* */ import java.io.IOException; /* */ import java.net.InetAddress; /* */ import java.text.MessageFormat; /* */ import java.util.Vector; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public class VoiceChat /* */ implements DialogReceiver /* */ { /* */ private static final String SPEAKFREELY = "sfmain.exe"; /* */ private static final int INITIAL_STATE = 0; /* */ private static final int BEGINNING_CONNECTION = 1; /* */ private static final int REQUESTING_CONNECTION = 2; /* */ private static final int ATTEMPTING_CONNECTION = 3; /* */ private static final int SUCCESSFULLY_CONNECTED = 4; /* */ private static final int CONNECTION_FAILED_RESETTING = 5; /* */ private static final int CLOSING_CONNECTION = 6; /* */ private static final int CONNECTION_CLOSED_RESETTING = 7; /* 110 */ private static final String[] _stateStrs = { "Initial State", /* 111 */ "Beginning Connection", "Attempting Connection", /* 112 */ "Successfully Connected", "Resetting (Connection Failed)", /* 113 */ "Closing Connection", "Resetting (Connection Closed)" }; /* */ /* */ /* 116 */ private int _state = 0; /* */ /* */ public int getState() { /* 119 */ return this._state; /* */ } /* */ /* */ public String getStateString() { /* 123 */ return _stateStrs[this._state]; /* */ } /* */ /* */ /* 127 */ private String _error = ""; /* */ /* */ public String getLastError() { /* 130 */ return this._error; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 142 */ private static boolean _selfWhisper = false; /* */ /* */ public static void activateSelfWhisper() { /* 145 */ _selfWhisper = true; /* 146 */ Console.println(Console.message("Selfwhisper-on")); /* */ } /* */ /* */ public static void deactivateSelfWhisper() { /* 150 */ _selfWhisper = false; /* 151 */ Console.println(Console.message("Selfwhisper-off")); /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 161 */ public static String VCdebugCommand = "&|+debug>VCcommand="; /* 162 */ public static String VCdebugCommandReset = "&|+debug>VCcommandReset="; /* */ /* 164 */ private static String _extraCommand = ""; /* */ /* */ public static void setExtra(String text) { /* 167 */ int start = text.indexOf('"') + 1; /* 168 */ int end = text.lastIndexOf('"'); /* 169 */ _extraCommand = text.substring(start, end); /* 170 */ Object[] arguments = { new String(_extraCommand) }; /* 171 */ Console.println(MessageFormat.format(Console.message("Add-VoiceChat"), /* 172 */ arguments)); /* */ } /* */ /* */ public static void resetExtra() { /* 176 */ _extraCommand = ""; /* 177 */ Console.println(Console.message("VoiceChat-reset")); /* */ } /* */ /* */ /* */ /* 182 */ private static GammaPhoneMonitor chatMonitor = null; /* */ /* */ /* 185 */ private String _who = null; /* */ public static UpdateableDialog voiceChatDialog; /* */ /* 188 */ public String who() { return this._who; } /* */ /* */ /* */ /* */ private static UpdateableDialog voiceChatQueryDialog; /* */ /* */ /* */ private static String voiceChatQueryIP; /* */ /* */ /* */ private static String voiceChatQueryWho; /* */ /* */ /* 201 */ public static boolean voiceChatEnabled = IniFile.gamma().getIniInt( /* 202 */ "VoiceChat", voiceChatAvailable() ? 1 : 0) != 0; /* */ /* */ public static void setVoiceChatEnabled(boolean f) { /* 205 */ if (!voiceChatAvailable()) /* 206 */ f = false; /* 207 */ voiceChatEnabled = f; /* 208 */ IniFile.gamma().setIniInt("VoiceChat", f ? 1 : 0); /* */ } /* */ /* 211 */ private static boolean voiceChatExeChecked = false; /* 212 */ private static boolean voiceChatExists = false; /* */ /* */ public static boolean voiceChatAvailable() { /* 215 */ if (voiceChatExeChecked) { /* 216 */ return voiceChatExists; /* */ } /* 218 */ URL vcexe = URL.make("home:sfmain.exe"); /* 219 */ String fname = vcexe.unalias(); /* 220 */ File f = new File(fname); /* 221 */ voiceChatExists = f.exists(); /* 222 */ voiceChatExeChecked = true; /* 223 */ return voiceChatExists; /* */ } /* */ /* 226 */ private int _gammaphoneWindow = 0; /* */ /* */ public void registerProcess(int id) { /* 229 */ this._gammaphoneWindow = id; /* */ } /* */ /* 232 */ DefaultConsole _console = null; /* */ /* 234 */ VCTimerThread _vtimer = null; /* */ private static final String voiceChatQuery = "&|+voicechat?"; /* */ private static final String voiceChatAccept = "&|+voicechat>accept"; /* */ private static final String voiceChatReject = "&|+voicechat>reject"; /* */ private static final String voiceChatBusy = "&|+voicechat>busy"; /* */ private static final String voiceChatNotVIP = "&|+voicechat>notvip"; /* */ private static final String voiceChatDisabled = "&|+voicechat>disabled"; /* */ /* */ public void beginChat(String friendName, DefaultConsole console) { /* 243 */ this._state = 1; /* 244 */ this._console = console; /* */ /* 246 */ if (!console.getVIP()) { /* 247 */ resetConnection(Console.message("must-be-VIP")); /* */ } else { /* 249 */ String ip = null; /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ try /* */ { /* 262 */ InetAddress localAddr = console.getServerNew() /* 263 */ .getLocalAddress(); /* 264 */ ip = localAddr != null ? localAddr.toString() : null; /* */ /* 266 */ ip = ip.substring(ip.indexOf('/') + 1); /* */ } /* */ catch (SecurityException e) /* */ { /* 270 */ resetConnection(Console.message("sec-violation")); /* */ } /* */ /* 273 */ if (ip == null) { /* 274 */ resetConnection(Console.message("cant-determine-IP")); /* */ } else { /* 276 */ if (voiceChatDialog != null) { /* 277 */ if (friendName.equals(this._who)) { /* 278 */ Object[] arguments = { new String(this._who) }; /* 279 */ Console.println(MessageFormat.format( /* 280 */ Console.message("already-VoiceChat"), arguments)); /* 281 */ return; /* */ } /* 283 */ resetConnection(Console.message("chat-ended")); /* */ } /* */ /* 286 */ if ((voiceChatQueryDialog != null) && /* 287 */ (voiceChatQueryWho.equals(friendName))) { /* 288 */ arguments = new Object[] { new String(friendName) }; /* 289 */ Console.println(MessageFormat.format( /* 290 */ Console.message("already-calling"), arguments)); /* 291 */ return; /* */ } /* */ /* */ /* */ /* */ /* */ /* 298 */ while (ConnectionRecord.checkList(this._who)) { Object[] arguments; /* 299 */ Object[] arguments = { new String(this._who) }; /* 300 */ Console.println(MessageFormat.format( /* 301 */ Console.message("wait-a-few"), arguments)); /* */ try { /* 303 */ Thread.sleep(2000L); /* */ } /* */ catch (InterruptedException localInterruptedException) {} /* */ } /* */ /* */ /* 309 */ if (initiateVoiceChat(friendName, null)) { /* 310 */ Object[] arguments = { new String(friendName), /* 311 */ new String(ip) }; /* 312 */ Console.println(MessageFormat.format( /* 313 */ Console.message("Asking-to-call"), arguments)); /* 314 */ this._state = 2; /* 315 */ sendWhisper(friendName, "&|+voicechat?" + ip); /* */ /* 317 */ this._vtimer = new VCTimerThread(this, 30000L); /* 318 */ this._vtimer.start(); /* */ } /* */ } /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ private static native void terminateVC(int paramInt); /* */ /* */ /* */ /* */ /* */ private boolean initiateVoiceChat(String friendName, String ip) /* */ { /* 335 */ this._who = friendName; /* 336 */ int hWnd = Window.getHWnd(); /* */ /* 338 */ String startString = URL.make("home:sfmain.exe" + ( /* 339 */ ip == null ? " -a " : new StringBuilder(" -c ").append(ip).toString()) + " -g " + hWnd + /* 340 */ " -p " + Window.getGammaProcessID() + " " + _extraCommand + /* 341 */ " ").unalias(); /* */ /* */ /* */ /* */ /* */ /* 347 */ WavSoundPlayer.pauseSystem(); /* 348 */ CDAudio.get().setEnabled(false); /* */ /* 350 */ if (tryToRun(startString)) { /* 351 */ Object[] arguments = { new String(this._who) }; /* 352 */ voiceChatDialog = new UpdateableDialog(Console.getFrame(), this, /* 353 */ Console.message("Voice-connect"), null, /* 354 */ Console.message("Terminate"), MessageFormat.format( /* 355 */ Console.message("end-VoiceChat"), arguments), false); /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* 363 */ if (chatMonitor == null) { /* 364 */ chatMonitor = new GammaPhoneMonitor(this); /* 365 */ chatMonitor.start(); /* */ } /* */ /* */ /* */ /* */ /* */ /* 372 */ return true; /* */ } /* 374 */ WavSoundPlayer.resumeSystem(); /* 375 */ CDAudio.get().setEnabled(true); /* */ /* 377 */ Object[] arguments = { new String(this._who), new String(startString) }; /* 378 */ voiceChatDialog = new UpdateableDialog(Console.getFrame(), this, /* 379 */ Console.message("Voice-Chat-199"), null, /* 380 */ Console.message("Continue"), MessageFormat.format( /* 381 */ Console.message("Unable-to-chat"), arguments), false); /* 382 */ return false; /* */ } /* */ /* */ /* */ public void inform(int msgid, String msg) /* */ { /* 388 */ if (msgid >= 900) { /* 389 */ if (voiceChatDialog == null) /* */ { /* */ /* 392 */ return; /* */ } /* */ /* 395 */ voiceChatDialog.setTitle(Console.message("VoiceChat-Connected")); /* 396 */ this._state = 4; /* */ } else { /* 398 */ resetConnection(msg); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public boolean handleChatRequest(String user, String text, DefaultConsole console) /* */ { /* 418 */ Object[] arguments = { new String(user) }; /* 419 */ if (!console.getVIP()) { /* 420 */ Console.println(MessageFormat.format( /* 421 */ Console.message("reject-chat"), arguments)); /* 422 */ sendWhisper(user, "&|+voicechat>notvip"); /* 423 */ } else if (!voiceChatEnabled) { /* 424 */ Console.println(MessageFormat.format( /* 425 */ Console.message("chat-disabled"), arguments)); /* 426 */ sendWhisper(user, "&|+voicechat>disabled"); /* 427 */ } else if (voiceChatQueryDialog != null) { /* 428 */ sendWhisper(user, "&|+voicechat>busy"); /* */ } else { /* 430 */ voiceChatQueryIP = text.substring("&|+voicechat?".length()); /* 431 */ voiceChatQueryWho = user; /* */ /* 433 */ voiceChatQueryDialog = new UpdateableDialog(Console.getFrame(), /* 434 */ this, Console.message("Accept-voice"), /* 435 */ Console.message("Reject"), Console.message("Accept"), /* 436 */ MessageFormat.format(Console.message("do-you-voice"), /* 437 */ arguments), false); /* */ } /* 439 */ return true; /* */ } /* */ /* */ public boolean handleChatWhisper(String user, String whisper, DefaultConsole console) /* */ { /* 444 */ Object[] arguments = { new String(user) }; /* 445 */ if (whisper.startsWith("&|+voicechat?")) { /* 446 */ handleChatRequest(user, whisper, console); /* 447 */ return true; /* */ } /* */ /* */ /* 451 */ if (whisper.startsWith("&|+voicechat>accept")) /* */ { /* */ /* */ /* 455 */ if (this._state != 2) { /* 456 */ sendWhisper(user, "&|+voicechat>reject"); /* 457 */ return false; /* */ } /* */ /* 460 */ Console.println(MessageFormat.format( /* 461 */ Console.message("chat-accepted"), arguments)); /* */ /* 463 */ synchronized (this._vtimer) { /* 464 */ this._vtimer._vc = null; /* */ } /* 466 */ this._vtimer = null; /* */ /* 468 */ this._state = 3; /* 469 */ this._vtimer = new VCTimerThread(this, 15000L); /* 470 */ this._vtimer.start(); /* */ /* */ } /* 473 */ else if (whisper.startsWith("&|+voicechat>notvip")) { /* 474 */ if ((voiceChatDialog != null) && (this._who.equals(user))) { /* 475 */ resetConnection(MessageFormat.format( /* 476 */ Console.message("cannot-voice"), arguments)); /* */ } /* */ /* */ /* */ } /* 481 */ else if (whisper.startsWith("&|+voicechat>disabled")) { /* 482 */ if ((voiceChatDialog != null) && (this._who.equals(user))) { /* 483 */ resetConnection(MessageFormat.format( /* 484 */ Console.message("user-voice-dis"), arguments)); /* */ } /* */ /* */ /* */ } /* 489 */ else if (whisper.startsWith("&|+voicechat>busy")) { /* 490 */ if ((voiceChatDialog != null) && (this._who.equals(user))) { /* 491 */ resetConnection(MessageFormat.format( /* 492 */ Console.message("receiving-Voice"), arguments)); /* */ } /* */ /* */ /* */ } /* 497 */ else if (whisper.startsWith("&|+voicechat>reject")) /* */ { /* 499 */ if ((voiceChatDialog != null) && (this._who.equals(user))) { /* 500 */ resetConnection(MessageFormat.format( /* 501 */ Console.message("Voice-terminated"), arguments)); /* */ } /* 503 */ if ((voiceChatQueryDialog != null) && (voiceChatQueryWho != null) && /* 504 */ (voiceChatQueryWho.equals(user))) { /* 505 */ voiceChatQueryDialog.closeIt(false); /* */ /* */ /* 508 */ voiceChatQueryWho = null; /* 509 */ resetConnection(MessageFormat.format( /* 510 */ Console.message("Voice-terminated"), arguments)); /* */ } /* */ } /* 513 */ return false; /* */ } /* */ /* */ public static boolean tryToRun(String s) { /* */ try { /* 518 */ Runtime.getRuntime().exec(s); /* 519 */ return true; /* */ } catch (IOException e) {} /* 521 */ return false; /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ public void checkConnected() /* */ { /* 531 */ if (getState() == 2) { /* 532 */ resetConnection(Console.message("never-answered")); /* 533 */ sendWhisper(who(), "&|+voicechat>reject"); /* 534 */ return; /* */ } /* */ /* 537 */ if (getState() != 4) { /* 538 */ resetConnection(Console.message("VoiceChat-failed")); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ /* */ public void resetConnection(String err) /* */ { /* 557 */ this._error = err; /* 558 */ if (err != null) { /* 559 */ this._state = 5; /* 560 */ Console.println(this._error); /* */ } /* */ /* 563 */ if (voiceChatDialog != null) { /* 564 */ voiceChatDialog.closeIt(true); /* */ } /* */ } /* */ /* */ /* */ public void terminate() /* */ { /* 571 */ if (this._vtimer != null) /* */ { /* 573 */ synchronized (this._vtimer) { /* 574 */ this._vtimer._vc = null; /* */ } /* */ /* 577 */ this._vtimer = null; /* */ } /* */ /* */ /* */ /* */ /* */ /* 584 */ CDAudio.get().setEnabled(true); /* */ /* */ /* */ /* */ /* 589 */ ConnectionRecord.getList().addElement(new ConnectionRecord(who())); /* */ /* 591 */ this._state = 0; /* */ } /* */ /* */ public void release() { /* 595 */ if (chatMonitor != null) { /* 596 */ chatMonitor.stop(); /* 597 */ chatMonitor = null; /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ public synchronized void dialogDone(Object who, boolean confirmed) /* */ { /* 606 */ if (who == voiceChatQueryDialog) { /* 607 */ voiceChatQueryDialog = null; /* 608 */ if (confirmed) { /* 609 */ sendWhisper(voiceChatQueryWho, "&|+voicechat>accept"); /* 610 */ initiateVoiceChat(voiceChatQueryWho, voiceChatQueryIP); /* */ /* */ /* */ /* */ } /* 615 */ else if (voiceChatQueryWho != null) { /* 616 */ sendWhisper(voiceChatQueryWho, "&|+voicechat>reject"); /* */ } /* 618 */ } else if (who == voiceChatDialog) { /* 619 */ this._state = 6; /* 620 */ String stopString = URL.make("home:sfmain.exe -q") /* 621 */ .unalias(); /* */ /* */ /* */ /* 625 */ tryToRun(stopString); /* */ /* */ /* 628 */ voiceChatDialog = null; /* 629 */ sendWhisper(this._who, "&|+voicechat>reject"); /* 630 */ terminate(); /* */ /* */ /* */ /* */ } /* */ else /* */ { /* */ /* */ /* */ /* 640 */ String stopString = URL.make("home:sfmain.exe -q") /* 641 */ .unalias(); /* */ /* */ /* 644 */ tryToRun(stopString); /* */ } /* */ } /* */ /* */ /* */ /* */ /* */ /* */ private void sendWhisper(String destination, String text) /* */ { /* 654 */ Pilot.sendText(destination, text); /* */ /* */ /* */ /* */ /* 659 */ if (_selfWhisper) { /* 660 */ handleChatWhisper(destination, text, this._console); /* */ } /* */ } /* */ } /* Location: C:\Program Files (x86)\Worlds Inc\WorldsPlayer - Win7\lib\worlds.jar!\NET\worlds\console\VoiceChat.class * Java compiler version: 6 (50.0) * JD-Core Version: 0.7.1 */