Nikolay Suslov hace 7 años
padre
commit
41bfaea5cd

+ 4 - 0
support/client/lib/vwf/model/aframe.js

@@ -805,11 +805,15 @@ define(["module", "vwf/model", "vwf/utility"], function (module, model, utility)
                             break;
                         
                         case "color":
+                        if (aframeObject.getAttribute('background')) {
                             value = aframeObject.getAttribute('background').color;
+                        }
                             break;
 
                         case "transparent":
+                        if (aframeObject.getAttribute('background')) {
                             value = aframeObject.getAttribute('background').transparent;
+                        }
                             break;
                     }
                 }

+ 168 - 75
support/client/lib/vwf/view/editor-new.js

@@ -26,8 +26,9 @@ define([
     "vwf/view",
     "vwf/utility",
     "vwf/view/lib/ace/ace",
-    "vwf/view/lib/colorpicker/colorpicker.min"
-], function (module, version, view, utility, ace, colorpicker) {
+    "vwf/view/lib/colorpicker/colorpicker.min",
+    "vwf/view/widgets"
+], function (module, version, view, utility, ace, colorpicker, widgets) {
 
     var self;
 
@@ -38,6 +39,7 @@ define([
         initialize: function () {
             self = this;
             this.ace = window.ace;
+            this.widgets = widgets;
 
             this.nodes = {};
             this.scenes = {};
@@ -345,33 +347,8 @@ define([
 
 
 
-                                    ]
-                                },
-                                {
-                                    $cell: true,
-                                    $type: "div",
-                                    class: "mdc-layout-grid__cell mdc-layout-grid__cell--span-12",
-                                    $components: [
-                                        {
-                                        
-                                            $cell: true,
-                                            $type: "button",
-                                            class: "mdc-button mdc-button--raised",
-                                            $text: "GearVR controller",
-                                            onclick: function (e) {
-                                                //document.querySelector('#' + 'viewSettings').style.visibility = 'hidden';
-                                                let sceneEl = document.querySelector('a-scene');
-                                                let gearvr = document.createElement('a-entity');
-                                                gearvr.setAttribute('id','gearvrcontrols');
-                                                gearvr.setAttribute('gearvr-controls','');
-                                                gearvr.setAttribute('gearvr-controls', 'hand', 'right');
-                                                sceneEl.appendChild(gearvr);
-                                            }
-
-                                        }
                                     ]
                                 }
-
                             ]
                         }
                     ]
@@ -1063,7 +1040,7 @@ define([
                 class: "mdc-list-divider",
             }
 
-            let gizmoEdit = {
+            let webrtcGUI = {
 
                 $type: "div",
                 class: "propGrid mdc-layout-grid max-width mdc-layout-grid--align-left",
@@ -1081,61 +1058,183 @@ define([
 
                                         $cell: true,
                                         $type: "span",
-                                        $text: "Edit: ",
+                                        $text: "ON",
 
                                     }
                                 ]
                             },
                             {
                                 $type: "div",
-                                class: "mdc-layout-grid__cell mdc-layout-grid__cell--span-7",
+                                class: "mdc-layout-grid__cell mdc-layout-grid__cell--span-2",
+                                $components: [
+                                    widgets.switch({
+                                        'id': "webrtcswitch",
+                                        'init': function(){
+
+                                            let driver = vwf.views["vwf/view/webrtc"];
+                                            if (!driver) this.setAttribute('disabled', '');
+
+                                        },
+                                        "onchange": function(e){
+
+                                            let driver = vwf.views["vwf/view/webrtc"];
+                                            let avatarID = 'avatar-' + self.kernel.moniker();
+
+                                            let chkAttr = this.checked;
+
+                                         if (chkAttr) {
+                                             driver.startWebRTC(avatarID);
+                                             console.log("on")
+     
+                                         } else {
+                                            driver.stopWebRTC(avatarID);
+                                             console.log("off")
+                                         }
+
+                                        }
+                                    })
+                                ]
+                            },
+                            {
+                                $type: "div",
+                                class: "mdc-layout-grid__cell mdc-layout-grid__cell--span-2",
                                 $components: [
                                     {
+
                                         $cell: true,
-                                        $type: "div",
-                                        class: "mdc-switch",
-                                        $components: [
-                                            {
-                                                $type: "input",
-                                                type: "checkbox",
-                                                class: "mdc-switch__native-control",
-                                                id: 'editnode',
-                                                $init: function () {
+                                        $type: "span",
+                                        $text: "Mic: ",
 
-                                                    vwf_view.kernel.getProperty(this._currentNode, 'edit');
+                                    }
+                                ]
+                            },
+                            {
+                                $type: "div",
+                                class: "mdc-layout-grid__cell mdc-layout-grid__cell--span-2",
+                                $components: [
+                                    widgets.switch({
+                                        'id': "webrtcaudio",
+                                        'init': function(){
 
-                                                },
-                                                //id: "basic-switch",
-                                                onchange: function (e) {
+                                            let driver = vwf.views["vwf/view/webrtc"];
+                                            if (!driver) this.setAttribute('disabled', '');
+                                        },
+                                        "onchange": function(e){
+
+                                            let driver = vwf.views["vwf/view/webrtc"];
+                                           
+                                               let chkAttr = this.checked;
+                                            if (chkAttr) {
+                                                driver.muteAudio([chkAttr]);
+                                                console.log("on")
+        
+                                            } else {
+                                                driver.muteAudio([chkAttr]);
+                                                console.log("off")
+                                            }
+                                      
 
-                                                    var nodeID = document.querySelector('#currentNode')._currentNode;
-                                                    let chkAttr = this.getAttribute('checked');
-                                                    if (chkAttr == "") {
-                                                        self.kernel.setProperty(this._currentNode, 'edit', false);
+                                        }
+                                    })
+                                ]
+                            },
+                            {
+                                $type: "div",
+                                class: "mdc-layout-grid__cell mdc-layout-grid__cell--span-2",
+                                $components: [
+                                    {
 
-                                                    } else {
-                                                        self.kernel.setProperty(this._currentNode, 'edit', true);
-                                                    }
+                                        $cell: true,
+                                        $type: "span",
+                                        $text: "Cam: ",
 
-                                                    vwf_view.kernel.callMethod(nodeID, "showCloseGizmo");
+                                    }
+                                ]
+                            },
+                            {
+                                $type: "div",
+                                class: "mdc-layout-grid__cell mdc-layout-grid__cell--span-2",
+                                $components: [
+                                    widgets.switch({
+                                        'id': "webrtcvideo",
+                                        'init': function(){
 
+                                            let driver = vwf.views["vwf/view/webrtc"];
+                                            if (!driver) this.setAttribute('disabled', '');
 
-                                                }
-                                            },
-                                            {
-                                                $type: "div",
-                                                class: "mdc-switch__background",
-                                                $components: [
-                                                    {
-                                                        $type: "div",
-                                                        class: "mdc-switch__knob"
-                                                    }
-                                                ]
+                                        },
+                                        "onchange": function(e){
+                                            
+                                            let driver = vwf.views["vwf/view/webrtc"];
+                                            let chkAttr = this.checked;
+                                            if (chkAttr) {
+                                                driver.muteVideo([chkAttr]);
+                                                console.log("on")
+        
+                                            } else {
+                                                driver.muteVideo([chkAttr]);
+                                                console.log("off")
                                             }
-                                        ]
+                                        }
+                                    })
+                                ]
+                            }
+                        ]
+                    }
+
+                ]
+            }
+
+
+            let gizmoEdit = {
+
+                $type: "div",
+                class: "propGrid mdc-layout-grid max-width mdc-layout-grid--align-left",
+                $components: [
+                    {
+
+                        $type: "div",
+                        class: "mdc-layout-grid__inner",
+                        $components: [
+                            {
+                                $type: "div",
+                                class: "mdc-layout-grid__cell mdc-layout-grid__cell--span-2",
+                                $components: [
+                                    {
+
+                                        $cell: true,
+                                        $type: "span",
+                                        $text: "Edit: ",
+
                                     }
                                 ]
                             },
+                            {
+                                $type: "div",
+                                class: "mdc-layout-grid__cell mdc-layout-grid__cell--span-7",
+                                $components: [
+                                    widgets.switch({
+                                    'id': 'editnode', 
+                                    'init': function(){
+                                        vwf_view.kernel.getProperty(this._currentNode, 'edit');
+                                    },
+                                    'onchange': function(e){
+
+                                        var nodeID = document.querySelector('#currentNode')._currentNode;
+                                        let chkAttr = this.getAttribute('checked');
+                                        if (chkAttr == "") {
+                                            self.kernel.setProperty(this._currentNode, 'edit', false);
+    
+                                        } else {
+                                            self.kernel.setProperty(this._currentNode, 'edit', true);
+                                        }
+    
+                                        vwf_view.kernel.callMethod(nodeID, "showCloseGizmo");
+                                    }
+                                }
+                                )
+                                ]
+                            },
                             {
                                 $type: "div",
                                 class: "mdc-layout-grid__cell mdc-layout-grid__cell--span-1",
@@ -2504,18 +2603,12 @@ define([
 
                                 ]
                             },
-                            {
-                                $cell: true,
-                                $type: "hr",
-                                class: "mdc-list-divider",
-                            },
-                            {
-                                $cell: true,
-                                $type: "h3",
-                                class: "userList mdc-list-group__subheader",
-                                $text: "Users online"
-                            },
-                            clientListCell
+                            widgets.divider,
+                            widgets.headerH3("h3", "Users online", "userList mdc-list-group__subheader"),
+                            clientListCell,
+                            widgets.divider,
+                            widgets.headerH3("h3", "WebRTC", "userList mdc-list-group__subheader"),
+                            webrtcGUI
                         ]
                     }
 

+ 154 - 15
support/client/lib/vwf/view/webrtc.js

@@ -110,22 +110,78 @@ define( [ "module", "vwf/view", "vwf/utility", "vwf/utility/color", "jquery" ],
                 if ( this.kernel.moniker() == node.moniker ) { 
                     this.local.ID = childID;
                     
-                    if ( this.videoElementsDiv ) {
-                        $('body').append(
-                            "<div id='"+self.videoElementsDiv+"'></div>"
-                        );                   
-                    }
+                    
                 } 
             }
 
         }, 
 
-        initializedNode: function( nodeID, childID, childExtendsID, childImplementsIDs, 
-            childSource, childType, childIndex, childName ) {
+        deleteConnection: function(nodeID){
 
+             // debugger;
 
-            if ( childExtendsID === undefined )
-                return;
+            //if ( this.kernel.find( nodeID, "parent::element(*,'http://vwf.example.com/clients.vwf')" ).length > 0 ) {
+                //if ( this.kernel.find( nodeID ).length > 0 ) {
+                    var moniker = nodeID.slice(-20);//this.kernel.name( nodeID );
+                    var client = undefined;
+    
+                    if ( moniker == this.kernel.moniker() ) {
+                        
+                        // this is the client that has left the converstaion
+                        // go through the peerConnections and close the 
+                        // all current connections
+                        var peer, peerMoniker;
+                        for ( var peerID in this.state.clients ) {
+                            peer = this.state.clients[ peerID ];
+                            peerMoniker = appMoniker.call( this, peer.name )
+                            if ( peerMoniker != this.kernel.moniker() ) {
+                                peer.connection && peer.connection.disconnect();
+                                let peername = 'avatar-' + peerMoniker;
+                                deletePeerConnection.call( this, peername);
+                            }
+                        }
+    
+                    } else {
+    
+                        // this is a client who has has a peer leave the converstaion
+                        // remove that client, and the 
+                        client = findClientByMoniker.call( this, moniker );
+                        if ( client ) {
+                            client.connection && client.connection.disconnect();
+    
+                            //removeClient.call( this, client );
+                            //delete this.state.clients[ client ]
+                        }
+    
+                         
+                    }
+
+        },
+
+
+        stopWebRTC: function(nodeID){
+
+            if( this.local.stream ){
+
+                
+                var tracks =  this.local.stream.getTracks();
+                tracks.forEach(function(track) {
+                    track.stop();
+                  });
+                  this.local.stream = undefined;
+
+                let vidui = document.querySelector('#webrtcvideo');
+                if (vidui) vidui.removeAttribute('checked');
+
+                let micui = document.querySelector('#webrtcaudio');
+                if (micui) micui.removeAttribute('checked');
+
+                this.deleteConnection(nodeID);
+
+            }
+
+        },
+        startWebRTC: function(childID) {
 
             var client = this.state.clients[ childID ];
 
@@ -163,6 +219,17 @@ define( [ "module", "vwf/view", "vwf/utility", "vwf/utility/color", "jquery" ],
                     }
                 }
             }            
+
+        },
+
+        initializedNode: function( nodeID, childID, childExtendsID, childImplementsIDs, 
+            childSource, childType, childIndex, childName ) {
+
+
+            if ( childExtendsID === undefined )
+                return;
+
+            
         },
 
         deletedNode: function( nodeID ) {
@@ -184,8 +251,9 @@ define( [ "module", "vwf/view", "vwf/utility", "vwf/utility/color", "jquery" ],
                     for ( var peerID in this.state.clients ) {
                         peer = this.state.clients[ peerID ];
                         peerMoniker = appMoniker.call( this, peer.name )
-                        if ( peerMoniker != this.kernel.moniker ) {
+                        if ( peerMoniker != this.kernel.moniker() ) {
                             peer.connection && peer.connection.disconnect();
+                          
                         }
                     }
 
@@ -291,19 +359,61 @@ define( [ "module", "vwf/view", "vwf/utility", "vwf/utility/color", "jquery" ],
                 
                 case "webrtcTurnOnOff":
                     if ( this.kernel.moniker() == this.kernel.client() ) {
+                        console.log("WEBRTC turn on/off")
                         methodValue = turnOnOffTracks.call( this, methodParameters );
                     }
                     break;    
 
+                case "webrtcMuteAudio":
+                    if ( this.kernel.moniker() == this.kernel.client() ) {
+                        methodValue = muteAudio.call( this, methodParameters );
+                    }
+                    break;  
+
+                case "webrtcMuteVideo":
+                    if ( this.kernel.moniker() == this.kernel.client() ) {
+                        methodValue = this.muteVideo.call( this, methodParameters );
+                    }
+                    break; 
+
             }
         },       
 
         firedEvent: function( nodeID, eventName, eventParameters ) {
         },
 
+        muteVideo: function ( mute ) {
+            let str = this.local.stream;
+            if ( str ) {
+              
+                var tracks = str.getVideoTracks();
+    
+                tracks.forEach(function(track) {
+                    track.enabled = mute[0];
+                  });
+            }
+        },
+
+        muteAudio: function ( mute ) {
+            let str = this.local.stream;
+            if ( str ) {
+              
+                var tracks = str.getAudioTracks();
+    
+                tracks.forEach(function(track) {
+                    track.enabled = mute[0];
+                  });
+            }
+        }
+
+        
+
+       
+
+
     } );
  
-    function createVideoElementAsAsset(id) {
+    function createVideoElementAsAsset(id, local) {
         
           var video = document.querySelector('#' + id);
         
@@ -318,7 +428,8 @@ define( [ "module", "vwf/view", "vwf/utility", "vwf/utility/color", "jquery" ],
           video.setAttribute("controls", true);
           video.setAttribute("width", 640);
           video.setAttribute("height", 480);
-          //video.setAttribute("muted", true);
+
+          if (local) video.setAttribute("muted", true);
         
           var assets = document.querySelector('a-assets');
         
@@ -363,9 +474,9 @@ define( [ "module", "vwf/view", "vwf/utility", "vwf/utility/color", "jquery" ],
         return displayVideo.call( this, id, stream, this.local.url, name, id, true);
     }
 
-    function displayVideo( id, stream, url, name, destMoniker, muted) {
+    function displayVideo( id, stream, url, name, destMoniker, local) {
         
-        let video = createVideoElementAsAsset(name);
+        let video = createVideoElementAsAsset(name, local);
         //video.setAttribute('src', url);
         video.srcObject = stream;
 
@@ -389,7 +500,7 @@ define( [ "module", "vwf/view", "vwf/utility", "vwf/utility/color", "jquery" ],
     }
 
     function displayRemote( id, stream, url, name, destMoniker, color ) {
-        return displayVideo.call( this, id, stream, url, name, destMoniker, false, color );
+        return displayVideo.call( this, id, stream, url, name, destMoniker, false );
     }
 
     function capture( media ) {
@@ -415,6 +526,22 @@ define( [ "module", "vwf/view", "vwf/utility", "vwf/utility/color", "jquery" ],
                 //     videoTracks[0].enabled = true;
                 // }
 
+                let webRTCGUI = document.querySelector('#webrtcswitch');
+                if (webRTCGUI) webRTCGUI.setAttribute("checked", true);
+
+                let videoTracks = stream.getVideoTracks();
+                let vstatus =  videoTracks[0].enabled;
+
+                let vidui = document.querySelector('#webrtcvideo');
+            if (vidui) vidui.setAttribute("checked", vstatus);
+
+                let audioTracks = stream.getAudioTracks();
+                let astatus =  audioTracks[0].enabled;
+
+                let micui = document.querySelector('#webrtcaudio');
+                if (micui) micui.setAttribute("checked", astatus);
+
+
                self.local.url = "url" //URL.createObjectURL( stream );
                 self.local.stream = stream;
 
@@ -484,7 +611,19 @@ define( [ "module", "vwf/view", "vwf/utility", "vwf/utility/color", "jquery" ],
         }
     };
 
+    function muteAudio( mute ) {
+        let str = this.local.stream;
+        if ( str ) {
+            var audioTracks = str.getAudioTracks();
+
+            audioTracks.forEach(function(track) {
+                track.enabled = mute[0];
+              });
+
+        }
+    };
    
+    
 
     function setMute( mute ) {
         if ( this.local.stream && this.local.stream.audioTracks && this.local.stream.audioTracks.length > 0 ) {

+ 67 - 0
support/client/lib/vwf/view/widgets.js

@@ -0,0 +1,67 @@
+'use strict';
+
+define(function () {
+
+
+    /*
+     * Cell widgets 
+     */
+    class Widgets {
+        constructor() {
+          console.log("widget constructor")
+        }
+
+        get divider(){
+            return {
+                $cell: true,
+                $type: "hr",
+                class: "mdc-list-divider",
+            }
+        }
+
+        headerH3(headertype, label, cssclass) {
+
+            return  {
+                $cell: true,
+                $type: headertype,
+                class: cssclass,
+                $text: label
+            }
+
+        }
+
+        switch(obj) {
+
+            return   {
+                $cell: true,
+                $type: "div",
+                class: "mdc-switch",
+                $components: [
+                    {
+                        $type: "input",
+                        type: "checkbox",
+                        class: "mdc-switch__native-control",
+                        id: obj.id,
+                        $init: obj.init,
+                        //id: "basic-switch",
+                        onchange: obj.onchange
+                    },
+                    {
+                        $type: "div",
+                        class: "mdc-switch__background",
+                        $components: [
+                            {
+                                $type: "div",
+                                class: "mdc-switch__knob"
+                            }
+                        ]
+                    }
+                ]
+            }
+
+        }
+
+      }
+    return new Widgets;
+
+})

+ 8 - 0
support/proxy/vwf.example.com/aframe/avatar.js

@@ -324,6 +324,14 @@ this.webrtcTurnOnOff = function(val){
     console.log('WEBRTC is ', val);
 }
 
+this.webrtcMuteAudio = function(val){
+    console.log('WEBRTC Audio is ', val);
+}
+
+this.webrtcMuteVideo = function(val){
+    console.log('WEBRTC Video is ', val);
+}
+
 this.initialize = function() {
    // this.future(0).updateAvatar();
 };

+ 6 - 0
support/proxy/vwf.example.com/aframe/avatar.vwf.yaml

@@ -34,5 +34,11 @@ methods:
     webrtcTurnOnOff:
         parameters:
             - val
+    webrtcMuteAudio:
+        parameters:
+            - val
+    webrtcMuteVideo:
+        parameters:
+            - val
 scripts:
 - source: "http://vwf.example.com/aframe/avatar.js"