zoukankan      html  css  js  c++  java
  • 基于html5 localStorage , web SQL, websocket的简单聊天程序

    new function() {
    	var ws = null;
    	var connected = false;
    
    	var serverUrl;
    	var connectionStatus;
    	var sendMessage;
    	
    	var connectButton;
    	var disconnectButton; 
    	var sendButton;
    
    	var open = function() {
    		var url = serverUrl.val();
    		ws = new WebSocket(url);
    		ws.onopen = onOpen;
    		ws.onclose = onClose;
    		ws.onmessage = onMessage;
    		ws.onerror = onError;
    
    		localStorage.setItem("server", url);
    
    		connectionStatus.text('OPENING ...');
    		serverUrl.attr('disabled', 'disabled');
    		connectButton.hide();
    		disconnectButton.show();
    	};
    	
    	var close = function() {
    		if (ws) {
    			console.log('CLOSING ...');
    			ws.close();
    		}
    		connected = false;
    		connectionStatus.text('CLOSED');
    
    		serverUrl.removeAttr('disabled');
    		connectButton.show();
    		disconnectButton.hide();
    		sendMessage.attr('disabled', 'disabled');
    		sendButton.attr('disabled', 'disabled');
    
    		loginName.attr('disabled', 'disabled');
    		loginPass.attr('disabled', 'disabled');
    		loginButton.attr('disabled', 'disabled');
    	};
    	
    	var clearLog = function() {
    		$('#messages').html('');
    	};
    	
    	var login = function(event) {
    		var name = loginName.val();
    		var password = loginPass.val();
    		if(name!= "" && password != ""){
    			var msg= "login|"+ name + "|"+ password;
    			ws.send(msg);
    
    			localStorage.setItem("name", name);
    			localStorage.setItem("password", password);			
    		}else{
    			alert("name and  password  cant't be empty!")
    		}
    	};
    
    
    	var doLogin= function(msg){	
    		if(msg.substr(0, 5)== "login"){
    			sendMessage.removeAttr('disabled');
    			sendButton.removeAttr('disabled');
    
    			loginName.attr('disabled', 'disabled');
    			loginPass.attr('disabled', 'disabled');
    			loginButton.attr('disabled', 'disabled');
    
    			return "login success!"
    		}else if(msg.substr(0, 3)== "msg"){
    			return msg.substr(4)
    		}else{
    		}
    		return ""
    	};
    
    	var onOpen = function() {
    		console.log('OPENED: ' + serverUrl.val());
    		connected = true;
    		connectionStatus.text('OPENED');
    
    		//sendMessage.removeAttr('disabled');
    		//sendButton.removeAttr('disabled');
    
    		loginName.removeAttr('disabled');
    		loginPass.removeAttr('disabled');
    		loginButton.removeAttr('disabled');
    	};
    	
    	var onClose = function() {
    		console.log('CLOSED: ' + serverUrl.val());
    		ws = null;
    	};
    	
    	var onMessage = function(event) {
    		var data = event.data;
    		//login
    		data= doLogin(data)
    		//todo
    		if(data){
    			addMessage(data);
    			//$('#messages').val("");
    			//getLog();
    			db.transaction(function (tx) {  
    			  tx.executeSql('INSERT INTO LOGS (content) VALUES ("'+ data+ '")');
    			});
    		}
    	};
    	
    	var onError = function(event) {
    		alert("error, maybe socket closed!")
    		//alert(event.data);
    	};
    	
    	var addMessage = function(data, type) {
    		var msg = $('<pre>').text(data);
    		if (type === 'SENT') {
    			msg.addClass('sent');
    		}
    		var messages = $('#messages');
    		messages.append(msg);
    		messages.append($("<br>"));
    		
    		var msgBox = messages.get(0);
    		while (msgBox.childNodes.length > 10000) {
    			msgBox.removeChild(msgBox.firstChild);
    		}
    		msgBox.scrollTop = msgBox.scrollHeight;
    	};
    	
    
    	var getLog= function(start, limit){
    			if(typeof(start) == undefined || !start){
    				start= 0
    			}
    			if(typeof(limit) == undefined || !limit){
    				limit= 10000
    			}
    			//log
    			db.transaction(function (tx) {
    				tx.executeSql('SELECT * FROM LOGS limit ?, ?', [start, limit], function (tx, results) {
    				var len = results.rows.length, i;
    				for (i = 0; i < len; i++){
    				   msg = results.rows.item(i).content;
    				   //document.querySelector('#status').innerHTML +=   msg;
    				   //alert(msg)
    				   addMessage(msg);
    				 }
    			 }, null);
    			});
    	};
    	WebSocketClient = {
    		init: function() {
    			serverUrl = $('#serverUrl');
    			connectionStatus = $('#connectionStatus');
    			sendMessage = $('#sendMessage');
    			
    			connectButton = $('#connectButton');
    			disconnectButton = $('#disconnectButton'); 
    			sendButton = $('#sendButton');
    
    			loginName= $('#name');
    			loginPass= $('#password');
    			loginButton= $('#loginButton');
    
    			if(cache_server!= null)serverUrl.val(cache_server)
    			if(cache_name!= null)loginName.val(cache_name)
    			if(cache_password!= null)loginPass.val(cache_password)
    
    			getLog();
    
    			loginButton.click(function(e) {
    				login();
    			});
    			
    			connectButton.click(function(e) {
    				close();
    				open();
    			});
    		
    			disconnectButton.click(function(e) {
    				close();
    			});
    			
    			sendButton.click(function(e) {
    				var msg = $('#sendMessage').val();
    				if(msg== "" ){
    					alert("You must say something!")
    				}else{
    					ws.send("msg|"+ msg);
    					$('#sendMessage').val("")
    				}
    			});
    			
    			$('#clearMessage').click(function(e) {
    				clearLog();
    			});
    			
    			var isCtrl;
    			sendMessage.keyup(function (e) {
    				if(e.which == 17) isCtrl=false;
    			}).keydown(function (e) {
    				if(e.which == 17) isCtrl=true;
    				if(e.which == 13 && isCtrl == true) {
    					sendButton.click();
    					return false;
    				}
    			});
    		}
    	};
    }
    
    $(function(){
    	cache_server= localStorage.getItem("server")
    	cache_name= localStorage.getItem("name")
    	cache_password= localStorage.getItem("password")	
    
    	db = openDatabase('mydb', '1.0', 'Test DB', 5 * 1024 * 1024);
    
    	db.transaction(function (tx){
    		tx.executeSql("CREATE TABLE IF NOT EXISTS LOGS ('id' integer primary key autoincrement,'content' text)");
    	 });
    
    	WebSocketClient.init();
    
    });
    

  • 相关阅读:
    .net注册iis
    hdu 1081To The Max
    hdu 1312Red and Black
    hdu 1016Prime Ring Problem
    hdu 1159Common Subsequence
    hdu 1372Knight Moves
    hdu 1686Oulipo
    hdu 1241Oil Deposits
    hdu 1171Big Event in HDU
    hdu 4006The kth great number
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/3871330.html
Copyright © 2011-2022 走看看