<bgdev />free

Вход Регистрация

Консултации по енджина - JS - нотификации.
0

0 1 2
#514 (ツ) johnfound
Създадено на 24.07.2020, видяно: 1024 пъти.
stewie

Пиша в момента от мобилната тема. Като начало може би ще е добре флаг за юзъра, който да възпира тези нотификации, а после да се работи по униклността им. Можеш ли да ми пратиш линк къде се пази кода за UI?В мобилната тема линка за нови непрочетени не работи и човек трябва да отваря, после пейджъра, после скролване. Понеже повечето пишат от мобилни устройства тези 2 неща ще им улеснят живота.

Целият код за нотификациите е тука: realtime.js

Обърни внимание обаче как се прави връзката съм евент сорса - работата е там, че може да има и друг файл който да иска някакви нотификации. Затова тук само се регистрират хандлерите, а после на onload се прави реалната връзка, след като всички хандлери и заявки са налични.

#524 (ツ) stewie
Последно редактирано на 24.07.2020 от stewie, видяно: 664 пъти.

Ами с прост XmlHttpRequest или каквото ползваш там за достигане на апито на асемблер, може да се дръпне един бул за да няма event listener на load на джама. Или пък ако искаш да е по-гъзарско в connect всеки път да се проверява, за да не рефрешва стрницата юзъра като смени стойността на була.

#525 (ツ) stewie
Последно редактирано на 24.07.2020 от stewie, видяно: 664 пъти.

Относно var magset и пропърти msgs. Какъв е моделът тук? Има ли си всяко съобщение уникално ид в модела? Ако да слагаш един масив с рендарните до момента и го проверяваш преди рендарването на ново съобщение. Ако няма ид май само контента те оправя.

#527 (ツ) johnfound
Последно редактирано на 24.07.2020 от johnfound, видяно: 1007 пъти.
stewie

Ами с прост XmlHttpRequest или каквото ползваш там за достигане на апито на асемблер, може да се дръпне един бул за да няма event listener на load на джама. Или пък ако искаш да е по-гъзарско в connect всеки път да се проверява, за да не рефрешва стрницата юзъра като смени стойността на була.

Използва се EventSource. Той е добре да стои кънектнат, но може да се променя маската на заявените евенти, които фронтенда иска да получава. XmlHttpRequest е само за обратния канал.

Маската е в променливата WantEvents и има следните стойности: sse_service.asm

Реално нас ни интересува evmUserActivity = 8, другите са за чата.

Ще трябва и някакъв чекбокс за UI, който малко не виждам къде ще го втъкнем в страницата...

#534 (ツ) stewie
Последно редактирано на 24.07.2020 от stewie, видяно: 664 пъти.

т. е. искаш evmUserActivity да пази стойността на този чекбокс за позволяване на съобщенията? Защо пазиш маските отделно в базата, каква е идеята? Като маскирам много стойности в една ги пазя в едно поле.

Кода за достъп до сикюел лайт ме насра. Почувствах се тъп.нетаджия :( Ама е яко как си държиш като стрингове завките.

#536 (ツ) johnfound
Създадено на 24.07.2020, видяно: 990 пъти.
stewie

т. е. искаш evmUserActivity да пази стойността на този чекбокс за позволяване на съобщенията? Защо пазиш маските отделно в базата, каква е идеята? Като маскирам много стойности в една ги пазя в едно поле.

Значи това всичко работи така - на бакенда работи сървис, който отговаря за SSE връзките. Когато от фронтенда се направи заявка за получаване на евенти, тази конекция се обявява за постоянна и се прехвърля към sse сървиса. Съответно, фронтенда казва какви евенти иска да получава, като изпраща маската със стойности. На бакенда, тя се прикача към сокета и когато се получат такива събития, то те се препращат само към сокетите, които са заявили, че ги искат.

А всички флагове са в едно поле, защото лично на мене така ми е по-привично, пък и се обработва по-лесно в бакенда.

#541 (ツ) stewie
Създадено на 24.07.2020, видяно: 664 пъти.

Добре, как ще се контрибютва оттук насетне? С уиндоус ще стане ли работата? FreshIde, имам nginx работещ локално, някакъв mysql lite?

#546 (ツ) johnfound
Последно редактирано на 24.07.2020 от johnfound, видяно: 981 пъти.
stewie

Добре, как ще се контрибютва оттук насетне? С уиндоус ще стане ли работата? FreshIde, имам nginx работещ локално, някакъв mysql lite?

За тестване ще ти трябва Linux, може на виртуална машина, иначе за работата, където искаш там работи.

За да си направиш работещ сетинг ти трябва да си клонираш репозиторито и да си направиш чекаут и т.н. както го описвам тук: https://board.asm32.info/asmbb/bazaar-model-with-fossil-scm.269/ или поне да събереш директориите ./www/images/ и ./www/templates/ на едно място.

После си сваляш 3-те файла от този пост: https://bgdev-free.asm32.info/kak-se-slaga-podpis-fuutar-w-postowete.3/#456 и ги слагаш във ./www/ директорията. Това са прекомпилирани енджина и библиотеките.

nginx го настройваш както е конфига в директорията ./.nginx/nginx.conf, можеш да погледнеш и скрипта nserver който аз използвам за пускане на nginx в локалната директория.

После стартираш nginx и engine. При първото стартиране ще се създаде базата данни и можеш да се конектнеш с браузъра.

П.П. А да, ще ти трябва и компилатор за LESS. Аз използвам clessc и си нямам на идея колко е стандартизиран езика. Скрипта build_styles.sh по идея компилира CSS файловете. Това се прави първо, а после когато се редактира някой LESS файл.

#547 (ツ) stewie
Създадено на 24.07.2020, видяно: 664 пъти.

Не разбирам следното. Може ли да компилирам под уиндоус? Може ли nginx да използва уеб сървър, който ще дигне компилираното асембли или каквото и да се нарича там да сервира хттп?

#549 (ツ) johnfound
Последно редактирано на 24.07.2020 от johnfound, видяно: 969 пъти.
stewie

Не разбирам следното. Може ли да компилирам под уиндоус? Може ли nginx да използва уеб сървър, който ще дигне компилираното асембли или каквото и да се нарича там да сервира хттп?

Да, можеш да компилираш AsmBB под Windows със Fresh IDE. Има особености, но не е кой знае колко трудно. Искаш ли да го обясня подробно?

Но ще получиш изпълним файл за Linux. Който ще трябва да пускаш някак си под Linux. Под WSL например се опасявам, че няма да работи. Може и да греша.

Обаче, освен това ще ти трябват и две библиотеки: MUSL и SQLite, които за съжаление ще можеш да компилираш само под Linux. Това е лесно - в директорията ./musl_sqlite/ стартираш скрипта ./build - той ще изтегли сорсовете и ще ги компилира. Но все пак трябва Linux.

Аз затова постнах прекомпилираните бинарита, за да ти е по-лесно.

Nginx е един от уеб сървърите, който може да работи със AsmBB. Всеки друг също става, стига да поддържа FastCGI (Apache, или lighttpd са ОК). Но отново – трябва да работи под Linux на същата машина, на която работи AsmBB.

П.П. Между другото от тази връзка: asmbb.tar.gz можеш да си изтеглиш и официалния бинарен пакет. Той също съдържа прекомпилираните файлове.

#556 (ツ) stewie
Създадено на 24.07.2020, видяно: 664 пъти.

Ясно, не е за джамове работата. Понеже съм линукс нууб си мислех следното : пускам ти PR на мастър бранча ти с промени, ти преглеждаш и тестваш. Ако има греди връщаш. Така докато не си настроя някакъв линукс на виртуалка. Сигурно някакво убунто ще гледам да сложа. А уеб сървър под линукс не съм дигал никога.

#560 (ツ) johnfound
Създадено на 24.07.2020, видяно: 950 пъти.
stewie

Ясно, не е за джамове работата. Понеже съм линукс нууб си мислех следното : пускам ти PR на мастър бранча ти с промени, ти преглеждаш и тестваш. Ако има греди връщаш. Така докато не си настроя някакъв линукс на виртуалка. Сигурно някакво убунто ще гледам да сложа. А уеб сървър под линукс не съм дигал никога.

По принцип от моя страна няма проблем. Ако искаш и директно в темата може да пускаш кода. А като го изтестваме, ще ми пратиш цял PR за мърджване в репозиторито.

А иначе уеб сървърите са нативни Unix/Linux приложения. По-скоро в Windows има проблеми да се пуснат, отколкото в Линукс.

Между другото, самият AsmBB като код е реално портируем. Тоест теоретически може да се компилира и за Windows, обаче самата операционна система не поддържа някои неща, които AsmBB ползва и трябва да мисля с какво да ги замествам. Unix сокети например и фютекси. Затова и няма версия за Windows.

#562 (ツ) stewie
Създадено на 24.07.2020, видяно: 664 пъти.

Ами да то и тук да се пуска код е оферта. Утре като седна на компа ще пратя за флаг за изключване на нотификациите.

#668 (ツ) stewie
Създадено на 25.07.2020, видяно: 664 пъти.

Моля, обясни ми някои неща като на тъпак : https://asm32.info/fossil/repo/asmbb/artifact/8351a9fc7b0ca9ea Къде е реално таблицата с настройки на юзъра ? Трябва да се прочете ред за юзъра от нея с ново поле както правиш на ред 1045. Предполагам не искаш това да бъде вмъкнато в EventSessions. Целият sse_service.asm ли отговаря за !events ендпойнта ? Къде WantedEvents се получава в асемблерският код ?

#674 (ツ) johnfound
Създадено на 25.07.2020, видяно: 915 пъти.
stewie

Моля, обясни ми някои неща като на тъпак : https://asm32.info/fossil/repo/asmbb/artifact/8351a9fc7b0ca9ea Къде е реално таблицата с настройки на юзъра ? Трябва да се прочете ред за юзъра от нея с ново поле както правиш на ред 1045. Предполагам не искаш това да бъде вмъкнато в EventSessions. Целият sse_service.asm ли отговаря за !events ендпойнта ? Къде WantedEvents се получава в асемблерският код ?

Сега, малко по-сложно е. По принцип, !events ендпоинта се обработва на друго място. (Въобще, кое къде се обработва се вижда във файла commands.asm).

Koнкретно процедурата за обработка на !eventsEventsRealTime се намира във realtime.asm

Тази процедура обаче само инициализира реал-тайм сесията и включва сокета, който отговаря за конекцията към списъка за обработка на SSE сървиса. След това приключва обработката, но докато всички други команди приключват и комуникацията по FastCGI, в този случай комуникацията остава отворена и за нея се грижи SSE сървиса. Съответно той я затваря и изчиства, когато сокета се прекъсне от браузъра.

Обработката на events= параметъра, който се изпраща при заявката /!events?events=NNN се обработва именно в процедурата EventsRealTime, на първите редове.

SSE сървиса реално е отделна нишка, която следи за нови евенти и когато се появят ги разпраща на тези сокети, които са абонирани за тях. А също след разпращането чисти таблицата в базата данни в която е опашката с евенти. Там беше бая крив алгоритъм, докато до измисля. Даже, ако си спомням добре, го обсъждахме на стария форум. ;-)

#681 (ツ) stewie
Създадено на 25.07.2020, видяно: 664 пъти.

Джони, виждам зора с тоя асемблер. Искаш ли за мене джабаскрипта, а за тебе бекенда. Още не мога да си обясня shl, но трябва да е побитов AND. Верно шапка ти свалям, тук няма кой да напише това, което си написал. Поне видях де са темите, ще видя що на мобилната тема не бачкат непрочетени линка.

#684 (ツ) Delegate
Последно редактирано на 25.07.2020 от Delegate, видяно: 900 пъти.

shl не е ли шифт наляво ?

#685 (ツ) code2
Създадено на 25.07.2020, видяно: 898 пъти.
stewie

Джони, виждам зора с тоя асемблер. Искаш ли за мене джабаскрипта, а за тебе бекенда. Още не мога да си обясня shl, но трябва да е побитов AND. Верно шапка ти свалям, тук няма кой да напише това, което си написал. Поне видях де са темите, ще видя що на мобилната тема не бачкат непрочетени линка.

Разкрий ми логиката как стигна до този извод за shl? Разбирам да е нещо по завъртяно като ror, но точно дума от вида sh+l? Имам чувството, че си правиш майтап, ама не всеки го схваща, защото не всеки джара на asm.

#686 (ツ) stewie
Последно редактирано на 25.07.2020 от stewie, видяно: 664 пъти.

Глупости пиша, << имах впредвид.

Бахти майтапа да зяпам асемжлррски код в събота, а?

#687 (ツ) johnfound
Последно редактирано на 25.07.2020 от johnfound, видяно: 892 пъти.
stewie

Джони, виждам зора с тоя асемблер. Искаш ли за мене джабаскрипта, а за тебе бекенда. Още не мога да си обясня shl, но трябва да е побитов AND. Верно шапка ти свалям, тук няма кой да напише това, което си написал. Поне видях де са темите, ще видя що на мобилната тема не бачкат непрочетени линка.

SHL е преместване наляво - подобно на "<<" от езиците от високо ниво. Но това не е много важно. То реално за това, с което си се захванал да правиш (включване/изключване на нотификациите) изобщо не трябва да се пипа бакенда.

Просто от JS включваш и изключваш нужните битове във WantedEvents, убиваш старият EventSource и викаш connect().

За нотификациите ти трябва третият бит evUserActivity = 3 маската му е 8.

Съответно, трябва да се включи някъде в темплейтите и един чекбокс, но нещо не ми е много ясно къде да го вмъкна в страницата и как да изглежда, иначе досега да съм го сложил.

0 1 2

Консултации по енджина - JS - нотификации.
0

AsmBB v2.9 (check-in: e72809fde8a3357c); SQLite v3.31.1 (check-in: 3bfa9cc97da10598);
©2016..2020 John Found; Licensed under EUPL. Powered by Assembly language Created with Fresh IDE