Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Node.js- pomoc w uruchomieniu
miccom
post 17.06.2022, 17:29:21
Post #1





Grupa: Zarejestrowani
Postów: 493
Pomógł: 8
Dołączył: 7.07.2007
Skąd: Tychy

Ostrzeżenie: (0%)
-----


Cześć.

Postanowiłem uruchomić moją grę przeglądarkową.

Po kilku latach postawiłem sobie na localhost w xampp cały silnik gry ale pozostał ostatni element do uruchomienia- ale pokonał mnie sad.gif

Aby płynnie wymieniać dane między serwerem a przeglądarką i miedzy graczami zastosowano node.js

Nie jestem autorem tego kodu a kontakt z autorem się urwał sad.gif stąd poszukuję osoby która pomoże mi zdebugować a następnie uruchomić ( lub postawić na nowo ) node.js w mojej grze.

Wkleję przykładowe kody- jeśli chcesz pomóc i masz wiedzę nt. node.js- napisz do mnie.

Mój plik app.js wygląda następująco:

  1. var express = require('express');
  2. var app = express();
  3. var server = require('http').createServer(app);
  4. var io = require('socket.io')(server);
  5. server.listen(process.env.PORT || 3000);
  6. console.log('Server is running ');
  7. var mysql = require('mysql');
  8. var fs = require('fs');
  9.  
  10. /* Load modules */
  11. var validator = require('validator');
  12. var serverKey = 'sdfgsdfgs7df564erwfsad';
  13.  
  14. var db_config = {
  15. host: 'localhost',
  16. user: 'root',
  17. password: '',
  18. database: 'wichry_wojny'
  19. };
  20. var connection;
  21.  
  22. function handleDisconnect() {
  23. connection = mysql.createConnection(db_config); // Recreate the connection, since
  24. // the old one cannot be reused.
  25.  
  26. connection.connect(function(err) { // The server is either down
  27. if(err) { // or restarting (takes a while sometimes).
  28. console.log('error when connecting to db:', err);
  29. setTimeout(handleDisconnect, 2000); // We introduce a delay before attempting to reconnect,
  30. } // to avoid a hot loop, and to allow our node script to
  31. }); // process asynchronous requests in the meantime.
  32. // If you're also serving http, display a 503 error.
  33. connection.on('error', function(err) {
  34. console.log('db error', err);
  35. if(err.code === 'PROTOCOL_CONNECTION_LOST') { // Connection to the MySQL server is usually
  36. handleDisconnect(); // lost due to either server restart, or a
  37. } else { // connnection idle timeout (the wait_timeout
  38. throw err; // server variable configures this)
  39. }
  40. });
  41. }
  42. handleDisconnect();
  43.  
  44.  
  45. app.io.route('ready', function(req) {
  46. connection.query('SELECT s.id, s.access, s.worldID, p.nation, p.id AS uid FROM sessions AS s LEFT JOIN players AS p ON (p.accountID=s.account AND p.worldID=s.worldID) WHERE s.session_key=\''+validator.escape(req.data.ident)+'\' AND s.access!=\'GUEST\' LIMIT 1', function(err, rows) {
  47. if (err) {
  48. console.error('error connecting (sid '+validator.escape(req.data.ident)+'): ' + err.stack);
  49. return;
  50. }
  51.  
  52. if (rows.length !== 0)
  53. {
  54. if (rows[0].length === 0) return;
  55.  
  56. var userData = rows[0];
  57. // join main world chat room
  58. console.log('Gracz dolaczyl do gry - swiat:'+userData.worldID+', nacja:'+userData.nation+', uid:'+userData.uid);
  59. req.io.join('worldchat'+userData.worldID);
  60. // join nation chat
  61. req.io.join('worldchat'+userData.worldID+'nation'+userData.nation);
  62. // join private chat
  63. req.io.join('worldchat'+userData.worldID+'private'+userData.uid);
  64. // join world map data
  65. req.io.join('worldmap'+userData.worldID+'nation'+userData.nation);
  66.  
  67. //app.io.room(req.data.room).broadcast('announce', {
  68. // message: 'Nowy czatowicz ('+rows[0].access+') na kanale: ' + validator.escape(req.data.room) + '. '
  69. //});
  70. }
  71. else
  72. {
  73. req.io.emit('noconn');
  74. }
  75. });
  76. });


Mam również np. metodę
  1. public function updateUnitData($intUnitID, $updateType, $zmienne)
  2. {
  3. $objHelper = init::getFactory() -> getService('helper');
  4. $fieldAdd = false;
  5.  
  6.  
  7. ... operacje na bazie danych itp.
  8.  
  9. $objHelper -> sendReqToNodeJS($arrayData, ADRES . ':3000/game'); // ADRES to 'http://localhost:8020'; jako vhost xampp
  10.  
  11. echo json_encode(true);
  12. $arrUnitData = null;
  13. }


  1. public function sendReqToNodeJS($arrayData, $urlData = ADRES .'/message')
  2. {
  3.  
  4. // set password
  5. $arrayData['password'] = 'sdfgsdfgs7df564erwfsad';
  6.  
  7. //if (!isset($_SESSION['cookieFile'])) $_SESSION['cookieFile'] = tempnam (BASE_DIR."/tmp", "connect.sid");
  8. $ch = curl_init($urlData);
  9. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  10. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  11. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
  12. curl_setopt($ch, CURLOPT_HEADER, TRUE);
  13. curl_setopt($ch, CURLOPT_POST, true);
  14. curl_setopt($ch, CURLOPT_NOBODY, FALSE);
  15. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  16. curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($arrayData));
  17. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  18. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 2);
  19. curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  20. 'Content-Type: application/json',
  21. 'Content-Length: ' . strlen(json_encode($arrayData)), 'Expect:')
  22. );
  23. $res = curl_exec($ch);
  24.  
  25. //if (substr($res, 0, 12) != 'HTTP/1.1 200')
  26. //{
  27. // debug::saveLog(get_class($this).': '.date('H:i:s d-m-Y').' : Linia 50 - nodeJS zwrócił stronę błędu '.var_export($arrayData, true));
  28. //}
  29. }



A w pliku html mam takie elementy:

  1. <script src="http://localhost:3000/socket.io/socket.io.js"></script>
  2. <script type="text/javascript">
  3.  
  4. io = io.connect('{{ constant("ADRES") }}:3000', {
  5. 'force new connection': true,
  6. transports: ['xhr-polling']
  7. });
  8. // 'websocket',
  9. function socketConnect(mapIdent)
  10. {
  11. // Send the ready event.
  12. io.emit('ready', {'ident': mapIdent});
  13.  
  14. io.on('noconn', function(data) {
  15. jAlert('Nie udało się połączyć z serwerem mapy. Odśwież stronę.');
  16. });
  17. }
  18. io.on('message', function(data) {
  19. if (readCookie('chatSounds') && data.info.playerID != {{ player.playerID }}) soundAPI.init(['maszyna.mp3'], false);
  20. if($('#chatbox').find('#sb_'+data.info.chanType).length === 0)
  21. {
  22. $('#chatTab_'+data.info.chanType+' span').html('(N)');
  23. }
  24. if ($('#radio').css('display') == 'none' && readCookie('chatSounds') === null)
  25. {
  26. $('#przyciskRadio').html('<span class="blink">Ra[N]</span>');
  27. }
  28. $("#sb_"+data.info.chanType+' ul').append('<li><span class="date">'+ data.info.msgDate +':</span> <span class="sbUser_'+ data.info.nationID +'">'+ data.info.login +'</span> : '+data.message+'</li>');
  29. $('#sb_'+data.info.chanType+' ul').animate({ scrollTop : $('#sb_'+data.info.chanType+' ul').height() * 20 }, 'slow');
  30. });



Niestety, mimo uruchomienia pliku app.js ( widzę info że serwer nasłuchuje portu 3000 i mapa się uruchamia ) ale wykonanie ruchu jednostką zmienia dane w bazie danych- ale brak aktualizacji rekordów na mapce- po przeładowaniu mapy jednostka zmienia lokalizację na mapie.

Potrzebuję pomocy w uruchomieniu tego node.js smile.gif


--------------------
Jeśli pomogłem- kliknij POMÓGŁ-przyda się ;)- jeśli piszę bzdury- pisz pod postami. Poprawię się.
PISZĘ POPRAWNIE PO POLSKU!
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 14:28