Skocz do zawartości

Ether - Biblioteka sieciowa dla GM


Rekomendowane odpowiedzi

Tytuł: Ether - Biblioteka sieciowa dla GM

 

Gatunek: Silnik sieciowy

 

Download: http://psichix.com/wp-content/uploads/2010/05/Ether.zip

Rozmiar pliku: 116 kb.

 

Autorzy:

Programowanie:
PsichiX (XenoN Core), Snake (GMApi)

 

Opis: Ether jest biblioteką sieciową dla GM łączącą w sobie cechy wielu innych bibliotek. Obsługuje sockety do komunikacji sieciowej, bufory do przechowywania danych, sesje sieciowe do zautomatyzowanej komunikacji klient-serwer (dla gier multiplayer przede wszystkim), żądania HTTP do komunikacji z serwerami stron WWW (asynchroniczne pobieranie/wysyłanie plików i danych z/na serwer), oraz obsługuje tagi języków znaczników typu XML (odczyt treści stron HTML). W pliku projektu znajdują się przykłady użycia różnych części biblioteki. Kolejne (opisujące dokładniej specyficzne zagadnienia) przykłady już w drodze!

 

Obecnie przykłady opisane w języku angielskim (w sposób prosty) ale zabieram się za ich tłumaczenie.

Szykuję przykład wyszukiwarki sieciowej na bazie odczytu tagów HTML z wyników wyszukiwarki Google, oraz przykład transmisji strumieniowej (a'la radio sieciowe).

Odnośnik do komentarza
Udostępnij na innych stronach

sesje sieciowe to coś jak GMowe Mplay - Ty tylko ustalasz czy tworzysz sesje (jesteś serwerem) czy dołączasz do jakiejś innej sesji (jesteś klientem), ustalasz skrypty które będą się wykonywały przy połączeniu, rozłączeniu oraz aktualizacji serwera i klienta, a o resztę się martwić nie trzeba - biblioteka sama zarządza co kiedy ma się wykonać :)

Odnośnik do komentarza
Udostępnij na innych stronach

Jako ze nie znam sie zupelnie na grach sieciowych w GM-ie, mam 2 pytania:

1. To jest cos takiego jak 39dll?

2. Jesli tak, to co jest lepsze? :D

Moze niedlugo podejme przedostatni krok w poznawaniu GM-a - zrobie gre sieciowa :)

Odnośnik do komentarza
Udostępnij na innych stronach

Czy zrobiłeś jakieś kursy czy coś do dllka? Interesowały by mnie połączenia sieciowe ;] Jedynie tworzenie servera i clienta oraz wysyłanie przez server do wszystkich podłączonych clientów stringa po naciśnięciu klawisza. Mógłbyś zrobić taki przykład? Bo inna rzeczy odwracają tylko uwagę... i w polskim języku jeśli to możliwe:)

Odnośnik do komentarza
Udostępnij na innych stronach

Muuczek:

1. Tak, cos jak 39dll oraz pare innych, takie all in one

2. autor zawsze powie ze jego twor jest lepszy od innych, ale jesli mam byc obiektywny to powiem tak, ze moja biblioteka jest lepsza ze wzgledu na posiadanie ulatwien typu wlasnie sesje, sciaganie / wysylanie plikow na www, odczyt tagow HTML(XML) i paru innych ficzerow

 

DobryZiom: wszystkie przyklady dostepne sa w pliku projektu gm6. Przyklad ktory poszukujesz to wlasnie przyklad sesji, ale robie tez jego dokladniejsza wersje, bardziej opisana rozbudowana, taki maly silniek malej gry mmo :) oczywiscie wszystkie przyklady beda przetlumaczone na jezyk polski ;)

 

INFO:

Dodalem nowa wersje biblioteki. Poprawilem w niej buga z sciaganiem asynchronicznym plikow, oraz dodalem przy okazji przyklad jak sciagac duze pliki + wyswietlany postep sciagania.

Download: http://psichix.com/wp-content/uploads/2010/05/Ether.zip

Odnośnik do komentarza
Udostępnij na innych stronach

roznica szybkosci ma znaczenie raczej przy operacjach na buforach (39dll z tego co widzialem za duzo razy tworzy i usuwa tymczasowe bufory dla oryginalow (przy odbieraniu/wysylaniu danych i paru innych operacjach a lepiej operowac na oryginalach bezposdrednio)), ale jak na dzisiejsze procesory to sa milisekundy roznicy (wieksze znaczenie ma to dla pamieci RAM)

Odnośnik do komentarza
Udostępnij na innych stronach

dobra le znalazłem buga:

GML (STEP)
var b;

// create temporary data buffer

b = EtBufferCreate()

 

// if last pozition is not equal to current position then:

if( x != xprevious || y != yprevious )

{

// write unsigned char value to buffer

EtBufferWriteUchar(

b, // buffer element

10 // value (10 as position update message)

)

// write number value to buffer

EtBufferWrite( b, socket ) // player socket on server to identify player

EtBufferWrite( b, x )

EtBufferWrite( b, y )

// send buffer data to all session clients

EtSessionSend( session, b )

// free data buffer

EtBufferFree( b )

}

 

// destroy temporary data buffer

EtBufferDestroy( b )

 

Jeżeli dobrze to zrozumiałem wysyłasz pozycje co stepa co jest bardzo złe a jeżeli chodzi o przykład silnika to naganne. No i nigdzie nie mogę znaleźć gdzie ustawiasz te ludziki na serwie...

Odnośnik do komentarza
Udostępnij na innych stronach

// if last pozition is not equal to current position then:

if( x != xprevious || y != yprevious )

czyli tylko wtedy gdy zmienia pozycje czyli nie do konca co stepa :P

ale mozna to zmienic na wysylanie docelowej pozycji co 5 klatek i podazanie do niej, to jest tylko przyklad by zrozumiec jak komunikacja dziala :)

Odnośnik do komentarza
Udostępnij na innych stronach

bufor ten zajmuje 0 przy utworzeniu a 25 bajtow w czasie wysylania danych (czyli po ich wpisaniu w bufor) wiec jest jak najbardziej dozwolone. 39dll natomiast wpisywal do bufora glownego i przy wysylaniu kopiowal go, czyi robil podwojna robote, tutaj natomiast od razu wpisujesz do tego bufora ktory wysylasz

Odnośnik do komentarza
Udostępnij na innych stronach

zgadza sie, dziala szybciej i zzera mniej pamieci.

Odnośnik do komentarza
Udostępnij na innych stronach

No i nigdzie nie mogę znaleźć gdzie ustawiasz te ludziki na serwie...

skrypt: OnServerClientUpdate - po utworzeniu sesji podpina sie skrypty zdarzen i silnik sam je wywoluje kiedy trzeba :)

 

i to wszystko przez bufor?

yep. szybosci samego procesu przesylania danych niestety nie da sie zwiekszyc.

 

Czy to jest szybsze od 39dll? ;P Topica nie chce mi się czytać...

w gruncie rzeczy tak.

 

psysio ile zajeło ci zrobienie tej biblioteki ;>?

z dwa tygodnie :P

 

Podoba mi się ;] Jak byś mógł to wiesz...ja czekam na przykład serva i clienta ;D Samo wysyłanie z serva do wszystkich clientów stronga lub real :] będę wdzięczny ;]

jasne, sie robi :D

Odnośnik do komentarza
Udostępnij na innych stronach

musze przyznać że puki co ładnie sie prezentuje, jeszcze nie kminie wszystkiego ale to przyjdzie z czasem, przydały by sie jakieś przykłady lub tutki ale pewnie z czasem napiszesz ;]

 

@edit. już chyba pojełem większość z tego DLL'a i musze przyznac ze nauka idzie bardzo szybko. Sesje obcykane, minigierka zrobiona, czas zająć się zapytaniami do serwerów.

Odnośnik do komentarza
Udostępnij na innych stronach

Dobry Ziom, niestety jutro dopiero dostaniesz przykład specjalnie dla Ciebie, ponieważ wczoraj usprawniałem wysyłanie i odbieranie danych ale zostało mi troche robótki do dokończenia na dziś i sesje nie działają na razie poprawnie, póki nie skończę dziś naprawiać tego.

Niezmiernie się cieszę że biblioteka okazała się przydatna :D Będę pracował nad kolejnymi ułatwieniami, kolejnym dodatkiem będzie upload plików na serwer www oraz komunikacja z serwerem poczty.

A może Wy macie jakieś pomysły na różne protokoły których obsługę można dodać do silnika? :)

Odnośnik do komentarza
Udostępnij na innych stronach

Async sluzy do wlaczenia trybu asynchronicznego odbierania danych, czyli trybu nie blokujacego aplikacji. Normalnie socket dziala w trybie blokowanym, czyli podczas wywolania EtSocketReceive() aplikacja jest blokowana dopoki nie dostanie wiadomosci, a z Async na true nie blokuje aplikacji.

Nagle umozliwia wysylanie malych wiadomosci, bez niego sa one buforowane w socketach i wysylane gdy przekrocza magiczny rozmiar (tyle zrozumialem z info na necie i z eksperymentow ;P)

Odnośnik do komentarza
Udostępnij na innych stronach

tutek, masz na mysli prosta gra multiplayer - jak najefektowniej zarzadzac komunikacja klient-serwer? :)

Odnośnik do komentarza
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...