13-11-2012, 10:36 AM
Salut à tous,
bon, je réfléchis beaucoup à la manière d'implémenter un système de notification multi-langue basé sur un historique en PHP pour un jeu web et voir votre point de vue / vos solutions / vos implémentations (rayez la mention inutile).
Le contexte :
Pour un jeu en cours de développement, je stocke l'intégralité des actions d'un joueurs en base (une table Maria Engine) sous cette forme :
action_entity_id - varchar - 40 => hash unique correspondant à une entité (joueur, guilde, ...)
action_slug - varchar - 24 => un slug correspondant à une action (item_used, bank_withdraw, ...)
action_data - blob => données json complétant l'action
action_timestamp - int - 10 => timestamp unix de l'action
Ceci me permet de suivre à la trace chaque action des joueurs, et de pouvoir faire du "Time Machine" sur un compte en cas de tricherie. D'une manière plus générale, cela me permet de savoir plein de chose sur le joueur, plusieurs algo simples me permettent de vérifier l'intégrité des actions d'un joueur, et de remettre en place correctement les données d'un module si un bug survient quelque part.
A partir de là, certaines actions lèvent une notification au joueur : quête x terminée, ...
Les notifications sont stockées en base de cette manière :
notice_entity_id - varchar - 40
notice_action_timestamp - int - 10
notice_notified_on - int - 10 => par défaut à 0, et mis à jour dès lors que la notification apparait
notice_read_on - int - 10 => par défaut à 0, et mis à jour dès lors que la notification a été prise en compte par le joueur (à la manière de facebook, si le joueur réçoit 'un message, le système mettra à jour la notification si le joueur voit le message avant d'en lire la notification, mais également lorsque le joueur lit la notification en passant par le lien de cette dernière).
Un worker se charge de supprimer au fur et à mesure, les vieilles notifications lues de plus de 24 heures...
Chaque action répond à une méthode par son slug, qui possède 2 patterns, un pattern d'affichage de l'historique, un pattern d'affichage de la notification. Exemples :
Historique :
"{ quest_name }" terminée en { quest_time_elapsed }. { quest_experience_rewarded } points d'expérience gagnés.
Notification :
Quête terminé : { quest_name }
Bon l'exemple est bateau, certes.
Techniquement, tout est en place, c'est un worker qui s'occupe de fournir tout ça, qui gère le cache et le parsage de la bonne localisation (français, anglais, japonais).
En gros, voilà la situation à laquelle je n'ai pas encore réfléchie. Quelle procédure suivriez-vous pour gèrer cet affichage, et ce cas concret d'utilisation. De l'AJAX ? Du tout Worker, comme ici ? Des events JavaScript sur les liens lors d'un clic sur les notifications ?
J'ai un peu de mal à avoir une vision ergonomique de la chose d'un point de vue interface.
Si vous avez des idées, des questions, ... Je serai ravi de vous lire / de vous répondre.
bon, je réfléchis beaucoup à la manière d'implémenter un système de notification multi-langue basé sur un historique en PHP pour un jeu web et voir votre point de vue / vos solutions / vos implémentations (rayez la mention inutile).
Le contexte :
Pour un jeu en cours de développement, je stocke l'intégralité des actions d'un joueurs en base (une table Maria Engine) sous cette forme :
action_entity_id - varchar - 40 => hash unique correspondant à une entité (joueur, guilde, ...)
action_slug - varchar - 24 => un slug correspondant à une action (item_used, bank_withdraw, ...)
action_data - blob => données json complétant l'action
action_timestamp - int - 10 => timestamp unix de l'action
Ceci me permet de suivre à la trace chaque action des joueurs, et de pouvoir faire du "Time Machine" sur un compte en cas de tricherie. D'une manière plus générale, cela me permet de savoir plein de chose sur le joueur, plusieurs algo simples me permettent de vérifier l'intégrité des actions d'un joueur, et de remettre en place correctement les données d'un module si un bug survient quelque part.
A partir de là, certaines actions lèvent une notification au joueur : quête x terminée, ...
Les notifications sont stockées en base de cette manière :
notice_entity_id - varchar - 40
notice_action_timestamp - int - 10
notice_notified_on - int - 10 => par défaut à 0, et mis à jour dès lors que la notification apparait
notice_read_on - int - 10 => par défaut à 0, et mis à jour dès lors que la notification a été prise en compte par le joueur (à la manière de facebook, si le joueur réçoit 'un message, le système mettra à jour la notification si le joueur voit le message avant d'en lire la notification, mais également lorsque le joueur lit la notification en passant par le lien de cette dernière).
Un worker se charge de supprimer au fur et à mesure, les vieilles notifications lues de plus de 24 heures...
Chaque action répond à une méthode par son slug, qui possède 2 patterns, un pattern d'affichage de l'historique, un pattern d'affichage de la notification. Exemples :
Historique :
"{ quest_name }" terminée en { quest_time_elapsed }. { quest_experience_rewarded } points d'expérience gagnés.
Notification :
Quête terminé : { quest_name }
Bon l'exemple est bateau, certes.
Techniquement, tout est en place, c'est un worker qui s'occupe de fournir tout ça, qui gère le cache et le parsage de la bonne localisation (français, anglais, japonais).
En gros, voilà la situation à laquelle je n'ai pas encore réfléchie. Quelle procédure suivriez-vous pour gèrer cet affichage, et ce cas concret d'utilisation. De l'AJAX ? Du tout Worker, comme ici ? Des events JavaScript sur les liens lors d'un clic sur les notifications ?
J'ai un peu de mal à avoir une vision ergonomique de la chose d'un point de vue interface.
Si vous avez des idées, des questions, ... Je serai ravi de vous lire / de vous répondre.