Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.07.2011, 20:21
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Кросс-доменный NodeJS чат
Сделал простой NodeJS чат.
Хочется протестировать.
Если есть пара минут.
Зайдите по адресу
http://moc-081.ru/chat/done.html

Или запустите код

Надеюсь чат не слетит

https://github.com/mycoding/Simple-Chat

Когда работает чат выглядит так


<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
	<link rel="stylesheet" type="text/css" href="http://moc-081.ru/ext/resources/css/ext-all.css" />
	<script type="text/javascript" src="http://moc-081.ru/ext/adapter/ext/ext-base.js"></script>
	<script type="text/javascript" src="http://moc-081.ru/ext/ext-all.js"></script>
	<script src="http://vreshenie.ru/work/comet/cross-domain/extjs-cross-domain.js"></script>
	<style>
		.icon-user {
			background-image: url("http://www.vreshenie.ru/resources/user.png") !important;
		}
		.icon-users {
			background-image: url("http://www.vreshenie.ru/resources/group.png") !important;
		}
		.icon-pencil {
			background-image: url("http://www.vreshenie.ru/resources/pencil.png") !important;
		}		
		.icon-comments {
			background-image: url("http://www.vreshenie.ru/resources/comments.png") !important;
		}		
	</style>
<script>
var messages = [],
	users_online = [];//,
	//chat_property = {login:'',sid:''};
Ext.onReady(function(){
	function sendMessage(login){
		var msg = Ext.getCmp('idMsgChat').getValue();
		if(msg.length!=0){
			crossDomainRequest('sendMessage',{login:window.login,sid:window.sid,msg:msg,action:'sendMessage'})
		}
	}

	function runLoginedChat(){
		var win = Ext.getCmp('windowChat');
		win.setTitle('Cross-domain comet chat on ExtJS+nodeJS');
		
		var login = Ext.getCmp('login');			
		win.items.items[1].el.fadeOut({callback:function(){
			login.hide();
		}});
		
		var buttonLogin = Ext.getCmp('idLoginButton');
		buttonLogin.setText('Send');
		buttonLogin.setIconClass('icon-pencil');
		buttonLogin.setHandler(function(){
			sendMessage(login);
			Ext.getCmp('idMsgChat').setValue('');
		});
		
		var xy=win.getPosition();
		var x = xy[0]-100;
		var y = xy[1]-100;
		win.el.shift({
			x: x,
			y: y,
			duration:1,
			//easing:effect,
			callback:function(){
				win.el.shift({
					width:400,
					callback:function(){
						win.setWidth(400);
						win.setHeight(300);
						
						var str=' ';
						for(var i=0;i<messages.length;i++){
							str+=""+messages[i].login+":"+messages[i].msg+'</br>';
						}
						Ext.getCmp('serverMessage').update(str);
												
						Ext.getCmp('idMsgChat').show();
						Ext.getCmp('serverMessage').show();
						Ext.getCmp('idUsersOnline').show();
						var winUserOnline = Ext.getCmp('idWinUsersOnline'),
							windowChatXY = Ext.getCmp('windowChat').getPosition(),
							windowChatXYSize = Ext.getCmp('windowChat').getSize();
						winUserOnline.setPosition(windowChatXY[0]+windowChatXYSize.width+50,windowChatXY[1]);						
						winUserOnline.show();
						
						var treeUserOnline = Ext.getCmp('idTreeUserOnline');
						for(var i=0;i<users_online.length;i++){
							var newNode = new Ext.tree.TreeNode({id:"'"+users_online[i]+"'", text:users_online[i], leaf: true});
							treeUserOnline.root.appendChild(newNode);							
						}
						
						crossDomainRequest('getMessage',{login:window.login,sid:window.sid,action:'getMessage'});
					}
				});
			}
		});
	}
	
	function crossDomainRequest(action,params){
		Ext.Ajax.request({
			timeout:300,
			url: 'http://node2.tw1.ru/',
			//url: 'http://127.0.0.1:1337/',
			params:params || {},
			scriptTag: true,
			success: function(r){
				var message = r.responseObject.msg;
				var login = r.responseObject.login;
				//console.log(message);
				//console.log(r);
				if(action=='getMessage'){
					if(!r.responseObject.reconnect){
						if(login!='Server'){
							messages.push({msg:message,login:login});
						}
						var str=' ';
						
						for(var i=0;i<messages.length;i++){
							str+=""+messages[i].login+":"+messages[i].msg+'</br>';
						}
												
						if(login=='Server'){
							var action_server = r.responseObject.action_server;							
							switch(action_server){
								case 'join':
									str+="<b>Server</b>:"+message+' join</br>';
									messages.push({msg:message+' join',login:'<b>'+login+'</b>'});
									var newNode = new Ext.tree.TreeNode({id: "'"+message+"'", text: message , leaf: true});
									Ext.getCmp('idTreeUserOnline').root.appendChild(newNode);
									break;
								case 'left':
									str+="<b>Сервер</b>:"+message.join(',')+' left</br>';
									var users_left = message;
									messages.push({msg:message.join(',')+' left',login:'<b>'+login+'</b>'});
									for(var i=0;i<users_left.length;i++){
										var node = Ext.getCmp('idTreeUserOnline').getNodeById("'"+users_left[i]+"'");
										if(node){
											Ext.getCmp('idTreeUserOnline').root.removeChild(node);
										}
									}									
									break;
								default:
							}
						}
						
						Ext.getCmp('serverMessage').update(str);						
					}					
					crossDomainRequest('getMessage',{login:window.login,sid:window.sid,action:'getMessage'});
				}
				if(action=='login'){
					if(r.responseObject.success){
						messages = r.responseObject.msgs;
						window.sid = r.responseObject.sid;
						users_online = r.responseObject.users_online;
						
						runLoginedChat();
					}
					else{
						Ext.Msg.alert('Error', r.responseObject.error);
					}
					//console.log(r.responseObject);
				}
				if(action=='sendMessage'){}
				if(action=='usersOnline'){
					messages.push({login:r.responseObject.login,msg:r.responseObject.msg});
					var str=' ';
					for(var i=0;i<messages.length;i++){
						str+=""+messages[i].login+":"+messages[i].msg+'</br>';
					}
					Ext.getCmp('serverMessage').update(str);
				}
			},			
			failure:function(){
				console.log('failure');
				Ext.Msg.alert('Error','Critical error on server');
				if(action=='getMessage'){
					crossDomainRequest('getMessage',{login:window.login,action:'getMessage'});
				}				
			}
		});
	}
	
	function chatLogin(){
		var login = Ext.getCmp('login').getValue();
		window.login=login;
		crossDomainRequest('login',{login:login,action:'login'});
	}
	
	var w = new Ext.Window({
		resizable:false,
		closable:false,
		id:'windowChat',
		shadow:false,
		iconCls:'icon-comments',
		title:'Chat',
		width:270,
		height:95,
		layout:'form',
		bodyStyle:'padding:5px 5px 0',
		items:[{
			id:'serverMessage',
			bodyStyle:'padding:5px 5px',
			height:230,
			hidden:true,
			autoScroll:true,
			html:'Place for massages'
		},{
			id:'login',
			xtype:'textfield',
			fieldLabel:'Input nick',
			listeners: {
				specialkey: function(field, e){
					if (e.getKey() == e.ENTER){
						chatLogin();
					}
				}
			}
		}],
		bbar:[{
			id:'idMsgChat',
			xtype: 'textfield',
			width:260,
			hidden:true,			
			listeners: {
				specialkey: function(field, e){
					if (e.getKey() == e.ENTER){
						var msg = Ext.getCmp('idMsgChat');
						if(msg.getValue().length>0){
							sendMessage(w.login);
							Ext.getCmp('idMsgChat').setValue('');
						}
					}
				}
			}
		},'->',{
			id:'idUsersOnline',
			text:'Users',
			iconCls:'icon-users',
			hidden:true,
			handler:function(){
				crossDomainRequest('usersOnline',{login:window.login,sid:window.sid,action:'getUsersOnline'});
			}
		},'','',{
			id:'idLoginButton',
			text:'Enter',
			iconCls:'icon-user',
			handler:chatLogin
		}]		
	}).show();
	
	new Ext.Window({
		id:'idWinUsersOnline',
		title:'Пользователи онлайн',
		closeAction:'hide',
		layout:'fit',
		closable:false,
		width:170,
		height:195,
		items:[{
			xtype:'treepanel',
			id:'idTreeUserOnline',
			autoScroll: true,
			root: new Ext.tree.AsyncTreeNode({
				expanded: true,
				children: []
			}),
			rootVisible: false,
			listeners: {
				click: function(n){
					//console.log(n.attributes.id);
					//var newNode = new Ext.tree.TreeNode({id: "5", text: "foo", leaf: true});
					//Ext.getCmp('idTreeUserOnline').root.appendChild(newNode);
					//var node = Ext.getCmp('idTreeUserOnline').getNodeById('2');
					//if(node){
					//	Ext.getCmp('idTreeUserOnline').root.removeChild(node);
					//}
				}
			}
		}]
	})
});
</script>
</head>
<body>
</body>
</html>

Последний раз редактировалось mycoding, 17.07.2011 в 15:07.
Ответить с цитированием
  #2 (permalink)  
Старый 13.07.2011, 21:21
Аспирант
Отправить личное сообщение для lalala Посмотреть профиль Найти все сообщения от lalala
 
Регистрация: 04.03.2011
Сообщений: 87

mycoding, даже зайти не смог
Error
Critical error on server
очень жаль, хотелось побаловаться
Ответить с цитированием
  #3 (permalink)  
Старый 13.07.2011, 21:23
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Да, опять хостинг полетел.
Хостинг тестовый.

Как только заработает, напишу.
Чуть позже обязательно попробуйте
Ответить с цитированием
  #4 (permalink)  
Старый 13.07.2011, 23:16
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Заработало.
На хостинге сказали похоже на утечку памяти будут разбираться ближе к выходным.

Сейчас стоит перезапуск каждые 10 минут.
Ответить с цитированием
  #5 (permalink)  
Старый 13.07.2011, 23:23
Аватар для Serg_pnz
Сам по себе
Отправить личное сообщение для Serg_pnz Посмотреть профиль Найти все сообщения от Serg_pnz
 
Регистрация: 09.06.2009
Сообщений: 963

антиспам не в дугу...
Цитата:
Critical error on server
Ответить с цитированием
  #6 (permalink)  
Старый 13.07.2011, 23:41
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Опять слетел.
Дело в хостинге.

Если попробуете у себя на сервере код запустить, все должно работать.
Очень надеюсь, что хостинг разберется в чем дело.
Ответить с цитированием
  #7 (permalink)  
Старый 14.07.2011, 11:44
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

mycoding,
сколько за такой хостинг платишь, если не секрет? Или это бесплатный тестовый?
Ответить с цитированием
  #8 (permalink)  
Старый 14.07.2011, 11:58
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Сообщение от Kolyaj Посмотреть сообщение
mycoding,
сколько за такой хостинг платишь, если не секрет? Или это бесплатный тестовый?
Это тестовый хостинг от TimeWeb.
6 месяцев даром.
http://timeweb.ru/about/news/362/

Последний раз редактировалось mycoding, 14.07.2011 в 12:44.
Ответить с цитированием
  #9 (permalink)  
Старый 14.07.2011, 15:28
Профессор
Отправить личное сообщение для tenshi Посмотреть профиль Найти все сообщения от tenshi
 
Регистрация: 20.03.2008
Сообщений: 1,183

попробуй вот этих ребят http://doc.hivext.ru/index.php/Hive_IDE
__________________
.ня
Ответить с цитированием
  #10 (permalink)  
Старый 15.07.2011, 22:37
Аватар для mycoding
NodeJS developer - ушел
Отправить личное сообщение для mycoding Посмотреть профиль Найти все сообщения от mycoding
 
Регистрация: 06.01.2010
Сообщений: 1,022

Вроде чат заработал
http://moc-081.ru/chat/done.html
Перестал слетать.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чат с наименьшей нагрузкой на сервер syegorius Events/DOM/Window 6 29.04.2011 16:19
Comet: NodeJS - с чего начать разработку? Vulkan AJAX и COMET 13 27.11.2010 19:25
Как написать свой чат mycoding Оффтопик 2 14.08.2010 21:51
Кросс доменный запрос mycoding Общие вопросы Javascript 3 23.04.2010 01:40
Чат vochat и фреймы Abaza Работа 2 02.11.2009 14:40