|
(X)HTML, JavaScript, DHTML, XML, CSS Client scripting tehnologije, Dynamic HTML, Cascading Stylesheets, XML i standardi |
|
Alati teme | Način prikaza |
17. 05. 2012. | #1 |
expert
Expert
Datum učlanjenja: 15.03.2011
Poruke: 518
Hvala: 16
20 "Hvala" u 17 poruka
|
socket.io - poruke odredjenim korisnicima
Imam jednu chat scripticu napisanu za node.js sa socket.io tehnologijom i radi fino, medjutim mene interesuje kako da intendifikujem korisnike i samim tim da svakom korisniku koji se prijavi dajem razlicita prava,poruke,layere i sl...
npr. da se jednom nakon 5 s pojavi div sa porukom da se drugom zabrani u odredjenom vremenskom peroidu da salje poruke na server i sl... sve to ne bi bio problem ako bih znao kako kako da saljem poruke pojedinacnim - odabranom korisniku... Evo koda: Kôd:
<script src="/socket.io/socket.io.js"></script> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script> <script> var socket = io.connect('http://localhost:8080'); // on connection to server, ask for user's name with an anonymous callback socket.on('connect', function(){ // call the server-side function 'adduser' and send one parameter (value of prompt) socket.emit('adduser', prompt("What's your name?")); }); // listener, whenever the server emits 'updatechat', this updates the chat body socket.on('updatechat', function (username, data) { $('#conversation').append('<b>'+username + ':</b> ' + data + '<br>'); }); // listener, whenever the server emits 'updaterooms', this updates the room the client is in socket.on('updaterooms', function(rooms, current_room) { $('#rooms').empty(); $.each(rooms, function(key, value) { if(value == current_room){ $('#rooms').append('<div>' + value + '</div>'); } else { $('#rooms').append('<div><a href="#" onclick="switchRoom(\''+value+'\')">' + value + '</a></div>'); } }); }); function switchRoom(room){ socket.emit('switchRoom', room); } // on load of page $(function(){ // when the client clicks SEND $('#datasend').click( function() { var message = $('#data').val(); $('#data').val(''); // tell server to execute 'sendchat' and send along one parameter socket.emit('sendchat', message); }); // when the client hits ENTER on their keyboard $('#data').keypress(function(e) { if(e.which == 13) { $(this).blur(); $('#datasend').focus().click(); } }); }); </script> <style type="text/css"> #apDiv1 { position:absolute; width:200px; height:115px; z-index:1; left: 150px; top: 20px; background-color: #FF9900; display:none; } </style> <div style="float:left;width:100px;border-right:1px solid black;height:300px;padding:10px;overflow:scroll-y;"> <b>ROOMS</b> <div id="rooms"></div> </div> <div style="float:left;width:300px;height:250px;overflow:scroll-y;padding:10px;"> <div id="conversation"></div> <input id="data" style="width:200px;" /> <input type="button" id="datasend" value="send" /> </div> <div id="apDiv1"></div> Kôd:
var app = require('express').createServer() var io = require('socket.io').listen(app); app.listen(8080); // routing app.get('/', function (req, res) { res.sendfile(__dirname + '/index.html'); }); // usernames which are currently connected to the chat var usernames = {}; // rooms which are currently available in chat var rooms = ['room1','room2','room3']; io.sockets.on('connection', function (socket) { // when the client emits 'adduser', this listens and executes socket.on('adduser', function(username){ // store the username in the socket session for this client socket.username = username; // store the room name in the socket session for this client socket.room = 'room1'; // add the client's username to the global list usernames[username] = username; // send client to room 1 socket.join('room1'); // echo to client they've connected socket.emit('updatechat', 'SERVER', 'you have connected to room1'); // echo to room 1 that a person has connected to their room socket.broadcast.to('room1').emit('updatechat', 'SERVER', username + ' has connected to this room'); socket.emit('updaterooms', rooms, 'room1'); }); // when the client emits 'sendchat', this listens and executes socket.on('sendchat', function (data) { // we tell the client to execute 'updatechat' with 2 parameters io.sockets.in(socket.room).emit('updatechat', socket.username, data); }); socket.on('switchRoom', function(newroom){ // leave the current room (stored in session) socket.leave(socket.room); // join new room, received as function parameter socket.join(newroom); socket.emit('updatechat', 'SERVER', 'you have connected to '+ newroom); // sent message to OLD room socket.broadcast.to(socket.room).emit('updatechat', 'SERVER', socket.username+' has left this room'); // update socket session room title socket.room = newroom; socket.broadcast.to(newroom).emit('updatechat', 'SERVER', socket.username+' has joined this room'); socket.emit('updaterooms', rooms, newroom); }); // when the user disconnects.. perform this socket.on('disconnect', function(){ // remove the username from global usernames list delete usernames[socket.username]; // update list of users in chat, client-side io.sockets.emit('updateusers', usernames); // echo globally that this client has left socket.broadcast.emit('updatechat', 'SERVER', socket.username + ' has disconnected'); socket.leave(socket.room); }); }); Kakou konkretnom slucaju drugom korisniku da odredim da se pojavi div (apDiv1) na svakih 10s a da traje npr. 3s. ? Ima li neko ideju kako ovo da izvedem.
__________________
I'm not sexy and I know IT! |
17. 05. 2012. | #2 |
xippster
Master
Datum učlanjenja: 16.06.2005
Lokacija: Beograd
Poruke: 681
Hvala: 102
138 "Hvala" u 84 poruka
|
|
17. 05. 2012. | #3 |
banned
Professional
Datum učlanjenja: 04.06.2005
Poruke: 371
Hvala: 0
738 "Hvala" u 83 poruka
|
__________________
Don't look at me; I'm lost too. “If you can't dazzle them with brilliance, baffle them with bul*s**t.” Poslednja izmena od Br@nkoR : 17. 05. 2012. u 09:11. |
17. 05. 2012. | #4 |
expert
Expert
Datum učlanjenja: 15.03.2011
Poruke: 518
Hvala: 16
20 "Hvala" u 17 poruka
|
ok, nisam trazio od nikog da mi napise vec da se konsultujem kako, sta... Da li da server upravlja pojavljivanjem poruka unutar nekog diva ili da programiram samo klijent stranu ... da li da server kontrolise stvari oko toga ili da klijent strana odmah dobije i timer i kod sta u kom trenutnku da se pojavi?
__________________
I'm not sexy and I know IT! Poslednja izmena od AdriaMart : 17. 05. 2012. u 15:43. |
17. 05. 2012. | #5 | |
xippster
Master
Datum učlanjenja: 16.06.2005
Lokacija: Beograd
Poruke: 681
Hvala: 102
138 "Hvala" u 84 poruka
|
Citat:
korisnike drzis u sesijama a nivo pristupa sadrzaju radis kao i svaki drugi login sistem http://www.danielbaulig.de/socket-ioexpress/ http://stackoverflow.com/questions/6...ient-in-client a sad te molim da po ko zna koji put da ne ides naopako. nasao si taj chat primer koji danima ne znas da promenis i vrtis se u krug jer ti fale osnove koje uporno, ali uporno preskaces. hajde sada poslusaj moj savet i idi ovim koracima 1. instaliraj express globalno "npm install -g express" tako da mozes da ga koristis kao komandu 2. napravi direktorijum 3. udji u njega 4. napravi express projekat koji koristi jade template engine i stylus za css "express -c stylus" 5. pogledaj sta je package.json i nauci da instaliras module tako sto im tu uposes ime + "npm install -d" 6. povezi to sto si napravio sa mongoom ili nekom drugom bazom tako da samo imas konekciju (hint: connect-mongo) 7. pogledaj sta su express sesije i kako da ih kontrolises i snimas u bazu 8. napravi login sistem sa vise nivoa privilegija koji radi preko web formi 9. uradi to isto ali da koristis socket.io za komunikaciju |
|
17. 05. 2012. | #6 |
expert
Expert
Datum učlanjenja: 15.03.2011
Poruke: 518
Hvala: 16
20 "Hvala" u 17 poruka
|
hvala, mozda je bolje koristiti .EJS umesto jade-a?
__________________
I'm not sexy and I know IT! |
17. 05. 2012. | #7 |
xippster
Master
Datum učlanjenja: 16.06.2005
Lokacija: Beograd
Poruke: 681
Hvala: 102
138 "Hvala" u 84 poruka
|
stvar izbora, u jadeu manje pises i cistiji je. koristi sta hoces kao html i css engine
|
17. 05. 2012. | #8 |
expert
Expert
Datum učlanjenja: 15.03.2011
Poruke: 518
Hvala: 16
20 "Hvala" u 17 poruka
|
'Fala ti
u pravu si, moram najpre da savldam sta su triggeri sta su handleri i sl. stvari koje node koristi. linkovi za tutoriae i sl. su dobrodosli
__________________
I'm not sexy and I know IT! Poslednja izmena od AdriaMart : 17. 05. 2012. u 23:29. |
18. 05. 2012. | #9 |
nobody
Expert
Datum učlanjenja: 19.04.2007
Poruke: 537
Hvala: 14
705 "Hvala" u 106 poruka
|
|
|
|