gromek97 0 Zgłoś post Napisano Czerwiec 6, 2017 Cześć, czy pomoże mi ktoś przerobić ten kod z php na javascript? <?php /* shard_status.php v1.0 This is an example of how to get the status of a UO emulator (RunUO, ServUO, Sphere, etc.) by sending a packet to the shard address:port. \x7f\x00\x00\x01\xf1\x00\x04\xff Newer ServUO Shards will return something like this: Array ( [0] => ServUO [1] => Name=My Shard [2] => Age=3 [3] => Clients=1 [4] => Items=112187 [5] => Chars=2934 [6] => Mem=217514K [7] => Ver=2 ) RunUO and Sphere Shards don't return version: Array ( [0] => ServUO [1] => Name=My Shard [2] => Age=3 [3] => Clients=1 [4] => Items=112187 [5] => Chars=2934 [6] => Mem=217514K ) 2016 - Ixtabay for www.RunUO.com */ $shard_addr ="login.uodemise.com"; $shard_port ="2593"; $fp = fsockopen($shard_addr, $shard_port); if (!$fp) { echo "Cannot connect to $shard_addr:$shard_port\n"; } else { fwrite($fp, "\x7f\x00\x00\x01\xf1\x00\x04\xff"); stream_set_timeout($fp, 2); $res = fread($fp, 2000); $info = stream_get_meta_data($fp); fclose($fp); if ($info['timed_out']) { echo 'Connection to to $shard_addr:$shard_port timed out!'; } else { $ver = ''; $arr = explode(',', $res); // print_r($arr); // Uncomment if you want to see the raw array $emu = $arr[0]; $name = ltrim(strstr($arr[1],'='), '='); $age = ltrim(strstr($arr[2], '='), '='); $clients = ltrim(strstr($arr[3], '='), '='); $items = ltrim(strstr($arr[4], '='), '='); $mobs = ltrim(strstr($arr[5], '='), '='); $mem = ltrim(strstr($arr[6], '='), '='); if ($emu <> "ServUO") $ver = "Unknown"; // Only ServUO Shards return version else $ver = ltrim(strstr($arr[07], '='), '='); // Example usage echo <<<EOF <style type="text/css"> table tr th, table tr td { border-right: none; border-bottom: none; cell-padding-left: 2px; min-width: 100px; } th { text-align:right; } </style> <table> <tr> <th>Status:</th> <td>Online</td> </tr> <tr> <th>Emu:</th> <td>$emu</td> </tr> <tr> <th>Name:</th> <td>$name</td> </tr> <tr> <th>Uptime:</th> <td>$age hours</td> </tr> <tr> <th>Players Online:</th> <td>$clients</td> </tr> <tr> <th>Total Items:</th> <td>$items</td> </tr> <tr> <th>Mobs:</th> <td>$mobs</td> </tr> <tr> <th>Memory Used:</th> <td>$mem</td> </tr> <tr> <th>Version:</th> <td>$ver</td> </tr> </table> EOF; } } ?> Udostępnij ten post Link to postu Udostępnij na innych stronach
Fizyda 34 Zgłoś post Napisano Czerwiec 6, 2017 Z czym dokładnie masz problem? Bo prosząc o pomoc chyba nie masz na myśli "zrobić za mnie"? Udostępnij ten post Link to postu Udostępnij na innych stronach
gromek97 0 Zgłoś post Napisano Czerwiec 6, 2017 Chciałbym wiedzieć jak to dokładnie działa Udostępnij ten post Link to postu Udostępnij na innych stronach
Fizyda 34 Zgłoś post Napisano Czerwiec 6, 2017 Nawiązujesz połączenie z hostem o podanym adresie na określonym porcie Wysyłasz do hosta dane "\x7f\x00\x00\x01\xf1\x00\x04\xff" Ustawiasz limit czasu na odpowiedź Odczytujesz odpowiedź od hosta przy czym oczekujesz odpowiedzi o maksymalnej długości 2000 byteów Zamykasz połączenie Otrzymane dane dzielisz po przecinku na poszczególne elementy tablicy Poszczególne elementy tablicy przypisujesz do zmiennych; wcześniej odnajdując znak "=" i usuwając wszystko do tego znaku włącznie z danego elementu tablicy Wyświetlasz dane Udostępnij ten post Link to postu Udostępnij na innych stronach
systemy.internetowe 7 Zgłoś post Napisano Czerwiec 22, 2017 Cześć, czy pomoże mi ktoś przerobić ten kod z php na javascript? $fp = fsockopen($shard_addr, $shard_port); fwrite($fp, "\x7f\x00\x00\x01\xf1\x00\x04\xff"); stream_set_timeout($fp, 2); $res = fread($fp, 2000); $info = stream_get_meta_data($fp); fclose($fp); Przedmiotowy skrypt realizuje obsługę socketów w tym wypadku w PHP. Jak widzisz lub i nie masz tam: - nawiązanie połączenia - wysłanie danych do gniazda - odczytanie z gniazda - zamkniecie połączenia - obróbka danych. Do operacji na socketach (gniazdach) w node masz bibliotekę lub komponent jak zwal tak zwal "net" Wiec musisz wykonać podobnie https://nodejs.org/api/net.html Rożnica jest taka, ze w tym wypadku PHP działa w trybie synchronicznym przepływ działa liniowo tak jak masz w kodzie natomiast NODE.js w sposób asynchroniczny, wiec opiera sie na wywołaniach zwrotnych "calback". Udostępnij ten post Link to postu Udostępnij na innych stronach
gromek97 0 Zgłoś post Napisano Czerwiec 25, 2017 (edytowany) Zrobiłem coś takiego tylko dostaje zero odpowiedzi const net = require('net'); const client = net.connect({host: '81.2.247.112', port: 8124}, () => { // 'connect' listener console.log('connected to server!'); client.write('\x7f\x00\x00\x01\xf1\x00\x04\xff'); }); client.on('data', (data) => { console.log(data); client.end(); }); client.on('end', () => { console.log('disconnected from server'); }); Edytowano Czerwiec 25, 2017 przez gromek97 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
kbck 0 Zgłoś post Napisano Czerwiec 25, 2017 (edytowany) const net = require('net'); const client = net.connect({host: 'login.uodemise.com', port: 2593}, () => { // 'connect' listener console.log('connected to server!'); let buf = Buffer.from([0x7F, 0x00, 0x00, 0x01, 0xF1, 0x00, 0x04, 0xFF]); client.write(buf); }); client.on('data', (data) => { console.log(data.toString('utf8')); client.end(); }); client.on('end', () => { console.log('disconnected from server'); }); connected to server! RunUO, Name=Demise - AOS, Age=8, Clients=345, Items=9624249, Chars=207449, Mem=10661523K, Ver=2 edit dla ciekawskich: Buffer([0x7F, 0x00, 0x00, 0x01, 0xF1, 0x00, 0x04, 0xFF]) -> <Buffer 7f 00 00 01 f1 00 04 ff> Buffer('\x7F\x00\x00\x01\xF1\x00\x04\xFF') -> <Buffer 7f 00 00 01 c3 b1 00 04 c3 bf> Buffer('\x7F\x00\x00\x01\xF1\x00\x04\xFF', 'latin1') -> <Buffer 7f 00 00 01 f1 00 04 ff> W dokumentacji JS jest napisane, że notacją \xXX escapujemy znaki latin1 Edytowano Czerwiec 25, 2017 przez kbck (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
gromek97 0 Zgłoś post Napisano Czerwiec 25, 2017 (edytowany) dziękuję bardzo dużo mi pomogliście Edytowano Czerwiec 25, 2017 przez gromek97 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
gromek97 0 Zgłoś post Napisano Czerwiec 29, 2017 A jeszcze takie pytanie jak zrobić to w drugą stronę? Udostępnij ten post Link to postu Udostępnij na innych stronach
kbck 0 Zgłoś post Napisano Czerwiec 29, 2017 https://gist.github.com/creationix/707146 pierwszy link z google Udostępnij ten post Link to postu Udostępnij na innych stronach