Advertisement
Guest User

Gameserver

a guest
Mar 3rd, 2017
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. import net = require('net');
  2. import jsbn = require('jsbn');
  3. import rsa = require('rsa');
  4. import GameClientManager from '../../HabboHotel/GameClients/GameClientManager';
  5. import PacketManager from '../../Messages/PacketManager';
  6. import GameClient from '../../HabboHotel/GameClients/GameClient';
  7. import ClientMessage from '../../Messages/ClientMessage';
  8. import Emulator from '../../Emulator';
  9. import RSAKey from '../../Crypto/RSAKey';
  10.  
  11. export default class GameServer {
  12. private gameClientManager: GameClientManager;
  13. private packetManager: PacketManager;
  14. private rsa: rsa.RSA;
  15. private host: string;
  16. private port: number;
  17. private server: net.Server;
  18.  
  19. public constructor(host: string, port: number) {
  20. this.gameClientManager = new GameClientManager();
  21. this.packetManager = new PacketManager();
  22. this.rsa = new rsa.RSA();
  23. this.rsa.setPrivate(RSAKey.N, RSAKey.E, RSAKey.D);
  24.  
  25. this.host = host;
  26. this.port = port;
  27. }
  28.  
  29. public initialise(): void {
  30. this.server = net.createServer();
  31. this.server.on('connection', this.handleConnection);
  32. }
  33.  
  34. public handleConnection(c: GameClient): void {
  35. Emulator.getGameServer().getGameClientManager().addClient(c);
  36.  
  37. let x: GameClient = new GameClient();
  38. c.initDH = x.initDH;
  39. c.getDiffieHellman = x.getDiffieHellman;
  40. c.sendResponse = x.sendResponse;
  41. c.sendResponses = x.sendResponses;
  42. c.getRC4client = x.getRC4client;
  43. c.getRC4server = x.getRC4server;
  44. c.isRC4initialized = x.isRC4initialized;
  45. c.initRC4 = x.initRC4;
  46. c.getMachineId = x.getMachineId;
  47. c.getMachinePlatform = x.getMachinePlatform;
  48. c.setMachinePlatform = x.setMachinePlatform;
  49. c.setMachineId = x.setMachineId;
  50. c.setHabbo = x.setHabbo;
  51. c.getHabbo = x.getHabbo;
  52.  
  53. c.on('data', function(buffer: Buffer){
  54.  
  55. if(buffer.length < 4){
  56. c.destroy();
  57. return;
  58. }
  59.  
  60. if(buffer.readUInt32BE(0) == 1014001516 && buffer.readUInt16BE(4) == 26979){
  61. c.write(new Buffer('<?xml version="1.0"?><!DOCTYPE cross-domain-policy SYSTEM "/xml/dtds/cross-domain-policy.dtd"><cross-domain-policy><allow-access-from domain="*" to-ports="*" /></cross-domain-policy>' + String.fromCharCode(0)));
  62. return;
  63. }
  64.  
  65. if(c.isRC4initialized()){
  66. buffer = c.getRC4client().parse(buffer);
  67. }
  68.  
  69. let countPackets: number = 0;
  70. let maxPackets: number = 15;
  71.  
  72. while(buffer.length > 3){
  73. if(countPackets++ >= maxPackets){
  74. c.destroy();
  75. return;
  76. }
  77.  
  78. let length: number = buffer.readUInt32BE(0) + 4;
  79.  
  80. Emulator.getGameServer().getPacketManager().handlePacket(c, new ClientMessage(buffer.readUInt16BE(4), buffer.slice(6, length)));
  81.  
  82. buffer = buffer.slice(length);
  83. }
  84. });
  85.  
  86. c.on('error', function(){
  87.  
  88. });
  89.  
  90. console.log(c.remoteAddress, c.remotePort);
  91. }
  92.  
  93. public connect(): void {
  94. this.server.listen(this.port, this.host);
  95. }
  96.  
  97. public getGameClientManager(): GameClientManager {
  98. return this.gameClientManager;
  99. }
  100.  
  101. public getPacketManager(): PacketManager {
  102. return this.packetManager;
  103. }
  104.  
  105. public getRsa(): rsa.RSA {
  106. return this.rsa;
  107. }
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement