Válí se ti projekty v šuplíku? Dostaň je mezi lidi a získej cool tričko a body na profi IT kurzy v soutěži ITnetwork summer 2017!
Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)
Avatar
Petr Čech (czubehead):13.9.2016 19:30

Ahoj. Mám adresář souborů, které se synchronizují přes cloudovou službu podobnou např. Dropboxu. Nemá žádné API.
Co bych potřeboval je, zjistit, zda je soubor otevřený ještě na jiném počítači připojeném k Internetu. Když si budu hrát s FileStreamem, docílím stejného efektu na stejném počítači. Ale já potřebuji, aby něco podobného fungovalo i pro 2 počítače na různých místech.
Napadlo mě, že bych mohl při otevření vytvořit ve stejném adresáři soubor, který by se smazal po zavření. Pokud by soubor existoval, znamenalo by to, že je soubor používán. To má ale problém. Pokud jakoukoliv instanci mojí aplikace uživatel ukončí jinak než standardní cestou, např. killnutím ze správce úloh, soubor se nesmaže a nesmaže se nikdy=> všechny další instance aplikace si budou myslet, že je používán.
Nemáte někdo nápad?

Odpovědět 13.9.2016 19:30
Why so serious? -Joker
Avatar
Petr Čech (czubehead):15.9.2016 14:05

Toto vlákno je stále aktivní

Nahoru Odpovědět 15.9.2016 14:05
Why so serious? -Joker
Avatar
Jan Vargovský
Redaktor
Avatar
Jan Vargovský:15.9.2016 16:06

Semafor, mutex, fronta zpráv, sdílená paměť ... Záleží, jestli je ten cloudy jen jako file server a nebo s tím souborem komunikuješ skrz něco.

EDIT: V případě toho druhého by ti neměl OS dát 2 handly pro jeden file, ale netuším, jestli to takhle platí, i když je to vzdáleně a ten proces neběží v tom OS

Editováno 15.9.2016 16:07
 
Nahoru Odpovědět 15.9.2016 16:06
Avatar
Odpovídá na Petr Čech (czubehead)
Luboš Běhounek (Satik):15.9.2016 16:36

Ten tvůj nápad bych rozšířil o kontrolu data toho souboru - ten druhý soubor, který indikuje by jsi měnil třeba každých 30s, takže pokud by uživatel aplikaci zavřel násilně, datum souboru by se přestalo updatovat.

Ty by jsi tedy jen kontroloval, jestli ten druhej soubor (indikující, že je ten soubor otevřený) buďto neexistuje nebo je starší než třeba minutu.

Nahoru Odpovědět  +1 15.9.2016 16:36
:)
Avatar
Odpovídá na Jan Vargovský
Petr Čech (czubehead):15.9.2016 17:16

Ty různé počítače spolu nemají šanci komunikovat, jediné, co sdílejí je adresář s tím souborem, který updatuje cloudová aplikace, která funguje jako všechno ostatní- Dropbox, Google Drive, OneDrive...

Nahoru Odpovědět 15.9.2016 17:16
Why so serious? -Joker
Avatar
jackx
Člen
Avatar
Odpovídá na Petr Čech (czubehead)
jackx:15.9.2016 23:00

Mno, ja bych ten "hlidaci" soubor povysil na XML, kde bys ukladal nazev otevreneho souboru, datum a cas otevreni a datum zavreni souboru. Pri otevreni souboru by se aktualizovala hodnota casu a data otevreni a hodnota zavreni by byla null. Jestlize by user tvuj softik vypl nasilim, jak tento stav rozeznas od toho, kdy ten soubor bude mit otevreny hodiny, nebo dny v kuse? Pak pri pokusu k otevreni souboru, jez ma datum otevreni a zaroven zavreni ==null, vytvoris jeho kopii... Takto to ma treba OneDrive. Tak nebo tak by na tento stav mel nejdrive tvuj soft upozornit a ty bys mel kontaktovat usera na druhe strane, pripadne schvalit vytvoreni kopie... A bylo by to pouzitelne i na vice souboru v jednom adresari :-)
Pak do toho XML jeste muzes zakomponovat nejaky atribut "ziju" vcetne data a casu zapisu "ziju". Toto datove razitko aktualizovat kazdou minuti. Jestlize pak aktualni cas je vetsi o 1 a vice minut, nez cas v razitku "ziju", softik nekdo vypnul :)

Nahoru Odpovědět 15.9.2016 23:00
Nic není nemožné.
Avatar
Petr Čech (czubehead):16.9.2016 14:31

Takže jsem si od každého vzal něco a vymyslel toto: [obrázek]
Myslíte, že je to funkční řešení?

Akceptované řešení
+5 Zkušeností
Řešení problému
Nahoru Odpovědět  +2 16.9.2016 14:31
Why so serious? -Joker
Avatar
Petr Čech (czubehead):17.9.2016 22:26

Takže už to mám zprovozněné. Funguje to tak, jak je naznačeno výše, jen LOCK soubor přímo v adresáři se ukázal býti nevhodným, tak jsem si na freehostingu udělal primitivní API. Víceméně zprostředkovává zápis k tomu souboru. Takže každých 30 s se pošle request na ten server s tím, že je to pořád aktivní. Samozřejmě je tam víc souborů, takže každému server na začátku přiřadí jedinečné Id, které se uchovává v souboru v adresáři vedle kýženého souboru.

Nahoru Odpovědět 17.9.2016 22:26
Why so serious? -Joker
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 8 zpráv z 8.