Ako zistit cim je uzivatel online?

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
domeskys
Člen | 7
+
0
-

Dobrý deň, viete mi poradiť, ako zistím, čím je uživatel online? a kedy je offline ?

CZechBoY
Člen | 3608
+
+1
-

Technicky vzato uživatel je online když vykazuje nějakou aktivitu a offline když žádnou nevykazuje.
Je jen na tobě jakej timeout mu dáš při nic nedělání a uznání že je asi už offline…
Takže si můžeš ukládat uživatelovu poslední aktivitu a porovnávat s aktuálním časem a nějakým tvým definovaným timeoutem. Jako berličku si můžeš zkusit poznačit že uživatel zavřel okno nebo tak něco. Pro přesnější metriku můžeš použít nějaký heartbeaty – na stránce každých 30s volat ajax „ano, ještě jsem online, neodpojuj mě“.

http://www.strejda-google.cz/#…

domeskys
Člen | 7
+
0
-

Aj keď som čakal inú odpoveď, ďakujem :)
v php by som to zvládol, ale neviem ako na to v nette, mám to spraviť v presenter alebo ?

Editoval domeskys (27. 10. 2017 18:38)

iNviNho
Člen | 352
+
0
-

@domeskys nette je php

CZechBoY
Člen | 3608
+
+2
-

udělej to kde chceš :-) jestli s mvc začínáš tak si to klidně všechno dej do presenteru, ničemu to nevadí, pro výuku to je dostačující… pokud tě zajímá nějaká lepší architektura aplikace tak můžeš udělat další třídu, která bude obstarávat nějaký tyhle online stavy uživatele. tu pak registruješ do dependency injection containeru a v presenteru vyžádáš přes konstruktor. je mi jasný, že teď nechápeš skoro nic a odkážu tě do dokumentace dependency injection, případně použití di.

Martk
Člen | 661
+
+1
-

Nudil jsem se, tak jsem ti vytvořil šablonu jak na to.

Služba

class OnlineUserService {

	public function __construct(Context $db) {
		$this->db = $db;
	}

	public function getAll(): array {
		return $this->db->...
	}

	public function isOnline(int $userId): bool {
		return (bool) $this->db->...;
	}

}

Komponenta pro výpis všech uživatelů online

class OnlineUsersComponent extends Control {

	public function __construct(OnlineUserService $service) {
		$this->service = $service;
	}

	public function render() {
		$template = $this->getTemplate();
		$template->setFile(__DIR__ . '/templates/onlineUsers.latte');

		$template->users = $this->service->getAll();

		$template->render();
	}

}

onlineUsers.latte

<div n:foreach="$users as $row">{$row->name}</div> {* Když dám $user, tak latte zahlásí chybu, protože přepisuji proměnnou *}

config

services:
	- OnlineUserService
	- OnlineUsersComponent

presenter

class HomepagePresenter extends BasePresenter {

	/** @var OnlineUsersComponent @inject */
	public $onlineUsersComponent;

	protected function createComponentOnlineUsers() {
		return $this->onlineUsersComponent;
	}

}

Šablona Homepage/default.latte

{control onlineUsers}

Editoval Martk (27. 10. 2017 22:25)

domeskys
Člen | 7
+
0
-

ďakujem :)