scotty92

Untitled

Oct 15th, 2017
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.18 KB | None | 0 0
  1. package org.moparscape.msc.client;
  2.  
  3. import java.awt.Color;
  4. import java.awt.Font;
  5. import java.awt.Graphics;
  6. import java.io.IOException;
  7.  
  8. @SuppressWarnings("serial")
  9. public class GameAppletMiddleMan extends GameApplet {
  10.  
  11. protected final void connect(String user, String pass, boolean reconnecting) {
  12. if(socketTimeout > 0) {
  13. loginScreenPrint("Please wait...", "Connecting to server");
  14. try {
  15. Thread.sleep(2000L);
  16. }
  17. catch(Exception _ex) { }
  18. loginScreenPrint("Sorry! The server is currently full.", "Please try again later");
  19. return;
  20. }
  21. try {
  22. username = user;
  23. user = DataOperations.formatString(user, 20);
  24. password = pass;
  25. pass = DataOperations.formatString(pass, 20);
  26. if(user.trim().length() == 0) {
  27. loginScreenPrint("You must enter both a username", "and a password - Please try again");
  28. return;
  29. }
  30. if(reconnecting)
  31. gameBoxPrint("Connection lost! Please wait...", "Attempting to re-establish");
  32. else
  33. loginScreenPrint("Please wait...", "Connecting to server");
  34. streamClass = new StreamClass(makeSocket(Config.SERVER_IP, Config.SERVER_PORT), this);
  35. streamClass.maxPacketReadCount = maxPacketReadCount;
  36. long l = DataOperations.nameToHash(user);
  37. streamClass.createPacket(32);
  38. streamClass.addByte((int)(l >> 16 & 31L));
  39. streamClass.addString("You must enter both a username and a password - Please try again");// TODO not used server-side
  40. streamClass.flush();
  41. long sessionId = streamClass.readLong();
  42. if(sessionId == 0L) {
  43. loginScreenPrint("Login server offline.", "Please try again in a few mins");
  44. return;
  45. }
  46. System.out.println("Verb: Session id: " + sessionId);
  47. int sessionKeys[] = new int[4];
  48. sessionKeys[0] = (int)(Math.random() * 99999999D);
  49. sessionKeys[1] = (int)(Math.random() * 99999999D);
  50. sessionKeys[2] = (int)(sessionId >> 32);
  51. sessionKeys[3] = (int)sessionId;
  52. DataEncryption dataEncryption = new DataEncryption(new byte[500]);
  53. streamClass.addByte(reconnecting ? 1 : 0);
  54. streamClass.addInt(Config.CLIENT_VERSION);
  55. streamClass.addInt(sessionKeys[0]);
  56. streamClass.addInt(sessionKeys[1]);
  57. streamClass.addInt(sessionKeys[2]);
  58. streamClass.addInt(sessionKeys[3]);
  59. streamClass.addString(user);
  60. streamClass.addString(pass);
  61. //byte data[] = dataEncryption.encrypt(dataEncryption.packet);
  62. streamClass.createPacket(0);
  63. //streamClass.addBytes(data, 0, data.length);
  64. streamClass.flush();
  65. int loginCode = streamClass.read();
  66. System.out.println("login response:" + loginCode);
  67. if(loginCode == 99) {
  68. reconnectTries = 0;
  69. initVars();
  70. return;
  71. }
  72. if(loginCode == 0) {
  73. reconnectTries = 0;
  74. initVars();
  75. return;
  76. }
  77. if(loginCode == 1) {
  78. reconnectTries = 0;
  79. return;
  80. }
  81. if(reconnecting) {
  82. user = "";
  83. pass = "";
  84. resetIntVars();
  85. return;
  86. }
  87. if(loginCode == -1) {
  88. loginScreenPrint("Error unable to login.", "Server timed out");
  89. return;
  90. }
  91. if(loginCode == 2) {
  92. loginScreenPrint("Invalid username or password.", "Try again, or create a new account");
  93. return;
  94. }
  95. if(loginCode == 3) {
  96. loginScreenPrint("That username is already logged in.", "Wait 60 seconds then retry");
  97. return;
  98. }
  99. if(loginCode == 5) {
  100. loginScreenPrint("The client has been updated.", "Please restart the client");
  101. return;
  102. }
  103. if(loginCode == 4) {
  104. loginScreenPrint("Error unable to login.", "Please retry");
  105. return;
  106. }
  107. if(loginCode == 6) {
  108. loginScreenPrint("Account banned.", "Appeal on the forums, ASAP.");
  109. return;
  110. }
  111. if(loginCode == 7) {
  112. loginScreenPrint("Error - failed to decode profile.", "Contact an admin!");
  113. return;
  114. }
  115. if(loginCode == 8) {
  116. loginScreenPrint("Too many connections from your IP.", "Please try again later");
  117. return;
  118. }
  119. if(loginCode == 9) {
  120. loginScreenPrint("Account already in use.", "You may only login to one character at a time");
  121. return;
  122. } else {
  123. loginScreenPrint("Error unable to login.", "Unrecognised response code");
  124. return;
  125. }
  126. }
  127. catch(Exception e) {
  128. System.out.println(e.getMessage());
  129. e.printStackTrace();
  130. }
  131. if(reconnectTries > 0) {
  132. try {
  133. Thread.sleep(2500L);
  134. }
  135. catch(Exception _ex) { }
  136. reconnectTries--;
  137. connect(username, password, reconnecting);
  138. }
  139. if(reconnecting) {
  140. username = "";
  141. password = "";
  142. resetIntVars();
  143. } else {
  144. loginScreenPrint("Sorry! Unable to connect.", "Check internet settings or try another world");
  145. }
  146. }
  147.  
  148. protected final void requestLogout() {
  149. if(streamClass != null)
  150. try {
  151. streamClass.createPacket(39);
  152. streamClass.flush();
  153. }
  154. catch(IOException _ex) { }
  155. username = "";
  156. password = "";
  157. resetIntVars();
  158. loginScreenPrint("Please enter your usename and password", "");
  159. }
  160.  
  161. protected void lostConnection() {
  162. System.out.println("Lost connection");
  163. connect(username, password, true);
  164. loginScreenPrint("Please enter your usename and password", "");
  165. }
  166.  
  167. protected final void gameBoxPrint(String s1, String s2) {
  168. Graphics g = getGraphics();
  169. Font font = new Font("Helvetica", 1, 15);
  170. char c = '\u0200';
  171. char c1 = '\u0158';
  172. g.setColor(Color.black);
  173. g.fillRect(c / 2 - 140, c1 / 2 - 25, 280, 50);
  174. g.setColor(Color.white);
  175. g.drawRect(c / 2 - 140, c1 / 2 - 25, 280, 50);
  176. drawString(g, s1, font, c / 2, c1 / 2 - 10);
  177. drawString(g, s2, font, c / 2, c1 / 2 + 10);
  178. }
  179.  
  180. protected final void sendPingPacket() {
  181. long l = System.currentTimeMillis();
  182. if(streamClass.hasData())
  183. lastPing = l;
  184. if(l - lastPing > 5000L) {
  185. lastPing = l;
  186. streamClass.createPacket(5);
  187. streamClass.formatPacket();
  188. }
  189. try {
  190. streamClass.writePacket(20);
  191. }
  192. catch(IOException _ex) {
  193. lostConnection();
  194. return;
  195. }
  196. int packetLength = streamClass.readPacket(packetData);
  197. if(packetLength > 0)
  198. handlePacket(packetData[0] & 0xff, packetLength);
  199. }
  200.  
  201. private final void handlePacket(int command, int length) {
  202. if(command == 48) {
  203. String s1 = new String(packetData, 1, length - 1);
  204. displayMessage(s1);
  205. return;
  206. }
  207. if(command == 222) {
  208. requestLogout();
  209. return;
  210. }
  211. if(command == 136) {
  212. cantLogout();
  213. return;
  214. }
  215. if(command == 249) {
  216. friendsCount = DataOperations.getByte(packetData[1]);
  217. for(int i = 0; i < friendsCount; i++) {
  218. friendsList[i] = DataOperations.getLong(packetData, 2 + i * 9);
  219. friendsWorld[i] = DataOperations.getByte(packetData[10 + i * 9]);
  220. }
  221.  
  222. reOrderFriendsList();
  223. return;
  224. }
  225. if(command == 25) {
  226. long friend = DataOperations.getLong(packetData, 1);
  227. int status = packetData[9] & 0xff;
  228. for(int j1 = 0; j1 < friendsCount; j1++)
  229. if(friendsList[j1] == friend) {
  230. if(friendsWorld[j1] == 0 && status != 0)
  231. displayMessage("@pri@" + DataOperations.hashToName(friend) + " has logged in");
  232. if(friendsWorld[j1] != 0 && status == 0)
  233. displayMessage("@pri@" + DataOperations.hashToName(friend) + " has logged out");
  234. friendsWorld[j1] = status;
  235. length = 0;
  236. reOrderFriendsList();
  237. return;
  238. }
  239.  
  240. friendsList[friendsCount] = friend;
  241. friendsWorld[friendsCount] = status;
  242. friendsCount++;
  243. reOrderFriendsList();
  244. return;
  245. }
  246. if(command == 2) {
  247. ignoresCount = DataOperations.getByte(packetData[1]);
  248. for(int j = 0; j < ignoresCount; j++)
  249. ignoresList[j] = DataOperations.getLong(packetData, 2 + j * 8);
  250.  
  251. return;
  252. }
  253. if(command == 158) {
  254. blockChat = packetData[1];
  255. blockPrivate = packetData[2];
  256. blockTrade = packetData[3];
  257. blockDuel = packetData[4];
  258. return;
  259. }
  260. if(command == 170) {
  261. long l1 = DataOperations.getLong(packetData, 1);
  262. String s = ChatMessage.bytesToString(packetData, 9, length - 9);
  263. displayMessage("@pri@" + DataOperations.hashToName(l1) + ": tells you " + s);
  264. return;
  265. }
  266. if(command == 211) {// TODO remove?
  267. streamClass.createPacket(69);
  268. streamClass.addByte(0);// scar.exe, etc
  269. streamClass.formatPacket();
  270. return;
  271. }
  272. if(command == 1) {// TODO remove?
  273. //bluePoints
  274. //redPoints
  275. return;
  276. }
  277. handlePacket(command, length, packetData);
  278. }
  279.  
  280. private final void reOrderFriendsList() {
  281. boolean flag = true;
  282. while(flag) {
  283. flag = false;
  284. for(int i = 0; i < friendsCount - 1; i++)
  285. if(friendsWorld[i] < friendsWorld[i + 1]) {
  286. int j = friendsWorld[i];
  287. friendsWorld[i] = friendsWorld[i + 1];
  288. friendsWorld[i + 1] = j;
  289. long l = friendsList[i];
  290. friendsList[i] = friendsList[i + 1];
  291. friendsList[i + 1] = l;
  292. flag = true;
  293. }
  294.  
  295. }
  296. }
  297.  
  298. protected final void sendUpdatedPrivacyInfo(int blockChat, int blockPrivate, int blockTrade, int blockDuel) {
  299. streamClass.createPacket(176);
  300. streamClass.addByte(blockChat);
  301. streamClass.addByte(blockPrivate);
  302. streamClass.addByte(blockTrade);
  303. streamClass.addByte(blockDuel);
  304. streamClass.formatPacket();
  305. }
  306.  
  307. protected final void addIgnore(String arg0) {
  308. long l = DataOperations.nameToHash(arg0);
  309. streamClass.createPacket(25);
  310. streamClass.addLong(l);
  311. streamClass.formatPacket();
  312. for(int i = 0; i < ignoresCount; i++)
  313. if(ignoresList[i] == l)
  314. return;
  315.  
  316. if(ignoresCount >= ignoresList.length - 1) {
  317. return;
  318. } else {
  319. ignoresList[ignoresCount++] = l;
  320. return;
  321. }
  322. }
  323.  
  324. protected final void removeIgnore(long arg0) {
  325. streamClass.createPacket(108);
  326. streamClass.addLong(arg0);
  327. streamClass.formatPacket();
  328. for(int i = 0; i < ignoresCount; i++)
  329. if(ignoresList[i] == arg0) {
  330. ignoresCount--;
  331. for(int j = i; j < ignoresCount; j++)
  332. ignoresList[j] = ignoresList[j + 1];
  333.  
  334. return;
  335. }
  336.  
  337. }
  338.  
  339. protected final void addFriend(String arg0) {
  340. streamClass.createPacket(168);
  341. streamClass.addLong(DataOperations.nameToHash(arg0));
  342. streamClass.formatPacket();
  343. long l = DataOperations.nameToHash(arg0);
  344. for(int i = 0; i < friendsCount; i++)
  345. if(friendsList[i] == l)
  346. return;
  347.  
  348. if(friendsCount >= friendsList.length - 1) {
  349. return;
  350. } else {
  351. friendsList[friendsCount] = l;
  352. friendsWorld[friendsCount] = 0;
  353. friendsCount++;
  354. return;
  355. }
  356. }
  357.  
  358. protected final void removeFriend(long arg0) {
  359. streamClass.createPacket(52);
  360. streamClass.addLong(arg0);
  361. streamClass.formatPacket();
  362. for(int i = 0; i < friendsCount; i++) {
  363. if(friendsList[i] != arg0)
  364. continue;
  365. friendsCount--;
  366. for(int j = i; j < friendsCount; j++) {
  367. friendsList[j] = friendsList[j + 1];
  368. friendsWorld[j] = friendsWorld[j + 1];
  369. }
  370.  
  371. break;
  372. }
  373.  
  374. displayMessage("@pri@" + DataOperations.hashToName(arg0) + " has been removed from your friends list");
  375. }
  376.  
  377. protected final void sendPrivateMessage(long l, byte abyte0[], int i) {
  378. streamClass.createPacket(254);
  379. streamClass.addLong(l);
  380. streamClass.addBytes(abyte0, 0, i);
  381. streamClass.formatPacket();
  382. }
  383.  
  384. protected final void sendChatMessage(byte abyte0[], int i) {
  385. streamClass.createPacket(145);
  386. streamClass.addBytes(abyte0, 0, i);
  387. streamClass.formatPacket();
  388. }
  389.  
  390. protected final void sendCommand(String s1) {
  391. streamClass.createPacket(90);
  392. streamClass.addString(s1);
  393. streamClass.formatPacket();
  394. }
  395.  
  396. protected void loginScreenPrint(String s1, String s2) {
  397. }
  398.  
  399. protected void initVars() {
  400. }
  401.  
  402. protected void resetIntVars() {
  403. }
  404.  
  405. protected void cantLogout() {
  406. }
  407.  
  408. protected void handlePacket(int i, int j, byte abyte0[]) {
  409. }
  410.  
  411. protected void displayMessage(String s1) {
  412. }
  413.  
  414. public GameAppletMiddleMan() {
  415. username = "";
  416. password = "";
  417. packetData = new byte[10000];
  418. friendsList = new long[40];
  419. friendsWorld = new int[400];
  420. ignoresList = new long[200];
  421. }
  422.  
  423. public static int maxPacketReadCount;
  424. String username;
  425. String password;
  426. public StreamClass streamClass;
  427. byte packetData[];
  428. int reconnectTries;
  429. long lastPing;
  430. public int friendsCount;
  431. public long friendsList[];
  432. public int friendsWorld[];
  433. public int ignoresCount;
  434. public long ignoresList[];
  435. public int blockChat;
  436. public int blockPrivate;
  437. public int blockTrade;
  438. public int blockDuel;
  439. public long sessionId;
  440. public int socketTimeout;
  441.  
  442. }
Advertisement
Add Comment
Please, Sign In to add comment