diff --git a/README.md b/README.md index 207cfb5..b64bb6b 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,10 @@ -Yii Node Socket +####Disclaimer +This fork is under development to make it work with Yii2. As of now, i haven't checked the subscription feature, +Many parts of code have been rewritten and tested only in a project, so i guess this doesn't work *not out of the box* . + +Be warned. + +Yii2 Node Socket ================= Connect php, javascript, nodejs in one Yii application. diff --git a/composer.json b/composer.json index d71fd80..8a8c3b7 100644 --- a/composer.json +++ b/composer.json @@ -1,15 +1,15 @@ { - "name": "oncesk/yii-node-socket", - "description": "Реализует связь между php и client javascript по средству сокет соединения.", - "minimum-stability": "stable", + "name": "ratacibernetica/yii2-node-socket", + "description": "This is a fork of oncesk/yii-node-socket", + "minimum-stability": "dev", "authors": [ - { - "name": "Alexey Panasik", - "email": "unnfly@gmail.com" + { + "name": "Martin Roldan Araujo", + "email": "yo@ratacibernetica.com" } ], "require": { - "oncesk/elephant.io": "*" + "oncesk/elephant.io": "v2.0.2" }, "autoload": { "psr-4": { diff --git a/lib/js/client/client.template.js b/lib/js/client/client.template.js index 6527420..96bb8b1 100644 --- a/lib/js/client/client.template.js +++ b/lib/js/client/client.template.js @@ -321,6 +321,10 @@ $this.remove(); return; break; + case 'play': + $this[0].play(); + return; + break; case 'parents': case 'find': @@ -644,7 +648,7 @@ 'type' : 'global' }); - socket = io.connect('http://host;?>:port;?>/client'); + socket = io.connect('//host;?>:port;?>/client',{secure: true, rejectUnauthorized: false}); var systemEventsHandlerBinder = new SystemEventsHandlerBinder(this); diff --git a/lib/js/server/server.js b/lib/js/server/server.js index 2466196..15283f5 100644 --- a/lib/js/server/server.js +++ b/lib/js/server/server.js @@ -1,6 +1,16 @@ var express = require('express'); + +fs = require('fs'); + +var options = { + key: fs.readFileSync('/var/www/html/hola-trabajo-web/vendor/ratacibernetica/yii2-node-socket/lib/js/server/ssl/server.key'), + cert: fs.readFileSync('/var/www/html/hola-trabajo-web/vendor/ratacibernetica/yii2-node-socket/lib/js/server/ssl/server.crt'), + //ca: fs.readFileSync('ssl/ca.crt') +}; var app = express(); -var server = require('http').createServer(app) + + +var server = require('https').createServer(options,app); var io = require('socket.io').listen(server); var cookie = require('cookie'); var serverConfiguration = require('./server.config.js'); @@ -125,6 +135,8 @@ io.of('/server').authorization(function (data, accept) { data.sid = data.cookie.PHPSESSID; var found = false; for (var i in serverConfiguration.allowedServers) { + console.log(i); + console.log(serverConfiguration); if (serverConfiguration.allowedServers[i] == data.address.address) { found = true; break; @@ -178,6 +190,7 @@ io.of('/server').authorization(function (data, accept) { }); } else { accept('INVALID SERVER: server host ' + data.address.address + ' not allowed'); + console.log(serverConfiguration.allowedServers); } } else { accept('PHPSESSID is undefined', false); @@ -196,4 +209,4 @@ io.of('/server').authorization(function (data, accept) { eventManager.server.bind(socket); }); -componentManager.initCompleted(); \ No newline at end of file +componentManager.initCompleted(); diff --git a/lib/php/Autoload.php b/lib/php/Autoload.php index bb43dc3..0e3812e 100644 --- a/lib/php/Autoload.php +++ b/lib/php/Autoload.php @@ -5,7 +5,8 @@ class Autoload { public static function register($nodeSocketDirectory) { $loader = new Autoload($nodeSocketDirectory); - spl_autoload_register(array($loader, 'autoload')); + $res = spl_autoload_register(array($loader, 'autoload')); + $res; } private $_nodeSocketDirectory; diff --git a/lib/php/NodeSocket.php b/lib/php/NodeSocket.php index 1474216..c7b659b 100644 --- a/lib/php/NodeSocket.php +++ b/lib/php/NodeSocket.php @@ -5,8 +5,9 @@ use yii\base\Component; use YiiNodeSocket\Assets\NodeSocketAssets; -require_once 'frames/IFrameFactory.php'; -require_once 'frames/FrameFactory.php'; +/** + * @method YiiNodeSocket\Frames\IFrameFactory createEventFrame() + */ class NodeSocket extends Component { @@ -44,7 +45,7 @@ class NodeSocket extends Component { * * @var int */ - public $port = 3001; + public $port = 8443; /** * Can be string, every domain|ip separated by a comma @@ -77,7 +78,7 @@ class NodeSocket extends Component { * * @var bool */ - public $checkClientOrigin = true; + public $checkClientOrigin = false; /** * @var string @@ -87,7 +88,7 @@ class NodeSocket extends Component { /** * @var int timeout for handshaking in miliseconds */ - public $handshakeTimeout = 2000; + public $handshakeTimeout = 50000; /** * @var array @@ -123,7 +124,7 @@ public function init() { // spl_autoload_register(array('YiiBase','autoload')); if (function_exists('__autoload')) { // Be polite and ensure that userland autoload gets retained - spl_autoload_register('__autoload'); + $res =spl_autoload_register('__autoload'); } $this->_frameFactory = new \YiiNodeSocket\Frames\FrameFactory($this); $this->_db = new \YiiNodeSocket\Components\Db($this); diff --git a/lib/php/assets/NodeSocketAssets.php b/lib/php/assets/NodeSocketAssets.php index d4ebeda..df36119 100644 --- a/lib/php/assets/NodeSocketAssets.php +++ b/lib/php/assets/NodeSocketAssets.php @@ -32,7 +32,7 @@ class NodeSocketAssets extends AssetBundle public function init() { $this->js[] = sprintf( - "http://%s:%d%s", Yii::$app->nodeSocket->host, Yii::$app->nodeSocket->port, '/socket.io/socket.io.js' + "//%s:%d%s", Yii::$app->nodeSocket->host, Yii::$app->nodeSocket->port, '/socket.io/socket.io.js' ); $this->js[] = 'client/client.js'; } diff --git a/lib/php/behaviors/ArBehavior.php b/lib/php/behaviors/ArBehavior.php index fc30ee8..0bfef53 100644 --- a/lib/php/behaviors/ArBehavior.php +++ b/lib/php/behaviors/ArBehavior.php @@ -6,7 +6,7 @@ /** * Class ArBehavior * - * @method \CActiveRecord getOwner() + * * @package YiiNodeSocket\Behavior */ @@ -26,19 +26,23 @@ abstract class ArBehavior extends AttributeBehavior { * @throws \CException */ public function getNodeSocketComponent() { - if (!\Yii::app()->hasComponent($this->componentName)) { + if (!\Yii::$app->components($this->componentName)) { throw new \CException('Node socket component not found with the name `' . $this->componentName . "`"); } - return \Yii::app()->getComponent($this->componentName); + return \Yii::$app->getComponent($this->componentName); } + + public function getOwner(){ + return $this->owner; + } /** * @param ArEvent $event */ protected function triggerModelEvent(ArEvent $event) { $owner = $this->getOwner(); - if ($owner->hasEvent($event->name)) { - $owner->raiseEvent($event->name, $event); + if ($owner->hasEventHandlers($event->name)) { + $owner->trigger($event->name, $event); } } -} \ No newline at end of file +} diff --git a/lib/php/behaviors/ArChannel.php b/lib/php/behaviors/ArChannel.php index 117ba56..df8979f 100644 --- a/lib/php/behaviors/ArChannel.php +++ b/lib/php/behaviors/ArChannel.php @@ -91,7 +91,8 @@ public function createChannel() { $this->attributesToChannel($this->_channel); $this->_channel->name = $this->getChannelName(); - $event = new ArEvent($this); + $event = new ArEvent(); + $event->sender = $this; $event->name = 'onChannelSave'; $event->error = !$this->_channel->save(); $this->triggerModelEvent($event); @@ -101,7 +102,8 @@ public function updateChannel() { if ($channel = $this->getChannel()) { $this->attributesToChannel($channel); - $event = new ArEvent($this); + $event = new ArEvent(); + $event->sender = $this; $event->name = 'onChannelSave'; $event->error = !$channel->save(); $this->triggerModelEvent($event); @@ -124,9 +126,10 @@ public function getChannel() { if (isset($this->_channel)) { return $this->_channel; } - $this->_channel = Channel::model()->findByAttributes(array( + $channel = Channel::model()->findByAttributes(array( 'name' => $this->getChannelName() )); + $this->_channel = $channel; return $this->_channel; } @@ -180,8 +183,8 @@ protected function attributesToChannel(Channel $channel) { protected function getChannelName() { $pk = $this->getOwner()->getPrimaryKey(); if (is_array($pk)) { - $pk = md5(\CJSON::encode($pk)); + $pk = md5(\yii\helpers\Json::encode($pk)); } - return get_class($this->getOwner()) . ':' . $pk; + return $pk;//get_class($this->getOwner()) . ':' . $pk; } } \ No newline at end of file diff --git a/lib/php/components/ArEvent.php b/lib/php/components/ArEvent.php index 64758cf..df2df72 100644 --- a/lib/php/components/ArEvent.php +++ b/lib/php/components/ArEvent.php @@ -1,8 +1,8 @@ createAction('play'); + return $this; + } /** * @param string $class @@ -176,6 +186,14 @@ public function remove() { $this->createAction('remove'); return $this; } + + /** + * @return JQuerySelector + */ + public function get() { + $this->createAction('get'); + return $this; + } /** * @return JQuerySelector diff --git a/lib/php/frames/AFrame.php b/lib/php/frames/AFrame.php index 27da27e..87cd092 100644 --- a/lib/php/frames/AFrame.php +++ b/lib/php/frames/AFrame.php @@ -159,6 +159,7 @@ protected function emit() { $client = $this->createClient(); $client->origin = $this->_nodeSocket->getOrigin(); $client->sendCookie = true; +// $client->setSslCert('/var/www/html/hola-trabajo-web/vendor/ratacibernetica/yii2-node-socket/lib/js/server/ssl/server.crt'); $client->cookie = implode('; ', array( 'PHPSESSID=' . \Yii::$app->session->id, 'expires=' . (time() + $this->_nodeSocket->cookieLifeTime) @@ -179,7 +180,7 @@ protected function emit() { */ protected function createClient() { return new \ElephantIO\Client( - sprintf('http://%s:%s', $this->_nodeSocket->host, $this->_nodeSocket->port), + sprintf('https://%s:%s', $this->_nodeSocket->host, $this->_nodeSocket->port), 'socket.io', 1, false @@ -313,4 +314,4 @@ public function offsetSet($offset, $value) { public function offsetUnset($offset) { unset($this->_container['data'][$offset]); } -} \ No newline at end of file +} diff --git a/lib/php/frames/FrameFactory.php b/lib/php/frames/FrameFactory.php index ef23361..cd51327 100644 --- a/lib/php/frames/FrameFactory.php +++ b/lib/php/frames/FrameFactory.php @@ -1,15 +1,15 @@ _nodeSocket); + $evt = new Event($this->_nodeSocket); + return $evt; } /** diff --git a/lib/php/models/AModel.php b/lib/php/models/AModel.php index 38b9e19..d55fbf6 100644 --- a/lib/php/models/AModel.php +++ b/lib/php/models/AModel.php @@ -7,7 +7,7 @@ * Class AModel * @package YiiNodeSocket\Models */ -abstract class AModel extends \CModel{ +abstract class AModel extends \yii\base\Model{ /** * @var string @@ -46,7 +46,9 @@ public function __construct($scenario = 'insert') { $this->_isNewRecord = ($scenario == 'insert'); $this->init(); - $this->afterConstruct(); + +// $this->afterConstruct(); + } /** @@ -70,13 +72,13 @@ final public function load(array $attributes) { } } - protected function init() {} + public function init() {} /** * @return \NodeSocket */ public function getNodeSocket() { - return \Yii::app()->nodeSocket; + return \Yii::$app->nodeSocket; } /** @@ -94,31 +96,31 @@ public function getIsNewRecord() { } /** - * @param \CModelEvent $event + * @param \yii\base\ModelEvent $event */ - public function onBeforeSave(\CModelEvent $event) { - $this->raiseEvent('onBeforeSave', $event); + public function onBeforeSave(\yii\base\ModelEvent $event) { + $this->trigger('onBeforeSave', $event); } /** - * @param \CModelEvent $event + * @param \yii\base\ModelEvent $event */ - public function onAfterSave(\CModelEvent $event) { - $this->raiseEvent('onAfterSave', $event); + public function onAfterSave(\yii\base\ModelEvent $event) { + $this->trigger('onAfterSave', $event); } /** - * @param \CModelEvent $event + * @param \yii\base\ModelEvent $event */ - public function onBeforeDelete(\CModelEvent $event) { - $this->raiseEvent('onBeforeDelete', $event); + public function onBeforeDelete(\yii\base\ModelEvent $event) { + $this->trigger('onBeforeDelete', $event); } /** - * @param \CModelEvent $event + * @param \yii\base\ModelEvent $event */ - public function onAfterDelete(\CModelEvent $event) { - $this->raiseEvent('onAfterDelete', $event); + public function onAfterDelete(\yii\base\ModelEvent $event) { + $this->trigger('onAfterDelete', $event); } /** @@ -126,7 +128,7 @@ public function onAfterDelete(\CModelEvent $event) { */ public function rules() { return array( - array('id', 'length', 'allowEmpty' => true), + array('id', 'string', 'skipOnEmpty' => true), array('id', 'safe') ); } @@ -217,13 +219,15 @@ public function attributeNames() { } protected function beforeSave() { - $event = new \CModelEvent($this); + $event = new \yii\base\ModelEvent(); + $event->sender = $this; $this->onBeforeSave($event); return $event->isValid; } protected function afterSave() { - $modelEvent = new \CModelEvent($this); + $modelEvent = new \yii\base\ModelEvent(); + $modelEvent->sender = $this; $this->onAfterSave($modelEvent); if ($modelEvent->isValid) { $event = $this->getNodeSocket()->getFrameFactory()->createChannelEventFrame(); @@ -235,13 +239,15 @@ protected function afterSave() { } protected function beforeDelete() { - $event = new \CModelEvent($this); + $event = new \yii\base\ModelEvent(); + $event->sender = $this; $this->onBeforeDelete($event); return $event->isValid; } protected function afterDelete() { - $modelEvent = new \CModelEvent($this); + $modelEvent = new \yii\base\ModelEvent(); + $modelEvent->sender = $this; $this->onAfterDelete($modelEvent); if ($modelEvent->isValid) { $event = $this->getNodeSocket()->getFrameFactory()->createChannelEventFrame(); @@ -257,4 +263,4 @@ protected function beforeLoad(array $attributes) { } protected function afterLoad() {} -} \ No newline at end of file +} diff --git a/lib/php/models/Channel.php b/lib/php/models/Channel.php index 6af8a26..e81c83b 100644 --- a/lib/php/models/Channel.php +++ b/lib/php/models/Channel.php @@ -61,19 +61,19 @@ public function getSourceList() { self::SOURCE_PHP_OR_JAVASCRIPT ); } - + /** * @return array */ public function rules() { return array_merge(parent::rules(), array( - array('name, is_authentication_required, subscriber_source, event_source', 'required'), + array(['name', 'is_authentication_required', 'subscriber_source', 'event_source'], 'required'), array('name', 'validateUniqueName'), - array('name', 'length', 'min' => 2), - array('properties', 'length', 'max' => 65000, 'allowEmpty' => true), - array('subscriber_source, event_source', 'numerical', 'integerOnly' => true), - array('subscriber_source, event_source', 'in', 'range' => $this->getSourceList()), - array('allowed_roles', 'length', 'min' => 1, 'allowEmpty' => true), + array('name', 'string', 'min' => 2), + array('properties', 'string', 'max' => 65000, 'skipOnEmpty' => true), + array(['subscriber_source', 'event_source'], 'integer'), + array(['subscriber_source', 'event_source'], 'in', 'range' => $this->getSourceList()), + array('allowed_roles', 'string', 'min' => 1, 'skipOnEmpty' => true), array('create_date', 'safe') )); } @@ -158,9 +158,9 @@ public function validateUniqueName() { /** * @return bool */ - protected function beforeValidate() { + public function beforeValidate() { if (is_array($this->properties) || is_object($this->properties)) { - $this->properties = \CJSON::encode($this->properties); + $this->properties = \yii\helpers\Json::encode($this->properties); } else if (!is_string($this->properties)) { $this->properties = ''; } @@ -184,7 +184,7 @@ protected function beforeSave() { protected function afterLoad() { if ($this->properties) { - $this->properties = \CJSON::decode($this->properties); + $this->properties = \yii\helpers\Json::decode($this->properties); } } -} \ No newline at end of file +}