front_js/pointers/communication/js/client.js
author bastiena
Fri, 29 Jun 2012 15:37:26 +0200
changeset 41 d2f735d7763f
child 48 983d7be910c1
permissions -rw-r--r--
Middleware: config by config file Front JS: Examples created (pointers & gestures). Installer that integers now Middleware + Front Processing + Front JS.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
41
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
     1
/*
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
     2
* This file is part of the TraKERS\Front JS package.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
     3
*
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
     4
* (c) IRI <http://www.iri.centrepompidou.fr/>
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
     5
*
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
     6
* For the full copyright and license information, please view the LICENSE
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
     7
* file that was distributed with this source code.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
     8
*/
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
     9
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    10
/*
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    11
 * Projet : TraKERS
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    12
 * Module : Front JS
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    13
 * Fichier : index.html
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    14
 * 
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    15
 * Auteur : alexandre.bastien@iri.centrepompidou.fr
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    16
 * 
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    17
 * Fonctionnalités : Définit le module de communication qui établit la connexion entre ce Front et le Middleware.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    18
 */
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    19
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    20
/*
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    21
 * Un client est défini par une socket, qui permettra de recevoir les données du server websocket du Middleware.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    22
 * On accède aussi à la classe des pointeurs.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    23
*/
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    24
function client(host, port, _pointers)
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    25
{
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    26
    this.socket;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    27
    this.pointers = _pointers;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    28
    
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    29
    this.pointerLeft = false;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    30
    this.pointerRight = false;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    31
    this.timePointers = 100;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    32
    this.pointerLeftTimeout;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    33
    this.pointerRightTimeout;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    34
    this.isLeftHanded = false;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    35
    
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    36
    this.createWebSocket('ws://' + host + ':' + port + '/');
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    37
}
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    38
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    39
/*
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    40
 * Création et Initialisation des sockets et listeners permettant d'écouter le server.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    41
*/
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    42
client.prototype.createWebSocket = function(host)
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    43
{
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    44
    var _this = this;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    45
    
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    46
    //Initialise la fonctionnalité websocket du naviguateur.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    47
    if(window.MozWebSocket)
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    48
    {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    49
        window.WebSocket = window.MozWebSocket;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    50
    }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    51
    
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    52
    //Si le naviguateur ne supporte pas les websockets, on s'arrête là.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    53
    if(!window.WebSocket)
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    54
    {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    55
        alert('Votre navigateur ne supporte pas les webSocket!');
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    56
        return false;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    57
    }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    58
    //Sinon
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    59
    else
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    60
    {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    61
        //On initialise la socket.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    62
        this.socket = new WebSocket(host);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    63
        
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    64
        //Si elle est ouverte, on notifie le Front.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    65
        this.socket.onopen = function()
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    66
        {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    67
            console.log('Socket ouverte.');
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    68
        }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    69
        //Si elle est fermée, on notifie le Front.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    70
        this.socket.onclose = function()
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    71
        {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    72
            console.log('Socket fermée.');
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    73
        }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    74
        //S'il y a un problème dans la connection, on notifie le Front.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    75
        this.socket.onerror = function()
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    76
        {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    77
            console.log('Une erreur est survenue dans le module de Communication.');
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    78
        }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    79
        //Si on reçoit un message.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    80
        this.socket.onmessage = function(msg)
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    81
        {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    82
            _this.processMsg(msg);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    83
        }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    84
    }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    85
}
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    86
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    87
/*
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    88
 * Traite un message reçu du Middleware.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    89
*/
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    90
client.prototype.processMsg = function(msg)
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    91
{
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    92
    if(typeof msg === 'undefined' || typeof msg.data === 'undefined')
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    93
    {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    94
        return;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    95
    }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    96
    
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    97
    var _this = this;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    98
    
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
    99
    //Sinon si ce sont les coordonnées de la main droite.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   100
    if(msg.data[0] == '1')
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   101
    {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   102
        var instruction = msg.data.substring(2, msg.data.length);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   103
        pt = instruction.split(';');
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   104
        var x = Math.abs(parseFloat(pt[0])), y = Math.abs(parseFloat(pt[1]));
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   105
        this.pointerLeft = true;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   106
        clearTimeout(this.pointerLeftTimeout);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   107
        
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   108
        this.pointers.refreshMainPointer(x, y);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   109
        
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   110
        if(!this.pointers.isMainPointerDisplayed)
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   111
        {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   112
            this.pointers.mainPointerDisplay(true);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   113
            this.pointers.isMainPointerDisplayed = true;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   114
        }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   115
        
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   116
        this.pointerLeftTimeout = setTimeout(function()
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   117
        {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   118
            _this.pointerLeft = false;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   119
            
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   120
            if(_this.pointers.isMainPointerDisplayed)
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   121
            {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   122
                _this.pointers.isMainPointerDisplayed = false;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   123
                _this.pointers.mainPointerDisplay(false);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   124
            }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   125
        }, this.timePointers);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   126
    }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   127
    //Sinon si ce sont les coordonnées de la main gauche.
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   128
    else if(msg.data[0] == '0')
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   129
    {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   130
        var instruction = msg.data.substring(2, msg.data.length);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   131
        pt = instruction.split(';');
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   132
        var x = Math.abs(parseFloat(pt[0])), y = Math.abs(parseFloat(pt[1]));
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   133
        
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   134
        this.pointerRight = true;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   135
        clearTimeout(this.pointerRightTimeout);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   136
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   137
        this.pointers.refreshSecondPointer(x, y);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   138
        
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   139
        if(!this.pointers.isSecondPointerDisplayed)
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   140
        {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   141
            this.pointers.secondPointerDisplay(true);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   142
            this.pointers.isSecondPointerDisplayed = true;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   143
        }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   144
        
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   145
        this.pointerRightTimeout = setTimeout(function()
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   146
        {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   147
            _this.pointerRight = false;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   148
            
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   149
            if(_this.pointers.isSecondPointerDisplayed)
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   150
            {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   151
                _this.pointers.isSecondPointerDisplayed = false;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   152
                _this.pointers.secondPointerDisplay(false);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   153
            }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   154
        }, this.timePointers);
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   155
    }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   156
    
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   157
    if(this.pointerLeft && !this.pointerRight || !this.pointerLeft && this.pointerRight || !this.pointerLeft && !this.pointerRight)
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   158
    {
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   159
        this.pointers.areBothPointersHere = false;
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   160
    }
d2f735d7763f Middleware:
bastiena
parents:
diff changeset
   161
}