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

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


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

 



Олекотена версия Час: 16:28:45, 18.05.24