walkor 12 jaren geleden
bovenliggende
commit
a2827fd485
3 gewijzigde bestanden met toevoegingen van 19 en 21 verwijderingen
  1. 2 3
      Applications/Event.php
  2. 7 17
      Workers/GameGateway.php
  3. 10 1
      Workers/GameWorker.php

+ 2 - 3
Applications/System.php → Applications/Event.php

@@ -5,11 +5,10 @@
  * @author walkor <worker-man@qq.com>
  * 
  */
-require_once WORKERMAN_ROOT_DIR . 'Protocols/Buffer.php';
 
-class System
+class Event
 {
-   public static function onConnection($address, $socket_id, $sid)
+   public static function onConnect($address, $socket_id, $sid)
    {
        // 检查sid是否合法
        $uid = self::getUidBySid();

+ 7 - 17
Workers/GameGateway.php

@@ -27,8 +27,6 @@ class GameGateway extends WORKERMAN\Core\SocketWorker
     // 当前处理的包数据
     protected $data = array();
     
-    protected $onConnectBuffer = '';
-    protected $onCloseBuffer = ''; 
     public function start()
     {
         // 安装信号处理函数
@@ -64,9 +62,6 @@ class GameGateway extends WORKERMAN\Core\SocketWorker
         // 添加读udp事件
         $this->event->add($this->innerMainSocket,  WORKERMAN\Core\Events\BaseEvent::EV_READ, array($this, 'recvUdp'));
         
-        // 初始化onConnetct / onclose buffer
-        $this->initOnBuffer();
-        
         // 初始化到worker的通信地址
         $this->initWorkerAddresses();
         
@@ -118,17 +113,6 @@ class GameGateway extends WORKERMAN\Core\SocketWorker
         $this->innerDealProcess($data);
     }
     
-    protected function initOnBuffer()
-    {
-        $buffer = new GameBuffer();
-        $buffer->header['cmd'] = GameBuffer::CMD_SYSTEM;
-        $buffer->header['sub_cmd'] = GameBuffer::SCMD_ON_CONNECT;
-        $buffer->body = '';
-        $this->onConnectBuffer = $buffer->getBuffer();
-        $buffer->header['sub_cmd'] = GameBuffer::SCMD_ON_CLOSE;
-        $this->onCloseBuffer = $buffer->getBuffer();
-    }
-    
     protected function initWorkerAddresses()
     {
         $this->workerAddresses = WORKERMAN\Core\Lib\Config::get('workers.'.$this->workerName.'.game_worker');
@@ -232,7 +216,13 @@ class GameGateway extends WORKERMAN\Core\SocketWorker
                 return;
             }
             // 发送onconnet事件包,包体是sid
-            $this->sendToWorker($this->onConnectBuffer.$this->data['body']);
+            $on_buffer = new GameBuffer();
+            $on_buffer->header['cmd'] = GameBuffer::CMD_SYSTEM;
+            $on_buffer->head['sub_cmd'] = GameBuffer::SCMD_ON_CONNECT;
+            // 用from_uid来临时存储socketid
+            $on_buffer->head['from_uid'] = $this->currentDealFd;
+            $on_buffer->body = $this->data['body'];
+            $this->sendToWorker($on_buffer->getBuffer());
             return;
         }
         

+ 10 - 1
Workers/GameWorker.php

@@ -10,7 +10,7 @@
  */
 require_once WORKERMAN_ROOT_DIR . 'Core/SocketWorker.php';
 require_once WORKERMAN_ROOT_DIR . 'Applications/GameBuffer.php';
-require_once WORKERMAN_ROOT_DIR . 'Applications/Store.php';
+require_once WORKERMAN_ROOT_DIR . 'Applications/Event.php';
 
 class GameWorker extends WORKERMAN\Core\SocketWorker
 {
@@ -31,6 +31,15 @@ class GameWorker extends WORKERMAN\Core\SocketWorker
         $method = GameBuffer::$scmdMap[$this->data['sub_cmd']];
         if(!method_exists($class, $method))
         {
+            if($class == 'System')
+            {
+                switch($method)
+                {
+                    case GameBuffer::SCMD_ON_CONNECT:
+                        call_user_func_array(array('Event', 'onConnect'), array($this->currentClientAddress, $this->data['from_uid'], $this->data['body']));
+                        return; 
+                }
+            }
             $this->notice("cmd err $class::$method not exists");
             return;
         }