This repository has been archived by the owner on Apr 24, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
standard.txt
177 lines (130 loc) · 8.26 KB
/
standard.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
Standard przesyłanych danych we wtyczce update.dll
--- językologia ---------------------------------------------------------------
Wiadomość - element <message> (w jednej z dwóch postaci)
Wiadomość URL - Wiadomość z atrybutem action="URL" . Najpierw będzie "migał" w zasobniku systemowym, dopiero po kliknięciu otworzy się odpowiednie okno.
Wiadomość MBOX - Wiadomość z atrybutem action="MBOX" . Pojawi się od razu na ekranie, najpewniej
blokując używanie programu w oczekiwaniu na wybranie akcji przez użytkownika...
Update - specjalny XML z opisem paczek do przeprowadzania aktualizacji
--- komunikacja - wysyłane z programu -----------------------------------------
Wtyczka wysyła zapytanie (POST) do tzw. Centralki z nast. parametrami:
last - ostatnio zwrócona przez serwer wartość info/this/@id
global - ostatnio zwrócona przez serwer wartość info/this/@global
request - rządanie ponownego przesłania ostatnich informacji:
"" - brak rządania (wtedy, gdy wysyła automat), wysyłamy tylko rzeczy, których użytkownik NIE widział
"CHECK" "VERSIONINFO" , "MOTD" , "MSG" , "UPDATE"
read - lista (oddzielana przecinkami) identyfikatorów przeczytanych komunikatów (może być ich ograniczona ilość!). Na razie nie jest przekazywane...
version - informacja o wersjach zamontowanych wtyczek i CORE'a:
ID=wersja\n
serverId - host centralki
betaLogin - login do konta beta
betaPass - haslo do konta beta jako MD5(serverId + MD5(haslo))
W QUERY przesylane sa parametry podane w url'u +
auto=1 - zapytanie wyslal automat
nopost=1 - obecnosc tego w url'u centralki zablokuje wysylanie poprzez POST
--- językologia - wysyłane z serwera ------------------------------------------
<?xml version="1.0" encoding="windows-1250"?>
<info>
<!--
Informacja o centralce... (Może znajdować się również na końcu XML'a, ale lepiej, żeby była pierwsza)
id - informacja do przechowania lokalnie w profilu Konnekta. Przy następnym zapytaniu dostaniemy ją w $_POST['last']. max 1024b
global - informacja do przechowania globalnie w profilu użytkownika systemu. Przy następnym zapytaniu dostaniemy ją w $_POST['global'] max 1024b
name - nie zmieniajacy sie prosty identyfikator. Dozwolone tylko znaki a-z , 0-9 i '_'
title - nazwa centralki do wyświetlania we wszystkich komunikatach
-->
<this id="" global="" time="" name="" title=""/>
<!--
Wiadomości
Atrybuty:
type - Typ wiadomości (UPDATE , MSG , MOTD , VERSIONINFO)
action="URL" - mryga ikonką w zasobniku. Po jej kliknięciu pokazuje treść wiadomości i po kliknięciu OK otwiera adres url
action="MBOX" - od razu otwiera MessageBox z treścią wiadomości
style - Styl wiadomości (INFORM, WARN, ERROR) - działa tylko z MBOX
url - adres url do otwarcia po przeczytaniu wiadomości (wymagany w URL)
time - [opcjonalnie] czas wstawienia komunikatu do systemu
id - [opcjonalnie] identyfikator komunikatu
Np.:
-->
<message type="MOTD" action="URL" title="To jest MOTD!" url="http://www.konnekt.info/MOTD">Treść wiadomości</message>
<message id="msg_1" type="MSG" action="URL" title="To jest wiadomość bez treści, ale za to miga w trayu" url="http://www.stamina.eu.org/konnekt/"/>
<message type="VERSIONINFO" action="MBOX" style="ERROR" title="Koniecznie zrób UPDATE!">Error Box</message>
<!--
Adresy mirrorów doklejane do URLa z plikiem definicji. Powinny miec rozne priority i byc ulozone malejaco
url - adres
priority - priorytet - wyzszy - lepszy... 0 - awaryjny (działa tylko gdy inne nie chodzą)
-->
<mirror id="" url="http://www.blah.com/update/" priority=""/>
<!--
Adresy XMLi z definicjami paczek
url - adres sieciowy pliku .xml z definicjami...
title - tytuł do wyświetlenia podczas pobierania pliku
onoption - zostanie zinterpretowane tylko przy wlaczonej tej opcji dla centralki (w ustawieniach, lub w url). Mozna podawac kilka po przecinku i poprzedzac ! dla negacji...
mirror - z jakich mirrorów można korzystać
extern - plik definicji moze byc wspoldzielony z innymi centralkami i pobierany jest z pierwszej centralki ktora go uzywa... Url takiego pliku powinien byc unikalny i taki sam na wszystkich centralkach ktore maja z niego korzystać.
checktime - KUpdate powinien sprawdzic czas modyfikacji pliku na serwerze, revision sprawdzany jest niezależnie...
-->
<update url="abc.xml" title="" onoption="beta" mirror="1,2" extern="1" checktime="1"/>
</info>
--- uwagi ---------------------------------------------------------------------
Jak to zaimplementować?
Centralka ma za zadanie określać CO należy użytkownikowi przedstawić i w JAKIEJ
formie. Przy pomocy odpowiedniej manipulacji identyfikatorów jest to zadanie
względnie proste...
W <this id=""> (jak i w global) najwygodniej przechowywać "sesję" użytkownika.
Czyli informacje o tym, jaka była np. ostatnia wiadomość wysłana do usera
(żeby nie wysłać mu jej ponownie), jaką datę miał plik definicji paczek,
znów, żeby nie wysyłać ponownie tego samego itd.
W PHP najwygodniej zrobić to tak:
$LAST = unserialize(@$_POST['last']);
$GLOBAL = unserialize(@$_POST['global']);
...
wrzucamy nowe komunikaty i aktualizujemy dane w $LAST i $GLOBAL
...
echo '<this id="'.htmlspecialchars(serialize($LAST)).'" global="'.htmlspecialchars(serialize($GLOBAL)).'"/>';
Należy przy tym pamiętać, że wysyłany xml musi być absolutnie poprawny,
atrybuty MUSZĄ być w cudzysłowach, a wszystkie znaki specjalne muszą zostać
escape'owane (< na < > na > " na ")
URL do centralki powinien być względnie stały. Przy każdej jego zmianie zostaną
utracone wartości zmiennych last, global i read!
URL rozróżniany jest do znaku '?'. Można więc dowolnie zmieniać przekazywane
parametry.
kUpdate wykorzystuje Cookies z IE. Tą drogą można połączyć centralkę
z przeglądarką (tylko IE)...
Atrybut time może przyjmować wartości w dwóch formatach:
RRRR-MM-DD GG:MM
lub
zgodny z poleceniem time() (PHP, C) i _time64() (MSVC)
Centralka służy przede wszystkim do przekazywania adresów do plików Update.
Przekazywanie wiadomości służy raczej do przekazywania linków do ważnych
informacji, lub zasobów zależnych od używanych wersji/zestawów wtyczek...
--- w praktyce ----------------------------------------------------------------
Załóżmy że mamy na serwerze bazę wiadomości MOTD (Message Of The Day) posortowanych
chronologicznie i plik Update. Zanim wyślemy je użytkownikowi trzeba sprawdzić
kilka rzeczy:
1. Czy zapytanie wysłał automat? $_POST['request'] == ""
TAK - wszystkie wiadomości wstawiamy jako URL
NIE - wstawiamiy je jako MBOX . Dodatkowo, jeżeli nic nie znajdziemy,
warto wstawić jeden MBOX i informacją, że nic nie zostało
znalezione...
2. Czego klient rząda?
W $_POST['request'] znajdziemy informację o tym, co użytkownik zamawia...
'' (puste) - zapytanie automatyczne. Wstawiamy jako URL tylko to, co nowe
"CHECK" - Wstawiamy tylko to, co nowe, ale jako MBOX
Dla obu powyższych wstawiamy nowości ze wszystkich "gatunków". W naszym
przykładzie będą to wiadomości MOTD i plik Update...
Request może być również połączeniem poniższych ciągów.
Obowiązuje zasada wyświetlania:
- Wszystkie nowości + 1 ostatnia (ew. z całego 1 dnia), nawet jeśli była czytana
- Jeżeli nie prowadzimy bazy danego typu komunikatów - zawsze wyświetlamy informujący o tym MBOX
"VERSIONINFO" - Najlepiej wstawić MBOX z adresem strony z informacją o najnowszej wersji
"MSG" - Wiadomości skierowane konkretnie do danego użytkownika (chociażby użytkownika konkretnej wersji wtyczki)
"MOTD" - Komunikaty dnia...
"UPDATE" - Zawsze wstawiamy znacznik z adresem pliku Update (<update...>)
3. Jak określić co było już czytane?
Z pomocą przychodzi $LAST i $GLOBAL omówione wcześniej...
Po wstawieniu wiadomości do $LAST wstawiamy o tym informację:
$LAST['ostatni_MOTD'] = $czas_ostatniego_wstawione_MOTD;
Następnym razem, sprawdzając $LAST pokażemy tylko nowsze wiadomości
(chyba że klient zażyczy sobie również jedną ostatnią!)
Jeżeli chcemy mieć absolutną pewność, możemy użyć atrybutu id. Ale jako
że z braku czasu i ogólnej potrzeby jego używania nie został zaimplementowany :)
Daj znać, jeżeli okaże się bardzo potrzebny...