Перейти к публикации
  • Сейчас на странице   Всего пользователей: 2   (0 пользователей, 2 гостя)

Hed-kun

Программирование, т. 5.1.

Рекомендованные сообщения

11000 + id

 

же


Публикация отключена

Поделиться сообщением


Ссылка на сообщение

а игрок знает свой айди? а как он его первый раз узнает?

Поделиться сообщением


Ссылка на сообщение

а игрок знает свой айди? а как он его первый раз узнает?

а зачем его знать? чтобы узнать какие порты на файрволе открывать или что?


Публикация отключена

Поделиться сообщением


Ссылка на сообщение

ебать вы умные

пока вы придумывали как бы сострить и обосрать мой код,

мой код славно запускается, работает ресепшн все работает.

я к этому 11000 + id две недели шел.

другими способами было бы больше кода, а так элегантней всего, то есть теперь серверу необязательно отправлять новый порт после ресепшна (11000) а сразу начать слушать.

кароче :rickroll:

 

wb3dCKX.png

 

 

вот мой главный код теперь

public void start() throws IOException, InterruptedException {
 System.out.println("Server started on " + receptionSocket.getLocalAddress().getHostName() + ":" + Integer.toString(receptionSocket.getLocalPort()));
 boolean done = false;
 Thread receptionThread = new Thread() {
  public void run() {
	  try {
    while (true) {
	 DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
  receptionSocket.receive(receivePacket);
  registerPacket(receivePacket);
  Thread.sleep(10);
    }
	  } catch (SocketException e) {
 e.printStackTrace();
 receptionSocket.close();
   } catch (IOException e) {
 e.printStackTrace();
   } catch (InterruptedException e) {
   }
  }
 };
 receptionThread.start();
 while (!done) {
  long startTime = System.nanoTime();
  prepareSnapshot();
  broadcastSnapshot();
  Thread.sleep(10);
 }
 receptionSocket.close();
 broadcastSocket.close();
}

логика парсера удачно переместилась в PLayer.java

карое я зуценберг нахуй :trollface:

Поделиться сообщением


Ссылка на сообщение

а игрок знает свой айди? а как он его первый раз узнает?

а зачем его знать? чтобы узнать какие порты на файрволе открывать или что?

а игрок разве не должен заранее знать к какому порту на сервере ему стучаться?

Поделиться сообщением


Ссылка на сообщение

Чото блять охуительная игра. И ради этого стоило проебать столько лет в вузе?


Мобильное приложение для продоты https://play.google....id=ru.prodota.m

Поделиться сообщением


Ссылка на сообщение

фпс в секунду

frames per second2 :veselimsya:

 

двапой изобрёл ускорение фреймов

Поделиться сообщением


Ссылка на сообщение

Что ты будешь делать когда количество игроков перевалит за 54535? :nate:

Поделиться сообщением


Ссылка на сообщение
(изменено)

думаю что-то типа

if (id >= 54535)
  this.port = 10000 + (54534 - id);

 

а потом ещё

if (id > 65535)
   throw new SlotsFullCykaException();


Изменено пользователем TheDeadSkin

Поделиться сообщением


Ссылка на сообщение
(изменено)

0 <= id < 1000

 

ожидается, что id уникален для каждого игрока.

ресепшн тред читает id в начале пакета и добавляет в списко игроков.

в то время в конструкторе игрока я запускаю еще один тред который слушает приватный порт для игрока (на сервере) и парсит данные

в общем итого тредов:

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

2. ресепшн тред, слушает корневой порт (11000) который оговорен с клиентами и регистрирует новых участников (типа .add(new Player(..))

3. тред на каждого игрока - слушает 11000 + id. спавнится прямо в конструкторе. но ничего не передает (очевидно)

 

все летит, быстро, плавно, без лагов. то, что и требовалось с моей стороны.

а другие ребята офк заняты самим геймплеем, графикой и т.д

срок сдачи: 1 семестр


Изменено пользователем Обязательное_поле

Поделиться сообщением


Ссылка на сообщение

а игрок знает свой айди? а как он его первый раз узнает?

а зачем его знать? чтобы узнать какие порты на файрволе открывать или что?

а игрок разве не должен заранее знать к какому порту на сервере ему стучаться?

нeт


Публикация отключена

Поделиться сообщением


Ссылка на сообщение

Бля, каждому игроку свой порт, такой рак :fie: Одумайся :subj:

Поделиться сообщением


Ссылка на сообщение
(изменено)

Бля, каждому игроку свой порт, такой рак :fie: Одумайся :subj:

по другому никак бро :(

это UDP,

если буду юзать один порт, то код будет блочится пока не поступит любой пакет.

пробовал, не сработалось.

 

и вобщето это я сделал так, как во всех играх: есть главный порт подключения который перенапрявляет клиентов в динамически созадваемые сокеты, которые офк биндятся к 1 порту(получается мы изобрели свои сессии, прямо как в TCP :trollface: )

 

привет тем кто говорил что 1 порт -> много сокетов


Изменено пользователем Обязательное_поле

Поделиться сообщением


Ссылка на сообщение

Что ты будешь делать когда количество игроков перевалит за 54535? :nate:

свой ммог запилит епты ))


Публикация отключена

Поделиться сообщением


Ссылка на сообщение

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


Мобильное приложение для продоты https://play.google....id=ru.prodota.m

Поделиться сообщением


Ссылка на сообщение

Бля, каждому игроку свой порт, такой рак :fie: Одумайся :subj:

по другому никак бро :(

это UDP,

если буду юзать один порт, то код будет блочится пока не поступит любой пакет.

пробовал, не сработалось.

 

и вобщето это я сделал так, как во всех играх: есть главный порт подключения который спавнит треды (получается мы изобрели свои сессии, прямо как в TCP :trollface: )

эммм... почитай вот это - http://trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking


Публикация отключена

Поделиться сообщением


Ссылка на сообщение
Гость
Эта тема закрыта для публикации сообщений.

×
×
  • Создать...