See site in english Voir le site en francais
Website skin:
home  download  forum  link  contact

Welcome, Guest. Please login or register.
Did you miss your activation email?

Login with username, password and session length

Author Topic: Multijoueur -> Module Copilotage  (Read 102348 times)

0 Members and 2 Guests are viewing this topic.

Offline Bibi Uncle

  • Legend
  • ******
  • Posts: 2264
  • Country: Canada ca
  • Karma: 17
Reply #50 - 02 August 2010, 15:44:37
Ça avance bien ici ! Pour l'adresse de connexion, c'est l'adresse IP ? Ce serait sympa qu'il détecte automatiquement l'IP du PC qu'on utilise. ;)


Émile

Pluton, Saturne et Jupiter
Entendez-vous monter vers vous le chant de la Terre?

- Luc Plamondon

Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #51 - 02 August 2010, 15:55:07
Non, en fait l'adresse IP de ton PC, il s'en fout, c'est sur le même PC que tourne Orbiter donc on la connait, on la code en dur. C'est l'adresse IP du serveur distant (le collègue qui hénèrge la session, quoi) que l'on met...

Voilà, voili...

Yves


Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #52 - 02 August 2010, 16:03:17
Impressionnant et bien pensé !
Félicitation , cher collègue !
:applause:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #53 - 04 August 2010, 17:44:28
Bonjour,

Des bonnes nouvelles : ça y est, ça fonctionne enfin !!! Le client et le serveur dans le même module !

la solution a été le recours au thread (ben voyons !) pour éviter le blocage de "connect()" mais, j'y suis arrivé et une fois qu'on a compris, c'est pas si compliqué (en apparence) que ça. Le tout est de faire attention à la gestion des threads.

Fonctionnement des deux modes : à l'emplacement de l'adresse IP, si on met "serveur" puis "connexion", on se retrouve en mode serveur. Si on met autre chose, on est client. Voilà, c'est hyper simple !

Etape suivante : choix d'une structure de données à transmettre-recevoir...

Des nouvelles ici bientôt !

Yves


Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #54 - 04 August 2010, 17:51:46
AAAH !
Enfin des nouvelles !
Quote
la solution a été le recours au thread (ben voyons !)
:top:
Quote
Fonctionnement des deux modes : à l'emplacement de l'adresse IP, si on met "serveur" puis "connexion", on se retrouve en mode serveur. Si on met autre chose, on est client. Voilà, c'est hyper simple !
:top:
Quote
Etape suivante : choix d'une structure de données à transmettre-recevoir...
Au point où tu en es , tu pourrais faire comme Jimmy Hendrix !
Tu codes ta structure avec le clavier derrière la tête ( trop facile sinon ... ).
Pis quand t'a fini , tu branches ta webcam , tu l'arroses de kérosène et tu nous fait un de ces petits clips qui vont bien ?
Aouuuuuuuuuh ! Aouuuuuuuuuh ! Aouuuuuuuuuh !
:applause:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #55 - 04 August 2010, 18:24:24
Re...

En réfléchissant voici l'idée pour les datas :

Le serveur (celui qui héberge la session) envoie à chaque requête d'un client deux groupe de données en une trame (o verra si le socket l'accepte...) : un groupe variables de statut/position/attitude du vaisseau et un groupe de variables d'action simples (mode rcs, prograde/retrograde/normal+/normal-, puissance en cours pour chaque moteur principal et rcs). Le client les traite, les actualise sur sa propre session et ne renvoie au serveur que la partie action (au cas où il y ait des changements).

Voilà le principe général mais...suivant la fonction occupée à bord certaines données ne seront pas renvoyée au serveur. Un exemple est le navigateur qui aurait une action sur la manette des gaz. Celle-ci ne serait pas transmise au serveur et à la prochaine actualisation, le client se retrouvera dans l'état ou est le serveur, donc l'action est annulée par l'actualisation suivante (au frame suivant en fait, au pire 8 frame plus tard (à cause des 8 fonctions à bord = une fonction par frame dans le pire des cas...)).

Bon, reste à coder tout ça et à faire une interface sympa...

Yves


Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #56 - 04 August 2010, 19:46:20
Quote
deux groupe de données en une trame
Du genre " structure imbriquée " ?
Tu devrais pouvoir passer en référence de ta fonction d'écriture un pointeur sur une classe CMSG par exemple.
Cette classe contiendrait deux structures , initialisées dans la classe et lisible normalement à travers readfile().
Par contre , un pointeurA contenant un pointeurB , je crois que B est inutilable plus loin en lecture ( en passant par le mode BYTE ).


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #57 - 04 August 2010, 20:27:27
Non, je pensais à qqchose de plus simple : deux structures de variables différentes passées à "send()" en tant qu'objet (surcharge de type)...

Yves


Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #58 - 04 August 2010, 21:34:46
Oooops
Quote
Non, je pensais à qqchose de plus simple : deux structures de variables différentes passées à "send()" en tant qu'objet (surcharge de type)...

Send() accepte + d'un paramètre ? Comprends pas ...
A moins que tu veuilles dire : j'envoie un message puis un autre ?
Quote
(surcharge de type)
tu déclares
Code: [Select]
MASTRUCT msg ;
dans SEND(param,(void *) &msg,param,...)
??



Message modifié ( 04-08-2010 21:49 )

Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline SolarLiner

  • Global Moderator
  • Legend
  • *****
  • Posts: 2769
  • Country: France fr
  • Karma: 55
  • a été remercié par Le Créateur
Reply #59 - 04 August 2010, 23:17:55
Cool ! Moi qui ne savais pas comment faire pour mon épisoe ... 2 F-35 qui escorte le DG4 en montée vers l'orbite ... vers Mars ! Mais seulement, comment piloter tout le monde ? J'ai eu l'idée de passer par FSX, mais tout ce qui est cone, airlocks, Playload bay et trappes de turbo-pacs ne serais pas animées ... puis une fois dans l'espace, tu ne peut plus rien faire ! Dernièrement, le passage brutaled'une qualité de 1 pixel = 1 mètre à un 1 pixel = 0.6 kilomètre me semble tout gacher pour l'expérience que j'en ai. J'attend vivement le nouveau-né, félicitations au parents ! euh je m'égare



Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #60 - 04 August 2010, 23:27:09
HEY !! YVES !! UN CLIENT !!
:hot:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #61 - 05 August 2010, 06:44:50
Bonjour,

Il m'est venu une idée : via un port particulier, le serveur (ou le client) communiquera avec un MFD dédié qui permettra de connaitre le statut et où passera certaines infos utiles pour l'équipage. C'est le serveur qui communiquera ces infos...Le MFD est déjà prêt, je n'ai qu'à le modifier...

Ca s'étoffe, ça s'étoffe....

Yves


Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #62 - 05 August 2010, 11:31:19
Bien ...
C'était étonnant que tu n'utilises pas les mfd !
Enfin , chaque chose en son temps , hein ?
A+ , MrSPock .


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #63 - 07 August 2010, 11:14:30
Bon voilà la suite :

Je suis en train de programmer le MFD. Son rôle est double. En fait, lorsqu'on passe en mode client sur TeamServer (c'est comme ça que s'appelle le module principal), on ne peut pas choisir sa fonction à bord. Une fois la connexion établie avec l'hôte de la session, le client récupère les fonctions disponibles à bord et donne le choix à l'utilisateur via TeamMFD (le MFD relié à TeamServer). TeamServer récupère le choix de l'utilisateur via TeamMFD et l'envoie sur le réseau (vers l'hôte en fait qui le redistribue aux autres clients).

Enfin, le MFD permettra de donner aux utilisateurs des infos en broadcast en provennance de l'hôte de la session et /ou du cdt de bord du vaissseau.

Voilà....

Suite au prochain numéro...

Yves


Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #64 - 07 August 2010, 22:14:30
SUper ...
Je me demandais si tu pensais aussi intégrer des changements graphiques , comme par exemple des PANELS2D
spécifiques aux " postes " clients ? Par exemple , le gars qui remplit la chaudière de charbon , aurait moins l'occasion
de rêver devant les étoiles que le Navigateur ? L'immersion serait super ...


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #65 - 08 August 2010, 10:36:35
Non, pas pour le moment en tout cas. Mais tu sais, un programme, ça évolue, alors qui sait....


Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #66 - 08 August 2010, 10:41:39
J'ai éssayé une seconde de me mettre à ta place ...
Il y a beaucoup de paramètres à considérer .
Seul , je ne sais pas comment tu fais !
Mais bon , en procédant par étapes cela évite de se perdre .
Bon courage !
A+


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #67 - 08 August 2010, 22:23:34
Bon, ça avance, le MFD communique avec le plugin, tout ça rassemblé dans une seule dll. Pas commode, mais bon...

Voilà un screen en l'honneur de Mr Spock....





La suite pour bientôt : prochaine étape, les données d'Orbiter...là, ça devient sérieux...

Yves


Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #68 - 08 August 2010, 22:47:43
YEAAH !
Merci pour l'avant-première !
Cela semble simple et efficace !
Reste plus qu'à essayer 2,3 clients ?
C'est bien parti ...
Good work !:top:


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #69 - 08 August 2010, 23:49:19
Re bonsoir...

En fait, les données échangées peuvent se classer en trois catégories :

- Données de gestion de la session co-pilotage (fonctions à bord, connexions, déconnexions...etc...)

- Les données de situation et de statut du vaisseau (fournies à tous les clients, le serveur les ayant déjà). Elles assurent la synchronisation de tous les protagonistes par rapport au serveur.

- Les données d'action (appui sur un bouton, applicationn d'une poussée...etc...) fournies par les clients ou le serveur en fonction de la position à bord tenue par l'utilisateur.

Voilà pour le principe...

Yves


Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #70 - 09 August 2010, 00:06:20
Re

Petite précision, la programmation de ce truc là, je m'en suis vu car il a fallu mélanger de type de plugin : le plugin général et le plugin du MFD. Cela a tendance à produire de la programmation spaghetti (j'aime pas trop !). Bonjour la maintenance sur ce type de prog. Mais bon, j'ai pas trop eu le choix...pour le moment. J'essaierai d'organiser le source un peu mieux, mais une fois terminé le projet.

Yves



Message modifié ( 09-08-2010 00:06 )


Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #71 - 09 August 2010, 02:08:49
C'est marrant ... j'étais justement entrain d'y penser , aux types de données , et surtout au circuit de l'information .
Tu parlais de broadcasting , faut que je révise un peu mais ... c'est l'information à la demande ou l'envoi de paquets à
tous les connectés ? Non, çà c'est le multicast je crois ...
sinon :
Quote
1- Les données de situation et de statut du vaisseau (fournies à tous les clients, le serveur les ayant déjà). Elles assurent la synchronisation de tous les protagonistes par rapport au serveur.

2- Les données d'action (appui sur un bouton, applicationn d'une poussée...etc...) fournies par les clients ou le serveur en fonction de la position à bord tenue par l'utilisateur.
Il existe un lien interressant entre ces deux types de message .
Le plus évident est la dépendance de 1 à 2 :
Ex:
Si 2 ne lance pas l'ignition , 1 ( le Vessel) ne bouge pas ! ( Donc bypass de message de UPDATEPOS(...) ).
Si 2 ne change pas de cap , 1 conserve le même cap ! ( Donc bypass de message de UPDATEROT(...) ).
Cela est certes bien complexe à mettre en place , mais économique en taux de transferts .
La difficulté pour moi c'est de bien cibler les interdépendances ( et donc connaitre avec précision le rôle de chacun dans le sim ) .

 Un truc au delà ... Ton TeamServeur communiquant avec un autre TeamServeur via le OrbiterChallenge de Tofitouf !
8+8+8+8+8+8+8+.....
:)


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #72 - 09 August 2010, 10:47:39
Alors, je précise :

Les message en broadcast sont destinées à tout le monde, c'est presque un synonyme de multicast mais il y a une différence, ce sont les messages envoyés qui sont d'un intérêt général (des messages système en l'occurence).

Quote
il existe un lien interressant entre ces deux types de message .
Le plus évident est la dépendance de 1 à 2 :

Oui et non. La situation du vaisseau étant mise à jour très rapidement, l'influence des messages d'action est limitée, sachant que les message de situation comprennent les vecteurs force (donc le mouvement).

Les messages d'action disent simplement à quel moment on applique ces forces et qui est à l'origine. C'est suffisant pour Orbiter.

Quote
La difficulté pour moi c'est de bien cibler les interdépendances ( et donc connaitre avec précision le rôle de chacun dans le sim ) .

Oui, je suis d'accord avec toi. Chaque rôle (poste au sein du vaisseau) détermine qui peut faire quoi. C'est essentiel pour éviter les conflits d'action. Un jeu de priorité est donc établi.

Yves


Offline MrSpock

  • Legend
  • ******
  • Posts: 1593
  • Karma: 0
Reply #73 - 09 August 2010, 11:05:19
Salut !
Un autre truc que je me demandais , un client calcule bien sa propre position ?
Ou tu la calcules d'aprés les messages que tu envoies ?
Je dis cela parce que je viens de me frotter à la mécanique interne d'Orbiter concernant justement les positions
( à la surface d'une planète , certes ...) des vessels , et ce n'est pas simple !!
Ou alors j'ai raté un train ? :badsmile:
Moi , je laisserais Orbiter client faire le boulot à ma place ... tout compte fait !
A+ , merci pour les explications ! ;)


Mr Spock ,
Consultant de VULCAN TECH INDUSTRY.
( et accessoirement chatouilleur de PLAYMOBILS@tm )
http://kenai.com/projects/spacetechs-mecanos

Offline pilote334

  • Sr. Member
  • ****
  • Posts: 300
  • Karma: 5
Reply #74 - 09 August 2010, 11:16:38
En fait, c'est pas le client qui le fait mais le serveur (l'hôte de la session si tu préfères). C'est lui qui le transmet aux autres. C'est une simple recopie à l'instant T, donc très peu de calculs...

Yves