80 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
| <?php
 | |
| namespace Ratchet\Resource;
 | |
| use Ratchet\SocketInterface;
 | |
| 
 | |
| /**
 | |
|  * @todo Consider if this belongs under Application
 | |
|  * @todo Construct should have StorageInterface, currently all is memory, should be different ones
 | |
|  *       That will allow a queue system, communication between threaded connections
 | |
|  */
 | |
| class Connection {
 | |
|     protected $_data = array();
 | |
| 
 | |
|     /**
 | |
|      * @var Ratchet\SocketInterface
 | |
|      */
 | |
|     protected $_socket;
 | |
| 
 | |
|     public function __construct(SocketInterface $socket) {
 | |
|         $this->_socket = $socket;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @return int
 | |
|      */
 | |
|     public function getID() {
 | |
|         return (int)(string)$this->_socket;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * This is here because I couldn't figure out a better/easier way to tie a connection and socket together for the server and commands
 | |
|      * Anyway, if you're here, it's not recommended you use this/directly interact with the socket in your App...
 | |
|      * The command pattern (which is fully flexible, see Runtime) is the safest, desired way to interact with the socket(s).
 | |
|      * @return Ratchet\SocketInterface
 | |
|      * @todo Figure out a better way to match Socket/Connection in Application and Commands
 | |
|      */
 | |
|     public function getSocket() {
 | |
|         return $this->_socket;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Set an attribute to the connection
 | |
|      * @param mixed
 | |
|      * @param mixed
 | |
|      */
 | |
|     public function __set($name, $value) {
 | |
|         $this->_data[$name] = $value;
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Get a previously set attribute bound to the connection
 | |
|      * @return mixed
 | |
|      * @throws \InvalidArgumentException
 | |
|      */
 | |
|     public function __get($name) {
 | |
|         if (!$this->__isset($name)) {
 | |
|             throw new \InvalidArgumentException("Attribute '{$name}' not found in Connection {$this->getID()}");
 | |
|         }
 | |
| 
 | |
|         if (is_callable($this->_data[$name])) {
 | |
|             return $this->_data[$name]($this);
 | |
|         } else {
 | |
|             return $this->_data[$name];
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param mixed
 | |
|      * @return bool
 | |
|      */
 | |
|     public function __isset($name) {
 | |
|         return isset($this->_data[$name]);
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * @param mixed
 | |
|      */
 | |
|     public function __unset($name) {
 | |
|         unset($this->_data[$name]);
 | |
|     }
 | |
| } | 
