@historydev
Редактирую файлы с непонятными расширениями

Как синхронизировать действие для клиентов socket.io?

Вот код клиента:
var host = 'http://localhost:3000/',socket = io(host),hp,hp2,connections,x;

      		
$('.boss').click(function() {
     socket.emit('message',54397);
     $('.hp-b').css("width", x+'%');
     alert(x);
});	
socket.emit('forceDisconnect');

socket.on('connections', function(data) {
	connections = data;
	$('.users-count').html(connections);	
});

socket.on('new message', function(data) {
  hp = data;
  $('.hp-b').html(hp);
});

$('.hp-b').html(hp);
      	       	 
socket.on('disconnect', function(data) {
  alert('Сервер заполнен'); 
 // window.location.replace(host + 'serverfull');
});
socket.on('w', function(data) {
	x = data;
});


window.onbeforeunload = function() { 
	//return "Данные не сохранены. Точно перейти?";
	
};

Вот сервера:
var express = require('express');
var app = express();
var http = require('http').Server(app);
var connections=0,max_connections=2,port = 3000,maxhp = 300000,hp = maxhp,n = maxhp;

let io = require('socket.io')(http);

app.use(express.static(__dirname + '/client'));

app.get('/go', function(req,res) {
	res.sendFile(__dirname + '/client/public/index.html');
});

http.listen(port, function() {
	console.log('listening on *:' + port);
});

io.on('connection', function(socket) {
			connections+=1;
			io.emit('connections', connections);
			
			console.log('connected client:' + connections);
			
			
			if(connections > max_connections) {
				
				socket.on('forceDisconnect', () => {
						socket.disconnect(true);
						console.log('Server full!' + max_connections + '/' + max_connections);
				});
			}
			
			socket.on( 'disconnect', () => { 
				connections -= 1; 
				console.log( 'client disconnected:' + connections);
				io.emit('connections', connections);
			});
			
			
			
			
			socket.on('message', function(data) {
					hp = hp-data;
					if(hp<=0) hp = 0;
					x = hp/n*100;
   			io.emit('new message', hp);
   			if(hp>0) io.emit('w', x);
   			if(hp<=0) io.emit('w', 0);
   			console.log(hp);
   	});
   	x = hp/n*100;
   	io.emit('w', x);
   	if(hp<=0) hp = 0, x=-100;
   	
   	socket.on('hp', function(data) {
    	io.emit('hp2', n);
   		console.log(data);
   	});
   	
   	
});

Hp работает, если я допустим с одного клиента нанесу урон, то при подключении 2-го он покажет ему текущее хп, а если они уже были подключены, хп будет отниматся равномерно на всех клиентах.
Написал скрипт полоски с хп, втулил такой-же код как и на хп, оно не работает, помогите ^^
  • Вопрос задан
  • 177 просмотров
Решения вопроса 1
@historydev Автор вопроса
Редактирую файлы с непонятными расширениями
Вот ответ
Клиент:
var host = 'http://localhost:3000/',socket = io(host),hp,hp2,connections,x;

      		
$('.boss').click(function() {
     socket.emit('damage',54397);
     $('.hp-line').css("width", x+'%');
});	
socket.emit('hp line for all');
socket.emit('forceDisconnect');

socket.on('connections', function(data) {
	connections = data;
	$('.users-count').html(connections);	
});

socket.on('realtime hp', function(data) {
  hp = data;
  $('.hp-line').html(hp);
});

$('.hp-line').html(hp);
      	       	 
socket.on('disconnect', function(data) {
  alert('Сервер заполнен'); 
 // window.location.replace(host + 'serverfull');
});
socket.on('hp line width', function(data) {
	x = data;
	$('.hp-line').css("width", x+'%');
});


window.onbeforeunload = function() { 
	//return "Данные не сохранены. Точно перейти?";
	
};

Сервер:
var app = express();
var http = require('http').Server(app);
var connections=0,max_connections=2,port = 3000,maxhp = 300000,hp = maxhp,x;

let io = require('socket.io')(http);

app.use(express.static(__dirname + '/client'));

app.get('/go', function(req,res) {
	res.sendFile(__dirname + '/client/public/index.html');
});

http.listen(port, function() {
	console.log('listening on *:' + port);
});

io.on('connection', function(socket) {
			connections+=1;
			io.emit('connections', connections);
			
			console.log('connected client:' + connections);
			
			
			if(connections > max_connections) {
				
				socket.on('forceDisconnect', () => {
						socket.disconnect(true);
						console.log('Server full!' + max_connections + '/' + max_connections);
				});
			}
			
			socket.on( 'disconnect', () => { 
				connections -= 1; 
				console.log( 'client disconnected:' + connections);
				io.emit('connections', connections);
			});
			
			
			
			
			socket.on('damage', function(data) {
					hp = hp-data;
					if(hp<=0) hp = maxhp;
					x = hp/maxhp*100;
   			io.emit('realtime hp', hp);
   			if(hp>0) io.emit('hp line width', x);
   			if(hp<=0) io.emit('hp line width', 0);
   			console.log(hp);
   	});
   	socket.on('hp line for all', function(data) {
					x = hp/maxhp*100;
   			io.emit('realtime hp', hp);
   			io.emit('hp line width', x);
   			if(hp<=0) io.emit('hp line width', 0);
   	});
   	
   	
});
var express = require('express');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Sanasol
@Sanasol
нельзя просто так взять и загуглить ошибку
зависит от того что надо в итоге сделать.

Сейчас у вас каша.
Непонятно hp вообще кому принадлежит и у кого отнимается.

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

Ваш код даже не близко ни к тому ни к другому варианту.
Переделывать полностью всю логику надо.
Тут от руки даже не набросаешь в ответе рабочий вариант.

Вот пример рабочей стрелялки без хп, но с опытом exp который увеличивается если один игрок попал в другого.
https://github.com/S-anasol/network/blob/master/se...

В целом код большой сходу ничего не понятно будет скорее всего, но хотя бы рабочий примерный вариант.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы