Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* **************** server.js ***************** */
- var http = require('http');
- http.createServer(function(req, res) {
- // var db = require('./db');
- var callback = require('./callback');
- console.log('Recieving request...');
- if (req.url == '/' && req.method == 'GET') {
- callback.static_callback(res,'./index.html');
- }
- }).listen(8080, '127.0.0.1');
- /* ************* sockets_server.js ************ */
- var mysql = require('mysql');
- var connection = mysql.createConnection({
- host : '127.0.0.1',
- user : 'root',
- password : 'password',
- database : 'testdb'
- });
- var client = require('socket.io').listen(9000).sockets;
- connection.connect(function(err) {
- if (!err) {
- console.log('Database is connected ...');
- client.on('connection', function(socket) {
- var sendStatus = function(s) {
- socket.emit('status', s);
- };
- // Emit all messages
- var select_query = 'SELECT * FROM chat';
- connection.query(select_query, function(err, results) {
- if (err) {
- console.log('error selecting from table');
- } else {
- var json = JSON.stringify(results);
- socket.emit('output', json);
- }
- });
- // wait for input
- socket.on('input', function(data) {
- var name = data.name;
- var message = data.message;
- var whitespacePattern = /^\s*$/;
- if (whitespacePattern.test(name) || whitespacePattern.test(message)) {
- sendStatus('Name and message is required.');
- } else {
- var insert_query = 'INSERT INTO chat (name, message) VALUES ("'+name+'", "'+message+'");';
- connection.query(insert_query, function(err, results) {
- if (err) {
- console.log('invalid query');
- } else {
- // Emit latest message to ALL clients
- console.log(data);
- client.emit('output', data);
- sendStatus({
- message: 'Message sent.',
- clear: true
- });
- }
- });
- }
- });
- });
- } else {
- console.log('Error connecting database ...');
- }
- });
- /* *************** callback.js **************** */
- module.exports = {
- static_callback: function(res, path) {
- res.writeHead(200, {
- 'Content-Type' : 'text/html'
- });
- var fs = require('fs');
- var content = fs.readFileSync(path);
- res.write(content);
- res.end();
- },
- dynamic_callback: function(err, result) {
- res.writeHead(200, {
- 'Content-Type' : 'application/json'
- });
- res.write(result);
- res.end();
- }
- };
- /* **************** index.html **************** */
- <!DOCTYPE html>
- <html>
- <head>
- <title>Chat</title>
- <link rel="stylesheet" href="styles/main.css" media="all" />
- </head>
- <body>
- <div class="chat">
- <input type="text" class="chat-name" placeholder="Enter your name" />
- <div class="chat-messages"></div>
- <textarea placeholder="Type your message"></textarea>
- <div class="chat-status">Status: <span>Idle</span></div>
- </div>
- <script src="http://127.0.0.1:9000/socket.io/socket.io.js"></script>
- <script>
- (function() {
- var getNode = function(s) {
- return document.querySelector(s);
- },
- // get required nodes
- status = getNode('.chat-status span'),
- messages = getNode('.chat-messages'),
- textarea = getNode('.chat textarea'),
- chatName = getNode('.chat-name'),
- statusDefault = status.textContent,
- setStatus = function(s) {
- status.textContent = s;
- if (s !== statusDefault) {
- var delay = setTimeout(function() {
- setStatus(statusDefault);
- clearInterval(delay);
- },3000);
- }
- };
- try {
- var socket = io.connect('http://127.0.0.1:9000');
- } catch(e) {
- // set status to warn user
- setStatus('Unable to connect.');
- }
- if (socket !== undefined) {
- socket.on('output', function(data) {
- // console.log(data.length+' -- '+data);
- var processed_data = [];
- // console.log(data);
- if (typeof data !== 'object') {
- data = JSON.parse(data);
- } else {
- data = [data];
- }
- console.log(data);
- // console.log(data.length);
- if (data.length > 0) {
- // Loop through results
- for (var x = 0; x < data.length; x=x+1) {
- var message = document.createElement('div');
- message.setAttribute('class','chat-message');
- message.textContent = data[x]['name'] + ': ' + data[x]['message'];
- // append
- messages.appendChild(message);
- // messages.insertBefore(message, messages.firstChild);
- }
- }
- });
- // Listen for status
- socket.on('status', function(data) {
- setStatus((typeof data === 'object') ? data.message : data);
- if (data.clear === true) {
- textarea.value = '';
- }
- });
- // Listen for keydown
- textarea.addEventListener('keydown', function(event) {
- var self = this;
- var name = chatName.value;
- // console.log(event.which); // gives the number value for which key is pressed
- if (event.which === 13 && event.shiftKey === false) {
- // console.log('Send!');
- socket.emit('input', {
- name: name,
- message: self.value
- });
- }
- });
- }
- })();
- </script>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement