GMC Bulgaria

Здравейте ( Вход | Регистрация )

Faucet Networking, basics
Zlobara
коментар 00:16:18, 24-December-2012, Monday
Коментар #1


Мълчаливко


Група: Потребител
Коментари: 4
Регистриран: 23.12.12
Потребител № 1717



Та така...Какво е faucet networking?
Това е сравнително ново extension за Гейм Мейкър,който позволява да се правят мултиплеър игри.Води се по-добро от 39 длл,не съм навътре в тия неща,затова не мога да обясня точно какво му е по-доброто,но да приемем факта за верен,защото самият автор на популярното старо dll казва,че го е написал доста куцо.
Та какво трябва да знаем за начало?
За начало трябва да знаем,че връзките могат да се извършат с два вида протоколи TCP и UDP.Първият вид ( http://bg.wikipedia.org/wiki/TCP ) е най-разпространеният интернет протокол.Лично аз никога не съм се занимавал с втория вид,затова не смея да говороя за него.
Също така трябва да знаем и какво е socket.Сокетът е връзката между клиент и сървър или обратното,чрез която се пращат пакети с дата.Също така имаме бъфери,които "държат" въпросната дата.При 39 длл си има default buffer,а при faucet networking има два бъфера send i receive buffer,които не може да се видят(нямат си имена),но може да се използват.Също така можете и да си направите свой бъфер с фунцкията
Код
buffer=buffer_create()
,ама да не се задълбаваме в подробности...Също така датата,която изпращаме трябва да има определен размер:
Код
//Byte = 1 Byte (heh) and can range from 0 to 255.                                      
//Short = 2 Bytes and can range from -32768 to +32767.                                  
//UShort = 2 Bytes and can range from 0 to +65536                                      
//Int = 4 Bytes and can range from -2147483648 and +2147483647                          
//UInt = 4 Bytes and can range from 0 and +4294967296                                
//Float = 4 Bytes                                                                      
//Double = 8 Bytes

Например,ако имаме да пращаме живот на играч,който е максимум 100,няма да използваме short,а byte,за да не създаваме излишен трафик...
Getting started(Да започваме!)
Създаваме server.gmk и client.gmk всяко с по един обект control вътре.
Първо пъхаме в create-a control-a на клиента:
Код
server=tcp_connect("127.0.0.1",7777);//търсим сървър на този адрес

После пъхаме в control обекта на сървъра в create-евент:
Код
listen = tcp_listen(7777);//това е акцептор на всички адреси през този порт

На същия обект в степ:
Код
socket = socket_accept(listen); //търсим клиенти от адреса на акцептора

Та сега това "socket" ни се води сокета на клиента,който сме приели.Той приема стойности само,когато се логне клиент,иначе =0...
Па сега нека му пратим на клиента нещо...
в същия степ евент слагаме:
Код
if (socket>0)
{
    //send player to client
    write_byte(socket,1); //1 byte //firstbyte
    write_byte(socket,5); //1 byte
    socket_send(socket); //пращаме по сокета на логналия клиент...
}

write_byte(socket,1); //1 byte //firstbyte- е стойност,която ще получим в едно нещо наречено integer,което се превежда идентификатор(идентифицира,разпознава собщенията)...
write_byte(socket,5); //1 byte- е съобщението,което получава клиента като стойност при определен случай на индификатора.
socket_send(socket); //пращаме по сокета на логналия клиент... -е това вече е обяснено...

Време е за клиента сега.Степ евента на control трябва така да го направиме да изглежда:
Код
tcp_receive(server,1);
    msgid=read_byte(server);
    switch (msgid) //индентификатор
    {
        case 1:
            tcp_receive(server,1);
            aaa=read_byte(server);
            break;
    }

Та така.С първото tcp_receive получаваме "write_byte(socket,1); //1 byte //firstbyte",първият байт,който ни е пратен и индификатора различава.От него надолу индификатора казва според стойността му какво трябва да се случи.В нашия случай стойността на msgid=read_byte(server);,което е е получената стойност на write_byte(socket,1); е 1 (case 1:) и е получено по сокета server.
Следователно индификатора казва,че нататък трябва да се получи още един байт tcp_receive(server,1);,който го четем aaa=read_byte(server);.
Този байт се оказва петицата от write_byte(socket,5); //1 byte .

Сега,ако връзката наистина се е получила сложете:
Код
if variable_local_exists("aaa")
{
draw_text(50,50,aaa);
};

Трябва да се види една петица tongue.gif clap.gif
Ето тука качих това,за което говорих досега:
http://www.2shared.com/file/iiVLHt_3/faucettutorial.html?
Фауцет се тегли от http://gmc.yoyogames.com/index.php?showtopic=498062 има едно зелено текстче в поста "here".В .zip-a,който изтеглите има и едно pdf ,което ще ви научи на всичко останало...
+В това,което съм качил добавих още няколко обяснения,за да е по-лесно. tongue.gif
Go to the top of the page
 
+Quote Post
 
Start new topic
Отговори
Пешо
коментар 17:41:28, 24-February-2013, Sunday
Коментар #2


Редовен бъбривко
Икона на група

Група: Администратор
Коментари: 661
Регистриран: 08.07.05
Град: Бургас
Потребител № 44



Код
msgid=read_byte(server);


Излиза, че е smile.gif Можеш сам да създаваш променливи, когато си поискаш.


--------------------
Go to the top of the page
 
+Quote Post
Zlobara
коментар 20:42:30, 15-June-2013, Saturday
Коментар #3


Мълчаливко


Група: Потребител
Коментари: 4
Регистриран: 23.12.12
Потребител № 1717



Цитат(Пешо @ 18:41:28, 24-February-2013, Sunday) *
Код
msgid=read_byte(server);


Излиза, че е smile.gif Можеш сам да създаваш променливи, когато си поискаш.

Значи виж сега пичага,идеята е да се направи индетификатор.
Сървъра праща информация и клиента я чете така:
Първия байт е ID-то на съобщението-msgid.Както знаем той може да има стойност от 0 до 255.И според неговата стойност клиента продължава по различен начин да прави разни неща.
Не помня как точно го бях направил в този екзампъл,но принципно е прави с
Цитат
switch(msgid)
{
case число от 0 до 255:
правим нещо
break;
}

Ако не знаеш какво прави switch и това ти обияснявам.Switch проверява стойностите на дадена променлива ,прави дадена операция и е по-мързелив вариант от това да правиш if-ове".С други думи,ако ползваш if кода ще излгежда така:
Цитат
if msgid=число от 0 до 255 {правим нещо}
if msgid=друго число от 0 до 255 {правим друго нещо}

Та пичага ако имаш въпроси скайпа ми е happy_mudvayne.Аз рядко влизам тук,затова ще ти е по-просто по скайп да питаш.Ама надявам се да знаеш basic работите,защото все още си спомням на 10 годинки как исках да направя "супер якото най-велико MMORPG на света" и до никъде не стигнах...Ааа и да не забравя с гейм мейкър не се правят хубави игри като цяло.

@Яверт
Еми то аз само с GM мога да работя,тъй като само с компютрите тотално неграмотен.Но пък с Гейм Мейкъра и faucet-а можеш спокойно да се научиш да правиш този тип работи и после като разбереш как работрят да си направиш сериозна игра на някой истински език.Освен това чудото faucetnet се води доста по-бързо от противното и старо 39длл. Wink(LBG).gif

Ааа и да не забравя този пичага,автора на FAUCET има едно творение: http://ganggarrison.com/ .Макар и demake на team fortress 2 с примитивни графики,игрицата си е супер луда и винаги има играчи в сървърите.
Go to the top of the page
 
+Quote Post

Пишете в тази тема


Reply to this topicStart new topic
1 потребител(и) четат тази тема (1 гости и 0 скрити)
0 Потребител(и):

 



Олекотена версия Час: 14:43:08, 03.07.25