2015-10-14 16 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

相關問題