Advertisement
Guest User

Untitled

a guest
Jan 3rd, 2018
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.95 KB | None | 0 0
  1. var http = require('http');
  2. var url = require('url');
  3. var fs = require('fs');
  4. var crypto = require('crypto');
  5. var chance = require('chance');
  6.  
  7. var salts = new chance();
  8.  
  9. var waiting = [];
  10. var game_id = [];
  11.  
  12. var connections = [];
  13.  
  14. var jogos;
  15.  
  16. function gameStarted(hash,user){
  17. for(var i=0;i<game_id.length;i++){
  18. if(game_id[i].game.hash===hash && game_id[i].user1.nick===user)
  19. return i;
  20. }
  21.  
  22. return -1;
  23.  
  24. }
  25.  
  26. function isInteger(x) {
  27. return x % 1 === 0;
  28. }
  29. check_file();
  30. var headers = {
  31. plain: {
  32. 'Content-Type': 'application/javascript',
  33. 'Cache-Control': 'no-cache',
  34. 'Access-Control-Allow-Origin': '*'
  35. },
  36. sse: {
  37. 'Content-Type': 'text/event-stream',
  38. 'Cache-Control': 'no-cache',
  39. 'Access-Control-Allow-Origin': '*',
  40. 'Connection': 'keep-alive'
  41. }
  42. };
  43.  
  44. function check_file()
  45. {
  46. fs.readFile('dados.json', function(err, data)
  47. {
  48. try
  49. {
  50. JSON.parse(data.toString());
  51. }
  52. catch (e)
  53. {
  54. fs.writeFile('dados.json', "[]", function(err){});
  55. }
  56. });
  57. fs.readFile('ranking.json', function(err, data)
  58. {
  59. try
  60. {
  61. JSON.parse(data.toString());
  62. }
  63. catch (e)
  64. {
  65. fs.writeFile('ranking.json', "[]", function(err){});
  66. }
  67. });
  68. fs.readFile('join.json', function(err, data)
  69. {
  70. try
  71. {
  72. JSON.parse(data.toString());
  73. }
  74. catch (e)
  75. {
  76. fs.writeFile('join.json', "[]", function(err){});
  77. }
  78. });
  79. fs.readFile('update.json', function(err, data)
  80. {
  81. try
  82. {
  83. JSON.parse(data.toString());
  84. }
  85. catch (e)
  86. {
  87. fs.writeFile('update.json', "[]", function(err){});
  88. }
  89. });
  90. }
  91.  
  92. function sort_object(object){
  93. object.sort(function(a, b) {
  94. if(a.victories==b.victories)
  95. return parseInt(a.games) - parseInt(b.games);
  96.  
  97. return -(parseInt(a.victories) - parseInt(b.victories));
  98.  
  99. });
  100.  
  101. }
  102.  
  103. function start_game(index){
  104. var jogo=game_id[index];
  105. }
  106.  
  107.  
  108. function oponent(group,size){
  109. console.log("entra waiting");
  110.  
  111. if(waiting.length==0){
  112. console.log("entra vazio waiting");
  113. return null;
  114. }
  115. for(var i = 0; i < waiting.length; i++)
  116. {
  117. console.log("entra for waiting");
  118.  
  119. if(waiting[i].group == group && waiting[i].size == size)
  120. {
  121. var temp = waiting[i];
  122. waiting.splice(i, 1);
  123. return temp;
  124. }
  125. }
  126.  
  127. return null;
  128.  
  129. }
  130. function newGame(user1,user2,gameID,hash,size){
  131. var rack=[size];
  132. for(var i=size;i>=0;i--){
  133. rack[i]=i;
  134. }
  135. var data ={
  136. board:{
  137. table: null,
  138. size: size,
  139. rack: rack
  140.  
  141. },
  142. user1 :{
  143. nick : user1
  144. },
  145. user2:{
  146. nick: user2
  147. },
  148. game :
  149. {
  150. turn: user1,
  151. hash: hash
  152. }
  153. };
  154. game_id[gameID] = data;
  155. }
  156.  
  157.  
  158.  
  159. var server = http.createServer(function (req, res){
  160. var preq = url.parse(req.url,true);
  161.  
  162. var pathname = preq.pathname;
  163.  
  164.  
  165.  
  166. var answer = {};
  167. switch(req.method){
  168. case "POST":
  169. doPost(pathname,req,res);
  170. break;
  171.  
  172. case "GET":
  173. doGet(pathname,preq.query,res);
  174. break;
  175.  
  176.  
  177. }
  178. // res.writeHead(200, headers.plain);
  179. });
  180.  
  181. server.listen(8080);
  182.  
  183. function doGet(pathname,req,res) {
  184. var body = "";
  185. var resposta;
  186. //console.log("do get " + req);
  187. res.setHeader('Access-Control-Allow-Origin','*');
  188. switch(pathname)
  189. {
  190. case "/update":
  191. /*
  192. console.log("#####################\n\n\n###################");
  193. console.log("do get " + req.nick);
  194. console.log("do get " + req.game);
  195. */
  196. var nick = req.nick;
  197. var game = req.game;
  198.  
  199.  
  200. var connection_temp =
  201. {
  202. nick: nick,
  203. res: res,
  204. game: game
  205. };
  206.  
  207. connections.push(connection_temp);
  208.  
  209. var index= gameStarted(game);
  210. if(index!=-1)
  211. {
  212. res.write(200,JSON.stringify("{}"));
  213. newGame(index);
  214.  
  215. }
  216. //ser se estao os dois na connections
  217. for(var i=0;i<connection_temp.length;i++){
  218. if(connection_temp[index].game===connection_temp.game){
  219.  
  220. }
  221. }
  222.  
  223. break;
  224. }
  225.  
  226.  
  227.  
  228. return;
  229.  
  230. }
  231.  
  232.  
  233.  
  234. function doPost(pathname, req, res){
  235.  
  236. var body = "";
  237. var resposta;
  238. console.log("do post " + pathname);
  239. res.setHeader('Access-Control-Allow-Origin','*');
  240. switch(pathname) {
  241.  
  242. case "/notify":
  243. req
  244. .on("data",function(data) {body +=data})
  245. .on("end",function(){
  246. try{
  247. var nick = body.nick;
  248. var pass = body.pass;
  249. var game = body.game;
  250. var stack = body.stack;
  251. var pieces = body.pieces;
  252. console.log(body);
  253.  
  254. var index= gameStarter(game,nick);
  255. if(index!=-1){
  256. var data = game_id[gameID].game;
  257. console.log("notify " + data);
  258. }
  259.  
  260.  
  261. }
  262.  
  263.  
  264. catch(err) { console.log("erro json"); }})
  265.  
  266.  
  267. .on("error", function(err) { console.log(err.message); })
  268. break;
  269.  
  270.  
  271. case "/join":
  272. req
  273. .on("data",function(data) {body +=data})
  274. .on("end",function(){
  275. try{
  276. console.log("create join");
  277. var file = fs.readFile('join.json', function(err, data) {
  278. if(!err)
  279. {
  280. var flag = 0;
  281. console.log("entra join if");
  282. var dados = JSON.parse(body);
  283. dados.res=res;
  284. //console.log(dados.res);
  285.  
  286. //console.log("dados" + dados);
  287. var group = dados.group;
  288. var nick = dados.nick;
  289. var pass = dados.pass;
  290. var size = dados.size;
  291. var gameID = game_id.length;
  292. var opo = oponent(group,size);
  293.  
  294. console.log(" opo" + opo);
  295. if(opo === null){ //insere jogador
  296. waiting.splice(0,0,dados);
  297. console.log("adicionar a waiting");
  298. //console.log(waiting);
  299.  
  300. }
  301. else{
  302.  
  303. console.log("possivel jogo");
  304. console.log(waiting);
  305. var hash = crypto.createHash('md5').update(salts.string({length:8})).digest('hex');
  306.  
  307.  
  308. gameID++;
  309. newGame(nick,opo.nick,gameID,hash,size);
  310. var game_data = game_id[gameID].game.hash;
  311. //console.log(game_data);
  312. var object = {game: game_data};
  313. if(game_data == hash){
  314. flag=1;
  315. res.writeHead(401, {'Content-Type' : 'text/plain'});
  316. res.end(JSON.stringify({error:"Playing in other game!"}));
  317. }
  318. console.log("game data " +JSON.stringify(object))
  319. fs.writeFile('join.json', JSON.stringify(object), function(err) {
  320. if (err)
  321. return console.log(err);
  322.  
  323. });
  324. res.writeHead(200, {'Content-Type' : 'text/plain'});
  325. res.end(JSON.stringify(object));
  326.  
  327.  
  328.  
  329. opo.res.writeHead(200, {'Content-Type' : 'text/plain'});
  330. opo.res.end(JSON.stringify(object));
  331.  
  332.  
  333.  
  334.  
  335. }
  336.  
  337.  
  338. }
  339. else{
  340. res.writeHead(404, {'Content-Type' : 'text/plain'});
  341. res.end();
  342. console.log("erro join");
  343. }
  344.  
  345. })
  346. }
  347. catch(err) { console.log("erro json"); }
  348. })
  349. .on("error", function(err) { console.log(err.message); })
  350. break;
  351.  
  352. case "/register":
  353. req
  354. .on("data",function(data) {body +=data})
  355. .on("end",function(){
  356. try{
  357. var data = "";
  358.  
  359. console.log("createServer");
  360. var file = fs.readFile('dados.json', function(err, data) {
  361.  
  362. if (!err) {
  363. console.log("entrou no if");
  364. console.log(body);
  365. var dados = JSON.parse(body);
  366. var user = dados.nick;
  367. var pass = dados.pass;
  368. console.log("user no register " + user + " pass " + pass);
  369. var flag = 1;
  370. var object = JSON.parse(data.toString('utf8'));
  371.  
  372. for(var i=0;i<object.length;i++){
  373. var object_teste = JSON.stringify(object);
  374. // console.log("for2 user " + object_teste);
  375. // console.log("for2 pass " +
  376. // object_teste.body.pass[i]);
  377. if(object[i].nick === user){
  378. console.log("This user already exits");
  379. // var password =
  380. // crypto.createHash('md5').update(object[i].salt
  381. // + pass).digest('hex');
  382.  
  383.  
  384.  
  385. if(pass === object[i].pass){
  386. console.log("etnra flag2");
  387. flag=2; // 200
  388. console.log("falg " + flag);
  389.  
  390. break;
  391. }
  392. else {
  393. flag=3; // 401
  394. console.log("falg " + flag);
  395.  
  396. break;
  397. }
  398.  
  399. }
  400. else{
  401. flag=1;
  402.  
  403. }
  404.  
  405. }
  406. console.log("falg final " + flag);
  407.  
  408. if(flag==1){
  409. var salt = salts.string({length: 4});
  410. var password = crypto.createHash('md5').update(salt + pass).digest('hex');
  411. // console.log(" data " + object[0]);
  412. var savefile = {};
  413. savefile.nick=user;
  414. savefile.pass=password;
  415. savefile.salt=salt;
  416. // console.log(" body " +
  417. // JSON.stringify(req.body));
  418. // console.log("pass " + pass);
  419. // console.log("pass cri " + password);
  420. object.push(savefile);
  421. console.log("aqui " + object);
  422.  
  423. fs.writeFile('dados.json', JSON.stringify(object), function(err) {
  424. if (err)
  425. return console.log(err);
  426.  
  427. });
  428. res.writeHead(200, {'Content-Type' : 'text/plain'});
  429. res.write("{}");
  430.  
  431. }
  432. else if(flag==2){
  433. res.writeHead(200, {'Content-Type' : 'text/plain'});
  434. res.write("{}");
  435. console.log("flag2" + flag);
  436.  
  437. }
  438. else{
  439. res.writeHead(401, {'Content-Type' : 'text/hml'});
  440. res.write(JSON.stringify({error: "User registered with a different password"}));
  441. console.log("flag3" + flag);
  442.  
  443. }
  444. res.end();
  445.  
  446. }
  447. else{
  448. res.writeHead(404, {'Content-Type' : 'text/html'});
  449. res.write(JSON.stringify({error: "ERROR"}));
  450. }
  451. })}
  452.  
  453. catch(err) { console.log("erro json"); /* erros de JSON */ }
  454.  
  455.  
  456. })
  457. .on("error", function(err) { console.log(err.message); })
  458. break;
  459.  
  460. case "/ranking":
  461. req
  462. .on("data",function(data) {body +=data})
  463. .on("end",function(){
  464. try{
  465. console.log("create server ranking");
  466. var file = fs.readFile('ranking.json', function(err, data) {
  467. if (!err) {
  468. console.log(body);
  469. var dados = JSON.parse(body);
  470.  
  471. var size = dados.size;
  472. console.log("size " + size +isInteger(size));
  473. if(isInteger(size) && (size>=2 && size<=10)){
  474. var object = JSON.parse(data.toString('utf8'));
  475.  
  476. console.log("asd " +object);
  477. if(object[size] != undefined){
  478. sort_object(object);
  479. res.writeHead(200, {'Content-Type' : 'text/plain'});
  480. res.write(JSON.stringify(object[size]));
  481. console.log(object[size]);
  482. }
  483. else{
  484. res.writeHead(401, {'Content-Type' : 'text/html'});
  485. res.write(JSON.stringify({error: "Doens't exits table with this size"}));
  486. console.log("nao tem tabela");
  487. }
  488. }
  489. else{
  490. res.writeHead(401, {'Content-Type' : 'text/html'});
  491. res.write(JSON.stringify({error: "Size isn't a valid"}));
  492. console.log("deu erro com size not int");
  493.  
  494. }
  495. res.end();
  496. }
  497. else{
  498. res.writeHead(404, {'Content-Type' : 'text/html'});
  499. res.end();
  500. console.log("deu erro");
  501.  
  502. }
  503. });
  504. }
  505. catch(err) { console.log("erro json"); /* erros de JSON */ }
  506.  
  507. })
  508. .on("error", function(err) { console.log(err.message); })
  509. break;
  510.  
  511.  
  512.  
  513. return;
  514.  
  515. }
  516. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement