2015-10-14 48 views
1

对于socket.io我还是一个新东西,我试图将一个值传递给服务器端并将其存储在一个全局变量中,然后我可以使用它来做一些逻辑ARI。将变量值传递给客户端并将其存储在全局变量中

所以,在我的服务器端我有:

为清楚起见
io.sockets.on('muting', function (data) { 
    mute = data; 
    console.log("client side:" + mute); 
}); 

整个服务器端代码:

var ari = require('ari-client'); 
var util = require('util'); 
var chanArr = []; 
var test; 
var mute; 
var express = require('express'), 
app = express(), 
server = require('http').createServer(app), 
io = require('socket.io').listen(server); 

//ARI client 
ari.connect('http://localhost:8088', 'asterisk', 'asterisk', clientLoaded); 

function clientLoaded(err, client) { 
    if (err) { 
     throw err; 
    } 
    // find or create a holding bridges 
    var bridge = null; 
    client.bridges.list(function (err, bridges) { 
     if (err) { 
      throw err; 
     } 

     bridge = bridges.filter(function (candidate) { 
       return candidate.bridge_type === 'mixing'; 
      })[0]; 

     if (bridge) { 
      console.log(util.format('Using bridge %s', bridge.id)); 
     } else { 
      client.bridges.create({ 
       type : 'mixing' 
      }, function (err, newBridge) { 
       if (err) { 
        throw err; 
       } 

       bridge = newBridge; 
       console.log(util.format('Created bridge %s', bridge.id)); 
      }); 
     } 
    }); 

    // handler for StasisStart event 
    function stasisStart(event, channel) { 
     console.log(util.format(
       'Channel %s just entered our application, adding it to bridge %s', 
       channel.name, 
       bridge.id)); 

     channel.answer(function (err) { 
      if (err) { 
       throw err; 
      } 

      bridge.addChannel({ 
       channel : channel.id 
      }, function (err) { 
       var id = chanArr.push(channel.name) 
        console.log("Value: " + test); 
       test = channel.name; 
       updateSip); 

       if (err) { 
        throw err; 
       } 

       //If else statement to start music for first user entering channel, music will stop once more than 1 enters the channel. 
       if (chanArr.length <= 1) { 
        bridge.startMoh(function (err) { 
         if (err) { 
          throw err; 
         } 
        }); 
       } else if (chanArr.length === 2) { 
        bridge.stopMoh(function (err) { 
         if (err) { 
          throw err; 
         } 
        }); 
       } else {} 

      }); 

     }); 

    } 

    // handler for StasisEnd event 
    function stasisEnd(event, channel) { 
     console.log(util.format(
       'Channel %s just left our application', channel.name)); 
     console.log(channel.name); 

     var index = chanArr.indexOf(channel.name); 
     chanArr.splice(index, 1); 
     updateSip(); 
    } 
    client.on('StasisStart', stasisStart); 
    client.on('StasisEnd', stasisEnd); 
    client.start('bridge-hold'); 
} 

//Socket.io logic here 
server.listen(3009, function() { 
    console.log('listening on *:3009'); 
}); 

app.use(express.static(__dirname + '/public')); 
app.get('/', function (req, res) { 
    res.sendfile(__dirname + "/testPage.html"); 
}); 

io.sockets.on('connection', function (data) { 
    updateSip(); 
}); 

io.sockets.on('muting', function (data) { 
    mute = data; 
    console.log("client side:" + mute); 
}); 

function updateSip() { 
    console.log("Value: " + test); 
    io.sockets.emit('sip', chanArr); 
} 

而且在我的客户端:

$(document).on('click', '#kick', function() { 
     mute = !mute; 
     socket.emit('muting', mute); 
     console.log(mute) 
}); 

完全客户端代码:

jQuery(function ($) { 
    var socket = io.connect(); 
    var mute = false; 
    var $sip = $('#sip'); 

    socket.on('sip', function (data) { 
     var sip = ''; 
     $(".exe").remove(); 
     for (i = 0; i < data.length; i++) { 
      sip += data[i]; 
      if (sip) { 
       $sip.append('<tr class="exe">\ 
                 <td>' + sip + '</td>\ 
                 <td><button class="btn btn-default mute" id="kick" type="submit">Mute</button></td>\ 
                 <td><button class="btn btn-default kick" id="kicks" data-toggle="modal" data-target="#myModal" type="submit">Kick</button></td>\ 
                 </tr>'); 
      } else { 
       $sip.append('Currently no extensions'); 
      } 
      sip = ''; 
     } 

    }); 

    $('.kick').click(function() { 
     $('#myInput').focus() 
    }); 

    $(document).on('click', '#kick', function() { 
     mute = !mute; 
     socket.emit('muting', mute); 
     console.log(mute) 
    }); 

}); 

我错过了一些非常小的东西,但无法弄清楚。

编辑:我没有收到错误消息,似乎没有通过信息服务器端出于某种原因。

使用快递。

亲切的问候。

+1

你遇到一个错误? – VC1

+1

@ VC1没有,只是使用console.log来查看函数是否运行。似乎没有达到它的服务器端,否则它会得到console.log它不。它只会在客户端登录,导致我无法通过socket.io正确传递它。不知道什么是做错了。 – Studento919

+1

你应该从服务器端提供更多的代码。 – Anonymous0day

回答

1

从插座IO DOC:http://socket.io/docs/#using-with-the-express-framework

你可以尝试换你'muting'事件侦听器在'connection'事件侦听器中。请注意,您将使用socket参数从'connection'事件听'muting'

服务器端:

io.sockets.on('connection',function (socket) { 
    updateSip(); 
    socket.on('muting', function (data) { 
    mute = data; 
    console.log("client side:" + mute); 
    }); 
}); 
+0

这个伎俩,非常感谢!如果将来需要将任何数据传递到服务器,现在这应该对我有所帮助。 – Studento919

+1

是的,因为io.sockets与套接字不是同一个对象。 io.sockets是所有套接字,套接字是特定套接字... –

+0

这很有道理,对于socket.io我还是比较新的,所以这应该是一个巨大的帮助。 – Studento919

0
var socket = io.connect(); 

不,你没有到达你的服务器!

//Socket.io logic here 
server.listen(3009, function() { 
    console.log('listening on *:3009'); 
}); 

你的socket服务器似乎是在端口3009一边收听,所以你必须要告诉你的客户哪里是你的服务器(路径 - >例如:http://myoffice.localhost)和端口到达服务器

试以更新客户端:

io.connect("wss://" + document.location.hostname + ':' + 3009); 
+0

什么?这是否意味着,我达到了服务器端。否则目前的功能,我没有甚至会工作,我不明白这是怎么回答=/ – Studento919

+0

我已经更新了我的答案 – Anonymous0day

+0

我不明白这是答案,我已经有了路径...注意使用快递,但我尝试了你的建议,结果是完全一样的,因为它在以前的每一个方面,所以我不知道该假设做什么:(我的网页工作正常或无'(“wss://” + document.location.hostname +':'+ 3009);'只是为了清楚起见,我的问题是没有连接服务器端,我的问题传递一个值到服务器端并将其存储在全局变量中var socket == – Studento919