IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Modules Perl Discussion :

Besoin d'un coup de main avec POE::Component::Server::TCP


Sujet :

Modules Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de scaleo
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 327
    Par défaut Besoin d'un coup de main avec POE::Component::Server::TCP
    J'utilise depuis près de deux ans systématiquement le module POE::Component::Server::TCP, quand je doit faire des serveurs TCP.

    Jusque la j'ai toujours employé ce module dans des scripts "libre" je veut dire pas dans un package et c'est justement ce qui m'amène ici je n'arrive pas a lancer ce module si je le met dans un sub

    si je met cela dans mon package

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
        my $acceptor_session_id = new POE::Component::Server::TCP (
                 Port     => 12000,
                 Acceptor => \&_accept_handler,
                 Error    => \&_error_handler,
                 Concurrency => -1,
        ) or die ('Unable to create TCP server');

    pas de problème sa marche mais m'empèche d'appeler la fonction new() de mon package ou n'importe qu'elle autre fonction d'ailleur, vous me direz no problémo fait une fonction bah justement sa marche pas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    sub server
    {
          $acceptor_session_id = new POE::Component::Server::TCP (
                 Port     => 12000,
                 Acceptor => \&_accept_handler,
                 Error    => \&_error_handler,
                 Concurrency => -1,
        ) or die ('Unable to create TCP server');
    }

    le serveur ne ce lance pas pour préçision die() n'est jamais appelé.

    Je ne comprend pas ce comportement aussi j'ai besoin de vos lumières

    merci

  2. #2
    Membre confirmé Avatar de crochepatte
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 206
    Par défaut
    Et comment fais tu appel à ta fonction?

  3. #3
    Membre éclairé Avatar de scaleo
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 327
    Par défaut
    Beh de façon classique

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    # package ou ce trouve le serveur
    my $obj = new TESTE ();
     
    $obj->serveur;

  4. #4
    Membre confirmé Avatar de crochepatte
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    206
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mars 2005
    Messages : 206
    Par défaut
    Bizarre...

    Peut etre qu'il te manque un argument à ta fonction...

    Essaie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    sub server 
    {  
      my ($this) = @_;
      $acceptor_session_id = new POE::Component::Server::TCP (  
            Port => 12000, 
            Acceptor => \&_accept_handler, 
            Error => \&_error_handler, Concurrency => -1, ) 
      or die ('Unable to create TCP server'); 
    }
    Je ne suis pas sur puisque je ne fais pas de module, mais je travaille souvent avec des objet Perl qui s'aparente a des modules (sauf que la methode new est "surchargé")...je te conseille d'aller voir la FAQ à ce sujet, c'est tres facile si tu as un peu de notion de langage objet...

  5. #5
    Membre éclairé Avatar de scaleo
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    327
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 327
    Par défaut
    J'ai trouvé la solution en fait il faut appelé le Kernel de POE juste après avoir invoqué la méthode new du module quand ont met celle-ci dans un sub, c'est parce que perl parse les fichiers de haut en bas du coup comme l'invoquation de new ce fait dans un sub le kernel n'est jamais chargé ou un truc comme sa

    bon voila un ti code de teste



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    #!/usr/bin/perl -w
    use strict;
    use diagnostics;
    use POE qw(Component::Server::TCP);
     
     
    &server();
     
    sub server
    {
        my $acceptor_session_id = new POE::Component::Server::TCP (
                 Port     => 12000,
                 Acceptor => \&_accept_handler,
                 Error    => \&_error_handler,
                 Concurrency => -1,
        ) or die ('Unable to create TCP server');
      POE::Kernel->run(); # vala le chargement du kernel
    }
     
    sub _accept_handler
    {
      my ($socket, $remote_address, $remote_port) = @_[ARG0, ARG1, ARG2];
      print "yeah roxor baby !!!!!\n";
    }
     
     
    sub _error_handler
    {
       my ($syscall_name, $error_number, $error_string) = @_[ARG0, ARG1, ARG2];
       print "------------------------------------------\n";
       print "$syscall_name\n";
       print "$error_number\n";
       print "$error_string\n";
       print "------------------------------------------\n";
    }
    Merci de ton aide crochepatte

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Débutant besoin d'un coup de main avec ExecuteScalar
    Par mobscene dans le forum Accès aux données
    Réponses: 1
    Dernier message: 22/03/2007, 02h00
  2. Besoin d'un coupe de main avec une classe sql
    Par mobscene dans le forum C#
    Réponses: 3
    Dernier message: 21/03/2007, 13h15
  3. Besoin d'un coup de main avec HTML::Parser
    Par mobscene dans le forum Modules
    Réponses: 1
    Dernier message: 09/12/2006, 15h49
  4. Réponses: 3
    Dernier message: 23/10/2006, 02h07
  5. Besoin d'un coup de main avec print
    Par scaleo dans le forum Langage
    Réponses: 2
    Dernier message: 10/06/2006, 21h12

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo