2016-06-13 18 views
1

Ich versuche, den Client zu Client-Chat-Anwendung mit Hilfe von cfwebsocket erstellen. Ich habe auf das Adobe-Beispiel verwiesen. In diesem Beispiel übergeben wir ein zusätzliches Argument an die Veröffentlichungsfunktion. Also habe ich die Empfänger-ID an die Veröffentlichungsfunktion übergeben, kann diesen Wert jedoch nicht in der msgHandler-Funktion abrufen.Kann nicht den zusätzlichen Argument Wert auf cfwebsocket JS Funktion veröffentlichen

<cfoutput> 
    <cfif !structkeyexists(session,'userName')> 
     <cflocation url="index.cfm?msg=Please login first" addtoken="false"> 
    </cfif> 
    <cfdump var="i am chat.cfm" /> 
    <a href="logout.cfm" style="float:right">Logout</a> 
    <cfwebsocket name="myworld" onMessage="msgHandler" onOpen="openHandler"/> 

    <script> 
     var msgHandler = function(message){ 
      // Get data from the recieved message token 
      var data = message.data; 
      console.log(message.data.to); 
      if(data){ 
       // If data is present write it to the div 
       var txt=document.getElementById("myDiv"); 
       txt.innerHTML+= data + "<br>"; 
      } 
     } 

     var sayHello = function(){ 
      uname = document.getElementById("username").value; 
      receiver = document.getElementById("selectUser").value; 
      //var myData = {publishedBy: ''+uname, receiver:''+receiver} 
      // Calling authenticate from client side. Calling this 
      //function will invoke onWSAuthenticate from Application.cfc 

      myworld.authenticate(uname,"password"); 
      myworld.subscribe("chat"); 
      // Client says Hello World 
      myworld.publish("chat","Hello World! WebSocket is here !!",{to:receiver}); 
     } 

     var openHandler = function(){ 
      // do nothing 
     } 
    </script> 
    <input type="hidden" name="userName" id="username" value="#session.userName#"> 
    <input id="hello" type="button" value="Say Hello!" onclick="sayHello();"> 

    <div id="myDiv"></div> 

    <cfset users = Application.usersDAO.read()> 
    <select name="user" id="selectUser"> 
     <option value="0">Select User</option> 
     <cfloop query="users"> 
      <option value="#id#">#username#</option> 
     </cfloop> 
    </select> 
</cfoutput> 

Antwort

0

Sie sollten Ihre Nachricht und zusätzliches Argument wie ein JSON-Objekt übergeben.

var sayHello = function() 
 
\t \t { 
 
\t \t \t uname = document.getElementById("username").value; 
 
\t \t \t userID = document.getElementById("userID").value; 
 
\t \t \t receiverID = document.getElementById("ToUser").value; 
 
\t \t \t receiverName = document.getElementById("ToUserName").value; 
 
\t \t \t // Calling authenticate from client side. Calling this function will invoke onWSAuthenticate from Application.cfc 
 
\t \t \t myworld.authenticate(uname,"password"); 
 
\t \t \t // Client says Hello World 
 

 
\t \t \t // console.log($('#input').val()) 
 
\t \t \t msg = {'username': uname, 'userID' : userID, 'chat': $('#input').val().trim(), 'to':receiverID, 'receiverName' : receiverName }; 
 
\t \t \t myworld.publish("world",msg); 
 
\t \t \t $('#input').val(''); 
 
\t \t }

In msgHandler Funktion werden Sie message.data.to und message.data.userId bekommen. Sie speichern die userId im Session-Bereich innerhalb des msgHandlers. Sie werden die Session userID und message.data.to vergleichen. Wenn beide gleich sind, werden Sie Ihre Nachricht in Ihrem Chat-Fenster anzeigen.