JeuWeb - Crée ton jeu par navigateur
Tchat en direct - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Tchat en direct (/showthread.php?tid=366)

Pages : 1 2 3 4 5 6 7 8


RE: Tchat en direct. - Sephi-Chan - 05-01-2011

Je te conseille Ajax + PubNub.

Côté PHP, quand quelqu'un poste un message, tu fais un appel Ajax vers une page post_message.php, qui pourrait ressembler à ça :


// $current_user contient un objet User (avec un attribut id et name).
// $message contient… un objet Message (avec des attributs id, content et created_at). Tu l'enregistres en base de données si tu veux.
$pubnub = new Pubnub( 'publish_key', 'subscribe_key' );
$pubnub->publish(array(
'channel' => 'chat',
'message' => array('message' => $message, 'author' => $current_user);
));

Cela va permettre d'envoyer des informations sur le canal "chat".
Et côté Javascript, tu fais :


Pubnub.subscribe({ channel: 'my_test_channel' }, function(data){
// Data est un tableau du style :
// {
// message: {
// id: 23,
// content: "Lorem ipsum dolor sit amet."
// },
// author: {
// id: 17,
// name: "Sephi-Chan"
// }
// }
});

Et à la place des commentaires, tu crées un fragment de HTML que tu injectes dans ta fenêtre de chat. Et comme ça, dès que quelqu'un postera un message, il sera envoyé en temps réel chez chaque utilisateur connecté à la page du chat.


Sephi-Chan


RE: Tchat en direct - niahoo - 05-01-2011

Comprends que je n'ai pas vraiment le temps de te répondre.

mais bon, comme je suis super sympa, voici le code complet d'une chatroom réalisée avec le framework nitrogen.
Code :
-module (demos_comet2).
-include_lib ("nitrogen/include/wf.hrl").
-compile(export_all).

main() -> #template { file="./templates/demos46.html" }.

title() -> "Comet Chatroom".

headline() -> "Comet Chatroom".

left() ->
    [
        "
        <p>
        This page demonstrates how to make a simple chatroom using
        Comet pools. A Comet pool provides the plumbing for creating
        multi-user applications in Nitrogen.
        </p>
        <p>
        Each comet pool has an Erlang term identifier, and can either
        be <i>local</i>, meaning that it only applies to one user, or
        <i>global</i> meaning that it applies to all users.
        </p>
        <p>
        Here, we create a global Comet pool titled 'chatroom'. Anyone
        who visits this page connects to the same comet pool.  Upon
        clicking the 'Send' button, a message is broadcast to all
        comet processes that have registered in the pool. The comet process
        then updates the page with the new message.
        </p>        
        <p>
        Try opening a few different browser windows and chatting with
        yourself.
        </p>
        ",
        linecount:render()
    ].

right() ->
    Body=[
        #span { text="Your chatroom name: " },
        #textbox { id=userNameTextBox, text="Anonymous", style="width: 100px;", next=messageTextBox },

        #p{},
        #panel { id=chatHistory, class=chat_history },

        #p{},
        #textbox { id=messageTextBox, style="width: 70%;", next=sendButton },
        #button { id=sendButton, text="Send", postback=chat }
    ],

    % Start a process to listen for messages,
    % and then tell the chatroom that we would like to join.
    wf:comet_global(fun() -> chat_loop() end, chatroom),

    Body.


event(chat) ->
    Username = wf:q(userNameTextBox),
    Message = wf:q(messageTextBox),
    wf:send_global(chatroom, {message, Username, Message}),
    wf:wire("obj('messageTextBox').focus(); obj('messageTextBox').select();");

event(_) -> ok.

chat_loop() ->
    receive
        'INIT' ->
            %% The init message is sent to the first process in a comet pool.
            Terms = [
                #p{},
                #span { text="You are the only person in the chat room.", class=message }
            ],
            wf:insert_bottom(chatHistory, Terms),
            wf:flush();

        {message, Username, Message} ->
            %% We got a message, so show it!
            Terms = [
                #p{},
                #span { text=Username, class=username }, ": ",
                #span { text=Message, class=message }
            ],
            wf:insert_bottom(chatHistory, Terms),
            wf:wire("obj('chatHistory').scrollTop = obj('chatHistory').scrollHeight;"),
            wf:flush()
    end,
    chat_loop().



RE: Tchat en direct - Cawrotte - 05-01-2011

C'est trop gentil Smile
Meci à vous !!!


RE: Tchat en direct - Viciousity - 05-01-2011

Maintenant cela implique que ton joueur doit NECESSAIREMENT avoir javascript actif sur son navigateur Smile
Du coup le prévenir ou bien lui proposer une alternative le cas échéant


RE: Tchat en direct - Cawrotte - 05-01-2011

oO
Personne n'a pas JS
Ensuite si c'est le cas cela me ferai perdre trop de temps pour le développement.
On ferra après pour les alternatives Smile

En tout cas merci à tous pour vos réponses


RE: Tchat en direct - Ter Rowan - 05-01-2011

(05-01-2011, 07:31 PM)Viciousity a écrit : Maintenant cela implique que ton joueur doit NECESSAIREMENT avoir javascript actif sur son navigateur Smile
Du coup le prévenir ou bien lui proposer une alternative le cas échéant

un tchat en html pur ça s'appelle un forum ^^


RE: Tchat en direct - Cawrotte - 05-01-2011

x)
Pas forcément Big Grin
Une petite actualisation régulière suffit mais ca donne un code déguelasse et pas très sérieux...


RE: Tchat en direct - Ter Rowan - 05-01-2011

(05-01-2011, 08:02 PM)Vegetaland a écrit : x)
Pas forcément Big Grin
Une petite actualisation régulière suffit mais ca donne un code déguelasse et pas très sérieux...

actualisation avec quoi si y a pas de javascript ?

je persiste, un tchat en html (sans javascript) c'est un forum (réduit)


en html "pur", je ne vois rien d'autre que bouton de formulaire (submit) ou lien (href) pour faire un appel serveur (ah si y a F5 pour l'utilisateur :p )

mais bon y a peut être un autre système rien qu'en html que j'ai raté ?


RE: Tchat en direct - Viciousity - 05-01-2011

Html5 mais foireux sur IE X)


RE: Tchat en direct - Sephi-Chan - 05-01-2011

Un mec qui va jouer à un jeu, avec un tchat, sans Javascript, c'est une burne qui ne sait pas où il met les pieds. Pourquoi s'intéresser à ce cas ?


Sephi-Chan