joinServer.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135
  1. 'use strict';
  2. var game = Atomic.game;
  3. var view = game.uiView;
  4. var UI = Atomic.UI;
  5. var UIWindow = Atomic.UIWindow;
  6. var window;
  7. var clientToServerConnection;
  8. var remotePlayerClient;
  9. function closeWindow() {
  10. if (window)
  11. window.die();
  12. window = null;
  13. }
  14. function connectToServer(server) {
  15. game.createScene2D();
  16. print(server);
  17. // Disconnect from master
  18. Atomic.masterServerClient.disconnectFromMaster();
  19. Atomic.masterServerClient.connectToServerViaMaster(server.connectionId,
  20. server.internalIP, server.internalPort,
  21. server.externalIP, server.externalUDPPort,
  22. game.scene);
  23. }
  24. exports.init = function(onClose) {
  25. window = new UIWindow();
  26. window.settings = Atomic.UI.WINDOW_SETTINGS_TITLEBAR;
  27. window.text = "Join Server";
  28. window.load("UI/joinServer.ui.txt");
  29. var masterServerIP = Atomic.localStorage.getMasterServerIP();
  30. var masterServerPort = Atomic.localStorage.getMasterServerPort();
  31. Atomic.masterServerClient.connectToMaster(masterServerIP, masterServerPort);
  32. Atomic.network.subscribeToEvent("ServerConnected", function(data) {
  33. print("Client Connected to server!");
  34. clientToServerConnection = Atomic.network.getServerConnection();
  35. var node = game.scene.createChild("RemotePlayerClient");
  36. remotePlayerClient = node.createJSComponent("Components/RemotePlayerClient.js");
  37. remotePlayerClient.init(clientToServerConnection);
  38. clientToServerConnection.sendStringMessage('ready');
  39. });
  40. // Build select list
  41. var serverSelect = new Atomic.UISelectList();
  42. var serverList;
  43. var lp = new Atomic.UILayoutParams();
  44. lp.minWidth = 300;
  45. lp.minHeight = 250;
  46. lp.maxHeight = 250;
  47. serverSelect.layoutParams = lp;
  48. window.setSize(200,350);
  49. view.addChild(window);
  50. window.center();
  51. Atomic.masterServerClient.subscribeToEvent("MasterConnectionReady", function() {
  52. Atomic.masterServerClient.requestServerListFromMaster();
  53. });
  54. Atomic.masterServerClient.subscribeToEvent("MasterServerMessage", function(message) {
  55. print('In Javascript, MasterServerMessage received');
  56. var msg = JSON.parse(message['data']);
  57. if (msg.cmd === 'serverList') {
  58. serverList = JSON.parse(msg.servers);
  59. var serverContainer = window.getWidget("servercontainer");
  60. serverContainer.addChild(serverSelect);
  61. var serverSelectSource = new Atomic.UISelectItemSource();
  62. for (var i = 0; i < serverList.length; i++) {
  63. var server = serverList[i];
  64. print(server.internalIP);
  65. print(server.internalPort);
  66. serverSelectSource.addItem(new Atomic.UISelectItem(server.serverName, i));
  67. }
  68. serverSelect.setSource(serverSelectSource);
  69. }
  70. });
  71. Atomic.network.subscribeToEvent("ServerDisconnected", function() {
  72. print("Lost connection to server");
  73. remotePlayerClient.cleanup();
  74. Atomic.destroy(game.scene);
  75. var ui = require("./ui");
  76. ui.showMainMenu();
  77. });
  78. window.getWidget("cancel").onClick = function () {
  79. closeWindow();
  80. onClose();
  81. };
  82. window.getWidget("ok").onClick = function () {
  83. var selectedItemId = serverSelect.getSelectedItemID();
  84. var server = serverList[selectedItemId];
  85. closeWindow();
  86. onClose();
  87. var ui = require("./ui");
  88. ui.closeMainMenu();
  89. connectToServer(server);
  90. };
  91. };
  92. exports.shutdown = function() {
  93. closeWindow();
  94. };