dodání ihned! nové
Hledáme programátora do rostoucího týmu ITnetwork.cz, 100% home office, 100% flexibilní pracovní doba. Více informací
Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
BF
Avatar
Petr Čech
Redaktor
Avatar
Petr Čech: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
the cake is a lie
Avatar
Petr Čech
Redaktor
Avatar
Petr Čech:15.9.2016 14:05

Toto vlákno je stále aktivní

Nahoru Odpovědět
15.9.2016 14:05
the cake is a lie
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
Luboš Běhounek Satik
Autoredaktor
Avatar
Odpovídá na Petr Čech
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
15.9.2016 16:36
https://www.facebook.com/peasantsandcastles/
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Petr Čech
Redaktor
Avatar
Odpovídá na Jan Vargovský
Petr Čech: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
the cake is a lie
Avatar
jackx
Člen
Avatar
Odpovídá na Petr Čech
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
Redaktor
Avatar
Petr Čech: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
16.9.2016 14:31
the cake is a lie
Avatar
Petr Čech
Redaktor
Avatar
Petr Čech: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
the cake is a lie
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.