Skocz do zawartości


 

Zdjęcie

JavaScript/Node.JS

JavaScript/Node.JS

  • Proszę się zalogować aby odpowiedzieć
9 odpowiedzi na ten temat

JavaScript/Node.JS

#1 gromek97

gromek97

    Nowy użytkownik

  • Użytkownicy
  • 5 postów

Napisany 06 czerwiec 2017 - 08:53

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;


       
       
    }


}






?>

 


  • 0

#2 Fizyda

Fizyda

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 498 postów

Napisany 06 czerwiec 2017 - 09:48

Z czym dokładnie masz problem? Bo prosząc o pomoc chyba nie masz na myśli "zrobić za mnie"?


  • 0

#3 gromek97

gromek97

    Nowy użytkownik

  • Użytkownicy
  • 5 postów

Napisany 06 czerwiec 2017 - 10:04

Chciałbym wiedzieć jak to dokładnie działa


  • 0

#4 Fizyda

Fizyda

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 498 postów

Napisany 06 czerwiec 2017 - 11:56

  1. Nawiązujesz połączenie z hostem o podanym adresie na określonym porcie
  2. Wysyłasz do hosta dane "\x7f\x00\x00\x01\xf1\x00\x04\xff"
  3. Ustawiasz limit czasu na odpowiedź
  4. Odczytujesz odpowiedź od hosta przy czym oczekujesz odpowiedzi o maksymalnej długości 2000 byteów
  5. Zamykasz połączenie
  6. Otrzymane dane dzielisz po przecinku na poszczególne elementy tablicy
  7. 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
  8. Wyświetlasz dane

  • 0

#5 systemy.internetowe

systemy.internetowe

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 140 postów
  • Firma:HTTP 200 usługi IT - Dariusz Janicki
  • Imię:Dariusz
  • Nazwisko:Janicki

Napisany 22 czerwiec 2017 - 11:56

 

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".

 

 

 

 


  • 0

#6 gromek97

gromek97

    Nowy użytkownik

  • Użytkownicy
  • 5 postów

Napisany 25 czerwiec 2017 - 07:58

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');
});

 


Edytowany przez gromek97, 25 czerwiec 2017 - 08:11.

  • 0

#7 kbck

kbck

    Nowy użytkownik

  • Użytkownicy
  • 23 postów

Napisany 25 czerwiec 2017 - 10:08

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


Edytowany przez kbck, 25 czerwiec 2017 - 10:35.

  • 0

#8 gromek97

gromek97

    Nowy użytkownik

  • Użytkownicy
  • 5 postów

Napisany 25 czerwiec 2017 - 10:34

dziękuję bardzo dużo mi pomogliście  :)


Edytowany przez gromek97, 25 czerwiec 2017 - 10:35.

  • 0

#9 gromek97

gromek97

    Nowy użytkownik

  • Użytkownicy
  • 5 postów

Napisany 29 czerwiec 2017 - 11:17

A jeszcze takie pytanie jak zrobić to w drugą stronę? 


  • 0

#10 kbck

kbck

    Nowy użytkownik

  • Użytkownicy
  • 23 postów

Napisany 29 czerwiec 2017 - 20:35

https://gist.github....eationix/707146

pierwszy link z google


  • 0





0 użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników