Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
matesax
Tvůrce
Avatar
matesax:10.11.2012 6:33

Dobrý den,
o první část se postará MemberShip. Dále tu mám tabulky a zároveň modely: MainData - nick, jméno, email,...; State - zdraví, typ lodi, náklad,...; Wealth - děla, munice, piráti,... Problém je, že je stejně potřebuji mít skoro na každé stránce - a na moři již nemluvě, tak se chci zeptat - má to smysl dělit? Děkuji.

 
Odpovědět
10.11.2012 6:33
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:10.11.2012 9:30

Ne. A jak zní otázka?

Nahoru Odpovědět
10.11.2012 9:30
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:10.11.2012 9:33

Problém je, že je stejně potřebuji mít skoro na každé stránce - a na moři již nemluvě, tak se chci zeptat - má to smysl dělit?

A to ne patří tam ne? :)

 
Nahoru Odpovědět
10.11.2012 9:33
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:10.11.2012 9:39

Patří tam ne. Nemá smysl to dělit. Jen jsem nepochopil otázku a stále ji nechápu. Netuším, o čem je řeč.

Nahoru Odpovědět
10.11.2012 9:39
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:10.11.2012 9:48

Mám uživatele, ten má data - já je rozdělil - abych mohl poslílat formuláře - na nákup věcí - (zvlášť lodě, piráti,... a zvlášť od úplně nesouvisejících dat). Takže jsem si chtěl posílat data přes ViewModel do každé stránky - co by jí příslušelo. Jenomže pokyny a další faktory mě stejně donmutily vše posílat do skoro každé stránky. Takže mě rozdělení spíše zdržuje. Ale zase si neumím představit tbulku s 22 sloupci... A jak to bude na moři to si již vůbec neumím představit... :)

Editováno 10.11.2012 9:50
 
Nahoru Odpovědět
10.11.2012 9:48
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:10.11.2012 9:51

Viděl jsem tabulku se 130 sloupci, ale rozhodně to nedoporučuji. V daném případě to může být i ve více než dvou tabulkách. Záleží na tom, jak dopadne normalizace. Model však má být jen jeden.

Nahoru Odpovědět
10.11.2012 9:51
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:10.11.2012 9:54

OK - tabulky jsou tři - jak jsem psal. Počítam s více typy děl atp. takže je to rozdělení na místě. Udělám to, jak píšeš...

 
Nahoru Odpovědět
10.11.2012 9:54
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:10.11.2012 10:04

Ze začátku jsem psával jednoduché modely, jak mi kdosi poradil. Pak jsem přišel na to, že vyjde jednodušší, když mu svěřím celou starost o databázi. To znamená, že controller modelu dodává data, která chce modifikovat a viewer si od něj vyptává data, která chce zobrazit.

Nahoru Odpovědět
10.11.2012 10:04
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:10.11.2012 10:11

A jak bych si měl vůbec poradit s nákupy? Totiž neustálé kontakty s databází budou zdržovat ne? Chtěl jsem zneužít virtuální paměti - mít to v proměnných, ale zdá se, že nemá smysl ani ten model. Totiž brát data přímo při vstupu nelze - JS nemůže pracovat s databází. Takže musím udělat formulář. Nechám tedy uživatele naklikat, kolik chce čeho - nejspíše zvaliduji, zda na to má dostatečný obnos - a odesílacím inputem to bude posláno do ActionResult a tam mohu rovnou updatovat řádek v tabulce - na což mi stačí ukládat Nick, který používám jako ID... Model bych stejně nemohl poslat na moře - GWT, takže i tam budu mít asi přímý kontakt s DB. Co myslíš? :)

Editováno 10.11.2012 10:13
 
Nahoru Odpovědět
10.11.2012 10:11
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:10.11.2012 10:36

Neustálý kontakt s databází je naprosto běžný. Jen se musí minimalizovat počet dotazů, abychom se databáze neptali na jednotlivé položky záznamu, ale vždy na celý záznam (všechny sloupce, které potřebujeme) nebo rovnou na výsledek nějakého spojení více tabulek. Tak, aby pokud možno controller z modelu nečetl a viewer do něj nezapisoval.

BTW: Proč nemůžeš poslat model na moře?

Editováno 10.11.2012 10:38
Nahoru Odpovědět
10.11.2012 10:36
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:10.11.2012 10:41

Do Javy?

(Vše píši v dotazech a poddotazech...)

Editováno 10.11.2012 10:42
 
Nahoru Odpovědět
10.11.2012 10:41
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:10.11.2012 10:45

Co to má společného s Javou?

Nahoru Odpovědět
10.11.2012 10:45
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:10.11.2012 10:45

Moře bude v Javě - tedy GWT... (Google Web Toolkit)

Editováno 10.11.2012 10:46
 
Nahoru Odpovědět
10.11.2012 10:45
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:10.11.2012 10:52

Nebo máš lepší návrh?

 
Nahoru Odpovědět
10.11.2012 10:52
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:10.11.2012 10:56

Přece nedovolíš moři, aby ti přímo zapisovalo do databáze. Musí hezky poprosit model.

Nahoru Odpovědět
10.11.2012 10:56
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:10.11.2012 10:58

A ten GWT - dobrá volba?

 
Nahoru Odpovědět
10.11.2012 10:58
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:10.11.2012 10:59

GWT neznám.

Nahoru Odpovědět
10.11.2012 10:59
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:10.11.2012 11:01

Tak v čem by jsi to dělal ty? :)

 
Nahoru Odpovědět
10.11.2012 11:01
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:10.11.2012 11:04

A co? Netuším, co děláš.

Nahoru Odpovědět
10.11.2012 11:04
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:10.11.2012 11:11

Hru podobnou Seafight. Takže prostě hráči řídí své lodě po moři, útočí na sebe, sbírají nejrůznější věci, plní úkoly,... Webowou část (správa účtu, správa herního majetku, správa questů,... + fórum,...) dělám v ASP. Tedy vše mimo hrací plochu - moře. Ovšem v čem udělat to moře? Byl mi doporučen ten GWT...

Nakupovat, brát questy atp. má jít jak na moři, tak i ve webové části,...

Editováno 10.11.2012 11:11
 
Nahoru Odpovědět
10.11.2012 11:11
Avatar
Odpovídá na matesax
Drahomír Hanák:10.11.2012 11:16

Jak na to tak koukám, tak to radši udělej v JS. Ten GWT tě nějak mate. Je to Java kompilovaná na JS. To znamená, že je to client-side. Pokud bys chtěl něco nějak ukládat, musíš se vždy zeptat serveru (AJAXem), pokud teda nepotřebuješ dočasné uložiště, jako je sessionStorage, localStorage nebo IndexedDB.

 
Nahoru Odpovědět
10.11.2012 11:16
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:10.11.2012 11:19

Jenže moře jen zprostředkovává požadavky, které vyřizuje webová část. Jinak by ti hráči dělali podfuky.

Nahoru Odpovědět
10.11.2012 11:19
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
matesax:10.11.2012 11:20

Aj - to mne vůbec nenapadlo. No já sám nevím, jak to řešit a JS si moc nepomůži... :) První věc - kam to budu vykreslovat? A druhá - co tedy s uživatelskými daty - přecijen bude nejlepší je co nejdříve uložit do DB...

 
Nahoru Odpovědět
10.11.2012 11:20
Avatar
Odpovídá na matesax
Drahomír Hanák:10.11.2012 11:24

Vykreslovat můžeš třeba na HTML prvek canvas. Teoreticky bys mohl kreslit i pomocí SVG (tam je výhoda, že View je vlastně XML, takže se s tím pěkně manipuluje v JS). Canvas je ale na tohle lepší a má větší podporu prohlížečů. Do databáze bys to ukládal asi pomocí AJAXu (asynchronního požadavku klienta na server)

Jak tak koukám na tu hru Seafight, tak to bude trochu problematické. To je real-time? To pak musíš použít WebSockets v JS a udělat si nějaký centrální prvek (třeba v Javě, C# nebo i PHP), který to bude řídit a spojovat všechny hráče. To není nemožné, ale taky to není žádná sranda.

Editováno 10.11.2012 11:27
 
Nahoru Odpovědět
10.11.2012 11:24
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:10.11.2012 11:25

Vykreslovat to budeš na canvas. Každou akci pošleš jako ajaxový požadavek na server, ten dle potřeby aktualizuje databázi a jako odpověď pošle, co se má změnit v klientské části.

Nahoru Odpovědět
10.11.2012 11:25
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
matesax:10.11.2012 11:28

Jo děkuji (oběma :) ) - nyní to chápu... Přišlo mi, že dělat něco jako Seafight na Canvas...

(právě - real-time)

Editováno 10.11.2012 11:30
 
Nahoru Odpovědět
10.11.2012 11:28
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Kit:10.11.2012 11:33

Vidíš, SVG mě pro tento účel nenapadlo. To by však musel ten web být v XHTML.

Nahoru Odpovědět
10.11.2012 11:33
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
matesax:10.11.2012 11:37

Tak jsem se dočetl, že se to používá na chaty atp. - nebude hra na to moc náročná?

 
Nahoru Odpovědět
10.11.2012 11:37
Avatar
Odpovídá na matesax
Drahomír Hanák:10.11.2012 11:45

Výkon JavaScriptu se za poslední roky několikanásobně zvýšil. Můžeš tam vykreslovat i dost detailní 3D grafiku, takže myslím, že tohle je jen maličkost. Hra rozhodně náročná (pro klienta) nebude. Navíc nebude vyžadován žádný plug-in ke stažení, což je taky velké plus. Spíš to bude zatěžovat server, na kterém to pojede a v tom JavaScriptu bude režie hry o dost těžší, než třeba v Javě. Možná bych se podíval po nějakém JS frameworku.

Kit: Však to jde zapsat i do HTML5, ne? Teda alespoň v chromu mi to funguje dobře.

 
Nahoru Odpovědět
10.11.2012 11:45
Avatar
Kit
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
Kit:10.11.2012 12:00

No jo, SVG funguje v HTML5 pěkně. Díky za tip.

Však na serveru to pojede v Javě nebo v něčem podobném, ne?

Nahoru Odpovědět
10.11.2012 12:00
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Odpovídá na Kit
Drahomír Hanák:10.11.2012 12:17

Jasně na serveru to může zpracovávat de facto jakýkoli serverový jazyk. Viděl jsem i WebSockets server v PHP. Samozřejmě to jde napsat i v Javě, C# (tady existuje spousta knihoven pro práci s WS) a dalších jazycích. Je to dost zajímavé. Napsal jsem si vzdálené ovládání PC pro změnu hlasitosti a spouštění hudby. Google zas s pomocí WS udělal webovou aplikaci jako dálkové ovládání na G+ a další své služby :) Dost v tom vznikají i chaty a podobné aplikace, které si nevystačí s HTTP.

 
Nahoru Odpovědět
10.11.2012 12:17
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Drahomír Hanák
matesax:19.11.2012 6:56

Tak jsem to dokázal! :) Jedu přes SilverLight - kde se stačí spojit s WCF a tím to propojit se serverem. Trochu mě štve, že jsou s ním problémy - zdá se, že mu vadí Win. 8 - a na FF nejede vůbec...

 
Nahoru Odpovědět
19.11.2012 6:56
Avatar
Odpovídá na matesax
Drahomír Hanák:19.11.2012 15:05

Co jsem slyšel, tak Silverlight je dnes už mrtvá technologie. V C# se s tím ale musí dělat pěkně.

 
Nahoru Odpovědět
19.11.2012 15:05
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na matesax
David Hartinger:19.11.2012 15:24

Jak říká Drahomír Hanák, Silverlight je mrtvý, stejně jako Flash. Vytlačilo je HTML 5.

Nahoru Odpovědět
19.11.2012 15:24
You are the greatest project you will ever work on.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:19.11.2012 16:38

Kdysi jsem si chtěl Moonlight nainstalovat, ale z nějakého důvodu jsem si to rozmyslel. Už ani nevím proč. Pokud je Moonlight skutečně mrtvý, tak už ho ani instalovat nebudu.

Možná mi vadilo, že nebyl na oficiálních instalačkách OS, ale od nějaké firmy Microsoft.

Nahoru Odpovědět
19.11.2012 16:38
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na David Hartinger
matesax:20.11.2012 16:06

Tak v HTML5 to asi těžko udělám... :) Zkouším nyní WPF. Přijde mi ale blbé mít stranu klienta a stranu serveru - tedy stejně potřebuje každý klient vidět všechny hráče ve hře. Tak jsem přemýšlel, že by u klienta vznikaly a prováděly se jen akce a na serveru by probíhalo zpracování a možná i vykreslování. Ovšem tím bych musel vymyslet, jak řešit třeba plutí lodi. Totiž - přijde mi blbé mít vše u klienta a neustále kontaktovat server (vše se tím provádí 2X) - chtěl bych toho co nejvíce přenést rovnou na server...

 
Nahoru Odpovědět
20.11.2012 16:06
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.11.2012 16:18

Snad obráceně, ne? Akce se provádí na serveru a vykreslování na klientovi. Základním pravidlem je co nejvíc práce převést na klienta, ale veškerou logiku hry a data ponechat na serveru.

Nahoru Odpovědět
20.11.2012 16:18
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:20.11.2012 16:24

Jasně - jak jsem psal, to bude pak tak, že se klient pohne - a bude pořád kontaktovat server o své pozici - aby mohl být vykreslen i ostatním hráčům... Kdybych kreslil rovnou na serveru, mohl bych kreslit všechny hráče najednou...

 
Nahoru Odpovědět
20.11.2012 16:24
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:20.11.2012 16:52

Jenže na serveru nemůžeš tak plýtvat výkonem jak na klientovi. Ať si to každý klient vykreslí sám. Také tím ušetříš přenosovou kapacitu.

A nevymýšlej ptákoviny. Obrázky se na serveru nevykreslují.

Nahoru Odpovědět
20.11.2012 16:52
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:22.11.2012 17:35

A v čem to tedy dělat? Zkouším XBAP, ale místo spuštění se dočkám akoráte stahovacího dialogu. Tak už mi došly nápady v čem to udělat... :)

Editováno 22.11.2012 17:36
 
Nahoru Odpovědět
22.11.2012 17:35
Avatar
Kit
Tvůrce
Avatar
Odpovídá na matesax
Kit:22.11.2012 18:06

V HTML5.

Nahoru Odpovědět
22.11.2012 18:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Tvůrce
Avatar
Odpovídá na Kit
matesax:23.11.2012 15:09

Pomůžeš mi s tím? Snad jsem již pochytil, jak pracovat se Sockety, ale nějak mi to nefunguje. :) Za základ jsem vzal zprovoznění této hry:

http://www.codeproject.com/…ame-in-HTML5

Kde JS kód pro komunikaci se serverem vypadá takto:

var socketSetup = function() {
        if(typeof(WebSocket) !== 'undefined') {
            socket = new WebSocket('ws://37.157.196.207:8080');
                socket.onopen = function() {
                        multiPlayer = true;
                        document.title = 'SpaceShoot MULTIPLAYER';
                };
                socket.onclose = function() {

                };
                socket.onmessage = function(e) {
                        var obj = JSON.parse(e.data);

                        if(obj.asteroid) {
                                var a = obj.asteroid;
                                asteroids.push(new asteroid(a.size, a.life, a.angle, a.rotation, a.x, a.y, a.vx, a.vy));
                        } else if(obj.added) {
                                for(var i = obj.added.length; i--; )
                                        ships.push(new ship(obj.added[i], { }, ships.length));
                        } else if(obj.removed) {
                                for(var i = ships.length; i--; )
                                        if(ships[i].id === obj.removed) {
                                                ships.slice(i, 1);
                                                break;
                                        }
                        } else if(obj.logic) {
                                for(var i = ships.length; i--; )
                                        if(ships[i].id === obj.logic.ship.id) {
                                                ships[i].control.shoot = obj.logic.keyboard.shoot;
                                                ships[i].control.left = obj.logic.keyboard.left;
                                                ships[i].control.right = obj.logic.keyboard.right;
                                                ships[i].control.up = obj.logic.keyboard.up;
                                                ships[i].control.down = obj.logic.keyboard.down;
                                                ships[i].boost = obj.logic.ship.boost;
                                                ships[i].angle = obj.logic.ship.angle;
                                                ships[i].x = obj.logic.ship.x;
                                                ships[i].y = obj.logic.ship.y;
                                                ships[i].life = obj.logic.ship.life;
                                                ships[i].ammo = obj.logic.ship.ammo;
                                                ships[i].hitByAsteroid = obj.logic.ship.hitByAsteroid;
                                                ships[i].hitAsteroids = obj.logic.ship.hitAsteroids;
                                                ships[i].shotAsteroids = obj.logic.ship.shotAsteroids;
                                                ships[i].hitShips = obj.logic.ship.hitShips;
                                                break;
                                        }
                        }
                        else if(obj.status) {
                                ships[0].x = obj.status.x;
                                ships[0].y = obj.status.y;
                                gameRunning = true;
                        }
                };
        } else
                gameRunning = true;
};

A na server jsem umístil poslouchač:

class SeaManager
{
    private const int gamePlayers = 4;

    public SeaManager()
    {
        int id = 1000,
            ticks = 0;

        Random ran = new Random();
        Hashtable allSockets = new Hashtable();
        WebSocketServer server = new WebSocketServer("ws://37.157.196.207:8080");
        Timer timer = new Timer(40);
        bool gameRunning = false;

        server.Start(socket =>

...

socket.OnMessage = message =>
{
    JsonObject json = new JsonObject();
    json["logic"] = JsonObject.Parse(message);
    json["logic"]["ship"]["id"] = (int)allSockets[socket];
    string back = json.ToString();

    foreach (IWebSocketConnection s in allSockets.Keys)
        if(s != socket)
            s.Send(back);
};

A v Controlleru - před zobrazením stránky vytvořím instanci:

public ActionResult Sea()
{
    new SeaManager();

    return View(user);
}

Co dělám špatně? Děkuji.

Editováno 23.11.2012 15:11
 
Nahoru Odpovědět
23.11.2012 15:09
Avatar
matesax
Tvůrce
Avatar
matesax:25.11.2012 9:15

Problém skoro vyřešen, jen se mi spojení předčasně ukončí:

Časová značka: 25.11.2012 9:13:57
Chyba: Spojení se serverem ws://37.157.196.207:8080/ bylo v průběhu načítání stránky ukončeno.
Zdrojový soubor: http://kos.lusorion.com/Scripts/Sea/sockets.js
Řádek: 3

Kde mám hledat chybu? Děkuji.

 
Nahoru Odpovědět
25.11.2012 9:15
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 43 zpráv z 43.