diff --git a/stephen_schroeder/.gitignore b/stephen_schroeder/.gitignore index 5065817..02a4090 100644 --- a/stephen_schroeder/.gitignore +++ b/stephen_schroeder/.gitignore @@ -1,3 +1,4 @@ .git node_modules DS_Store +log** diff --git a/stephen_schroeder/client_server.js b/stephen_schroeder/client_server.js deleted file mode 100644 index 5b42c80..0000000 --- a/stephen_schroeder/client_server.js +++ /dev/null @@ -1,19 +0,0 @@ -'use strict'; - -const net = require('net'); - -function newUser(name) { - let client = net.connect(3000, () => { - client.write(name + 'is available\n'); - client.write('MESSAGE RECEIVED'); - client.on('data', (chunk) => { - console.log('Message'); - console.log('message received from' + - chunk.toString().split('\s')[0].trim() + ': \n', chunk.toString()); - }); - }).client.end('Goodbye\n'); -} -newUser('Stephen'); -newUser('Larry'); -newUser('Moe'); -newUser('Curly'); diff --git a/stephen_schroeder/gulpfile.js b/stephen_schroeder/gulpfile.js index fe7d3db..a51d137 100644 --- a/stephen_schroeder/gulpfile.js +++ b/stephen_schroeder/gulpfile.js @@ -10,7 +10,7 @@ gulp.task('test:mocha', () => { }); gulp.task('lint:tests', () => { - return gulp.src('./test/**/*test.js') + return gulp.src('./test/*.js') .pipe(eslint()) .pipe(eslint.format()); }); diff --git a/stephen_schroeder/index.js b/stephen_schroeder/index.js index c777a48..da2bf45 100644 --- a/stephen_schroeder/index.js +++ b/stephen_schroeder/index.js @@ -1 +1,3 @@ -module.exports = require(__dirname + '/client_server'); +const server = require(__dirname + '/lib/server'); + +server.start(); diff --git a/stephen_schroeder/lib/identifier.js b/stephen_schroeder/lib/identifier.js new file mode 100644 index 0000000..2029a7d --- /dev/null +++ b/stephen_schroeder/lib/identifier.js @@ -0,0 +1,6 @@ +exports.generate = function() { + var timestamp = (new Date()).toString(); + var dateString = timestamp.substring(4, 15).replace(/\s/g, '-'); + var timeString = timestamp.substring(16, 24).replace(/:/g, ''); + return '/log_' + dateString + '_' + timeString + '.txt'; +}; diff --git a/stephen_schroeder/lib/server.js b/stephen_schroeder/lib/server.js new file mode 100644 index 0000000..35c5723 --- /dev/null +++ b/stephen_schroeder/lib/server.js @@ -0,0 +1,17 @@ +const net = require('net'); +const fs = require('fs'); +const identifier = require(__dirname + '/identifier'); + +var start = exports.start = (filepath) => { + var server = net.createServer((socket) => { + filepath = filepath || __dirname + '/..' + identifier.generate(); + var fileStream = fs.createWriteStream(filepath); + socket.pipe(fileStream); + socket.write('Request received'); + socket.end(); + console.log('TCP request logged in ' + filepath); + }); + + server.listen(3000, () => {console.log('server running on port 3000'); + }); +}; diff --git a/stephen_schroeder/package.json b/stephen_schroeder/package.json index 9bb42b0..f928dd0 100644 --- a/stephen_schroeder/package.json +++ b/stephen_schroeder/package.json @@ -21,7 +21,6 @@ "eslint": "^2.10.2", "gulp": "^3.9.1", "gulp-eslint": "^2.0.0", - "gulp-mocha": "^2.2.0", - "mocha": "^2.4.5" + "gulp-mocha": "^2.2.0" } } diff --git a/stephen_schroeder/server.js b/stephen_schroeder/server.js deleted file mode 100644 index 592d89b..0000000 --- a/stephen_schroeder/server.js +++ /dev/null @@ -1,20 +0,0 @@ -const net = require('net'); - -const users = []; - -module.exports = function() { - net.createServer((socket) => { - socket.name = socket.remotePort + new Date(); - users.push(socket); - socket.on('data', (chunk) => { - console.log(chunk.toString()); - users.forEach((s) => { - if (socket.name !== s.name) { - s.write(socket.name + ': ' + chunk.toString()); - } - }); - }); - }).listen(3000, () => { - console.log('listening on port 3000'); - }); -}; diff --git a/stephen_schroeder/test/id_test.js b/stephen_schroeder/test/id_test.js new file mode 100644 index 0000000..c70e119 --- /dev/null +++ b/stephen_schroeder/test/id_test.js @@ -0,0 +1,20 @@ +const expect = require('chai').expect; +const identifier = require(__dirname + '/../lib/identifier'); + +describe('Identifier generate function', () => { + it('should return a filename with .txt extension', () => { + var filename = identifier.generate(); + expect(typeof filename).to.eql('string'); + expect(filename.startsWith('/log_')).to.eql(true); + expect(filename.endsWith('.txt')).to.eql(true); + }); + + it('should return a unique filename', (done) => { + var filename1 = identifier.generate(); + setTimeout(() => { + var filename2 = identifier.generate(); + expect(filename1).to.not.eql(filename2); + done(); + }, 1500); + }); +}); diff --git a/stephen_schroeder/test/server_test.js b/stephen_schroeder/test/server_test.js new file mode 100644 index 0000000..d058563 --- /dev/null +++ b/stephen_schroeder/test/server_test.js @@ -0,0 +1,36 @@ +const expect = require('chai').expect; +const net = require('net'); +const fs = require('fs'); +const server = require(__dirname + '/../lib/server'); + +describe('TCP server', () => { + var requestString = 'Hello World\r\n'; + var filepath = __dirname + '/../log_test.txt'; + + before((done) => { + server.start(filepath); + var client = net.createConnection(3000, () => { + console.log('Connected to server'); + client.write(requestString); + done(); + }); + }); + + it('should write request to newly created text file', (done) => { + fs.readFile(filepath, (err, data) => { + if (err) { + expect(true).to.eql(false); + console.log(err); + return done(); + } + expect(data.toString()).to.eql(requestString); + done(); + }); + }); + + after(() => { + fs.unlink(filepath, (err) => { + if (err) console.log(err); + }); + }); +}); diff --git a/stephen_schroeder/test/tests.js b/stephen_schroeder/test/tests.js deleted file mode 100644 index 9d5f2f2..0000000 --- a/stephen_schroeder/test/tests.js +++ /dev/null @@ -1,12 +0,0 @@ -'use strict'; - -const net = require('net'); -const expect = require('chai').expect; -const createServer = require('../server'); -const createClient = require('../client_server'); - -describe('Just starting out', () => { - it('should post messages', (done) => { - - }); -});