Skip to content

Instantly share code, notes, and snippets.

@Trindaz
Created January 9, 2013 04:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Trindaz/4490646 to your computer and use it in GitHub Desktop.
Save Trindaz/4490646 to your computer and use it in GitHub Desktop.
var dgram = require('dgram');
var client_address = "0.0.0.0"
var client_port = 9002;
var server_address = "0.0.0.0"
var server_port = 9001
var maxWaitTimeForResponse = 6000;
server_socket = dgram.createSocket('udp4');
server_socket.on('listening', function() { console.log("Server is listening"); });
server_socket.bind(server_port);
function sendMessageServerToClient(message){
var pBuf = new Buffer(message);
server_socket.send(pBuf, 0, pBuf.length, client_port, client_address, function(err, bytes) { if(err){ throw err } });
}
server_socket.on('message', function(msg, rinfo) {
//acknowledge reciept of message
sendMessageServerToClient("Message Received");
/*
Do lots more work
*/
//sent client some more messages after the work has completed
setTimeout(
function(){
sendMessageServerToClient("More results from your request");
},
3000
)
});
client_socket = dgram.createSocket('udp4');
client_socket.on('listening', function() { console.log("Client is listening"); });
client_socket.bind(client_port);
var responseReceivedDone;
function registerResponseExpected(){
describe("Wait for response from server", function(){
this.timeout(maxWaitTimeForResponse);
it("should register a callback for message receipt", function(done){
responseReceivedDone = done;
});
});
}
function sendMessageClientToServer(message, callback){
var pBuf = new Buffer(message);
registerResponseExpected();
client_socket.send(pBuf, 0, pBuf.length, server_port, server_address, function(err, bytes) {
callback();
});
}
var handleMessageFromServer;
client_socket.on('message', function(msg, rinfo){
responseReceivedDone();
handleMessageFromServer(msg);
});
//conduct a test
describe("Conversation with server without big timeout", function(){
var step1 = function(msg){
describe("Validate an ack from server", function(){
registerResponseExpected();
handleMessageFromServer = step2;
it("should contain 'Message Received'", function(done){
if(msg.toString()!="Message Received"){
done(new Error("Client didn't receive correct ack message. I got " + msg.toString()));
}else{
done();
}
});
});
}
var step2 = function(msg){
describe("Validate additional response from server", function(){
handleMessageFromServer = null;
it("should contain 'More results from your request'", function(done){
if(msg.toString()!="More results from your request"){
done(new Error("Client didn't receive correct results message. I got " + msg.toString()));
}else{
done();
}
})
})
}
handleMessageFromServer = step1;
it("should send message to server", function(done){
sendMessageClientToServer("Hello", function(err){
done(err)
});
})
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment