ソースを参照

add shake_bonus

stanley-king 7 年 前
コミット
daa641dd06

+ 6 - 0
data/model/room.model.php

@@ -35,4 +35,10 @@ class roomModel extends Model
     {
         return $this->table('room')->field('*')->where(['room_id' => $roomid])->limit(1)->find();
     }
+
+    public function getRoomByType($room_type,$user)
+    {
+        $room = $this->table('room')->field('*')->where(['type' => $room_type, 'room_creator' => $user])->limit(1)->find();
+        return $room;
+    }
 }

+ 44 - 18
data/resource/mobile/comm/websocket.js

@@ -1,11 +1,13 @@
-var WebsocketConnect = function(addr,auto_connect,auto_join,callbacks,room_msg,msg_callback){
+var WebsocketConnect = function(wshost,fAutoConnect,fAutojoin,callbacks,room_msg,msg_handler)
+{
 
     var socket= null;
-    var fauto_connect = auto_connect;
-    var fauto_join = auto_join;
+    var fauto_connect = fAutoConnect;
+    var fauto_join = fAutojoin;
     var is_connect = false;
+
     var webSocket_callbacks = {
-        onopen: callbacks.onOpen,
+        onopen:  callbacks.onOpen,
         onerror: callbacks.onError,
         onclose: callbacks.onClose
     };
@@ -15,7 +17,8 @@ var WebsocketConnect = function(addr,auto_connect,auto_join,callbacks,room_msg,m
         roomkey : room_msg.roomkey
     };
 
-    var Json_parse = function(json){
+    var Json_parse = function(json)
+    {
         var datas = json;
         var get_me = function(){
             var me_id = datas.content.me;
@@ -26,6 +29,7 @@ var WebsocketConnect = function(addr,auto_connect,auto_join,callbacks,room_msg,m
                 }
             }
         };
+
         var get_all = function(){
             return datas.content.users;
         };
@@ -37,6 +41,7 @@ var WebsocketConnect = function(addr,auto_connect,auto_join,callbacks,room_msg,m
         var get_from = function() {
             return datas.content.from;
         };
+
         return {
             get_me:get_me,
             get_all:get_all,
@@ -57,6 +62,19 @@ var WebsocketConnect = function(addr,auto_connect,auto_join,callbacks,room_msg,m
 
         socket.send(JSON.stringify(jsonobject));
     };
+
+    var shake_bonus = function(val){
+        var jsonobject = {
+            op:"shake",
+            room:room_msgs.room,
+            room_key:room_msgs.roomkey,
+            type:"shake_bonus",
+            content:val
+        };
+
+        socket.send(JSON.stringify(jsonobject));
+    };
+
     var login = function login()
     {
         var jsonobject = {
@@ -76,14 +94,15 @@ var WebsocketConnect = function(addr,auto_connect,auto_join,callbacks,room_msg,m
             return;
         }
         if(window.WebSocket) {
-            socket = new WebSocket(addr);
+            socket = new WebSocket(wshost);
         }
         else {
             console.log('您的设备不支持WebSocket');
             return;
         }
 
-        socket.onopen = function(){
+        socket.onopen = function()
+        {
             webSocket_callbacks.onopen();
             if(fauto_join && is_connect) {
                 login();
@@ -92,24 +111,29 @@ var WebsocketConnect = function(addr,auto_connect,auto_join,callbacks,room_msg,m
         socket.onerror = function(){
             webSocket_callbacks.onerror();
         };
-        socket.onmessage = function(msg){
+
+        socket.onmessage = function(msg)
+        {
             var datasJsonParse = JSON.parse(msg.data);
-            var msg_type = datasJsonParse.op;
-            if(msg_type == 'ret_join') {
-                if( msg_callback.room_info) {
-                    msg_callback.room_info(datasJsonParse);
+            var op = datasJsonParse.op;
+            if(op == 'ret_join') {
+                if( msg_handler.room_info) {
+                    msg_handler.room_info(datasJsonParse);
                 }
             }
-            if(msg_type == 'join') {
-                if( msg_callback.join) {
-                    msg_callback.join(datasJsonParse)
+            else if(op == 'join') {
+                if( msg_handler.join) {
+                    msg_handler.join(datasJsonParse)
                 }
             }
-            if(msg_type == 'message') {
-                if(msg_callback.message) {
-                    msg_callback.message(datasJsonParse);
+            else if(op == 'message') {
+                if(msg_handler.message) {
+                    msg_handler.message(datasJsonParse);
                 }
             }
+            else {
+
+            }
         };
         socket.onclose = function(){
             webSocket_callbacks.onclose();
@@ -119,9 +143,11 @@ var WebsocketConnect = function(addr,auto_connect,auto_join,callbacks,room_msg,m
     if(fauto_connect) {
         connect();
     }
+
     return {
         connect:connect,
         send:Send,
+        shake_bonus:shake_bonus,
         login:login,
         close:Close,
         Json_parse:Json_parse

+ 1 - 1
helper/activity/optional_goods.php

@@ -407,4 +407,4 @@ class optional_goods
             return true;
         }
     }
-}
+}

+ 32 - 0
helper/room/factory.php

@@ -27,6 +27,9 @@ class factory
         elseif($type == proto_type::act_group) {
             return $this->create_group($params);
         }
+        elseif($type == proto_type::act_shake_bonus) {
+            return $this->create_shake_bonus($params);
+        }
         else {
             return false;
         }
@@ -46,6 +49,9 @@ class factory
         elseif ($rinfo->type() == proto_type::room_group) {
             return new group_room($room_params,$participants);
         }
+        elseif($rinfo->type() == proto_type::room_shake_bonus) {
+            return new shake_room($room_params,$participants);
+        }
         elseif ($rinfo->type() == proto_type::room_chatwo) {
         }
         else {
@@ -76,6 +82,32 @@ class factory
         }
     }
 
+    private function create_shake_bonus($params)
+    {
+        try
+        {
+            $user = intval($params['creator']);
+            if($user <= 0) return false;
+            $mod_room = Model('room');
+            $room = $mod_room->getRoomByType(proto_type::room_shake_bonus,$user);
+            if(empty($room))
+            {
+                $creator = new member_info($user);
+                $room_type = proto_type::room_shake_bonus;
+                $room_id = $this->create_room($room_type,'shake_bonus',$creator);
+            }
+            else {
+                $room_id = intval($room['room_id']);
+            }
+
+            return ['room' => $room_id,'creator' => $user];
+        }
+        catch (Exception $ex) {
+            Log::record(__METHOD__ . " {$ex->getMessage()}",Log::ERR);
+            return false;
+        }
+    }
+
     private function create_room($room_type,$name,member_info $creator)
     {
         $mod_room = Model('room');

+ 16 - 1
helper/room/factory_client.php

@@ -76,7 +76,22 @@ class factory_client extends tcp_client
 
     public function create_group($creator)
     {
-        $param = ["act" => 'factory','op' => 'create', "type" => 'group','params' => ['creator' => $creator] ];
+        $param = ["act" => 'factory','op' => 'create', "type" => 'group','creator' => $creator];
+        $result = $this->request($param);
+        if(empty($result)) return false;
+
+        $code = intval($result['code']);
+        if($code != 200) {
+            return false;
+        }
+        else {
+            return $result['data'];
+        }
+    }
+
+    public function create_shake($creator)
+    {
+        $param = ["act" => 'factory','op' => 'create', "type" => 'shake_bonus','creator' => $creator];
         $result = $this->request($param);
         if(empty($result)) return false;
 

+ 22 - 0
helper/room/group_room.php

@@ -15,4 +15,26 @@ class group_room extends base_room
     {
         parent::__construct($cinfos, $roomkeys);
     }
+}
+
+class shake_room extends group_room
+{
+    public function __construct($cinfos, array $roomkeys = [])
+    {
+        parent::__construct($cinfos, $roomkeys);
+    }
+    public function shakeOp($input)
+    {
+        $this->clear();
+
+        $room_key = $input['room_key'];
+        if(empty($room_key)) {
+            return false;
+        }
+        $type = $input['type'];
+        $content = $input['content'];
+
+        $this->add_broad('message',['from' => $this->mRoomkeys[$room_key],'type' => $type,'content' => $content]);
+        return true;
+    }
 }

+ 3 - 0
helper/room/proto_type.php

@@ -22,6 +22,9 @@ class proto_type
     const act_chatwo   = 'chatwo';
     const room_chatwo  = 3;
 
+    const act_shake_bonus    = 'shake_bonus';
+    const room_shake_bonus   = 4;
+
     const act_access = 'access';
 }
 

+ 1 - 1
helper/shaker_helper.php

@@ -108,7 +108,7 @@ class shaker_helper
 {
     const max_gain_period = 12 * 3600;
     const max_poor_period = 1800;
-    const max_gain_period_system = 3 * 3600;
+    const max_gain_period_system = 1;//3 * 3600;
     const max_lost_period = 1800;
     const err_msg = '您此次么有抢到好友红包...邀请更多好友,更多机会哦~';
 

+ 15 - 1
mobile/control/game.php

@@ -8,8 +8,12 @@
 
 defined('InShopNC') or exit('Access Invalid!');
 
+require_once(BASE_ROOT_PATH . '/helper/search/tcp_client.php');
+require_once(BASE_ROOT_PATH . '/helper/room/factory_client.php');
+
 class gameControl extends mbMemberControl
 {
+
     public function __construct()
     {
         parent::__construct();
@@ -17,7 +21,17 @@ class gameControl extends mbMemberControl
 
     public function shakeOp()
     {
+        global $config;
+        $shake_room = $config['rooms']['shake_bonus'];
+
         $_SESSION['client_type'] = "wap";
-        return self::outsuccess(null,"game/shake_bonus");
+
+        $ret = room\factory_client::instance()->invite($shake_room,session_helper::memberid());
+        $webaddr = 'ws://192.168.0.200:8080';
+        if($ret != false) {
+            $ret['addr'] = $webaddr;
+        }
+
+        return self::outsuccess($ret,"game/shake_bonus");
     }
 }

+ 13 - 1
mobile/control/room.php

@@ -16,7 +16,7 @@ class roomControl extends mbMemberControl
 
     public function __construct() {
         parent::__construct();
-        $this->mRoomID = 31;
+        $this->mRoomID = 37;
         $this->mAddr = 'ws://192.168.0.200:8080';
     }
 
@@ -32,6 +32,18 @@ class roomControl extends mbMemberControl
         }
     }
 
+    public function shake_bonusOp()
+    {
+        $user = session_helper::memberid();
+        $ret = room\factory_client::instance()->invite($this->mRoomID,$user);
+        if($ret != false) {
+            $ret['addr'] = $this->mAddr;
+            return self::outsuccess($ret,"room/invite",'wap');
+        } else {
+            return self::outerr(errcode::ErrRoom);
+        }
+    }
+
     public function create_bargainOp()
     {
         $result = room\room_client::instance()->create();

+ 15 - 9
mobile/templates/default/game/shake_bonus.php

@@ -39,10 +39,14 @@
 <script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/bridge.js"></script>
 <script type="text/javascript" src="<?php echo RESOURCE_SITE_URL; ?>/mobile/comm/websocket.js"></script>
 <script type="text/javascript">
-    var addr    = "ws://192.168.0.200:8080";
+
+    var room    = <?php echo $output['room']; ?>;
+    var roomkey = "<?php echo $output['room_key']; ?>";
+    var addr    =  "<?php echo $output['addr']; ?>";
+
     var room_msgs = {
-        room    : 31,
-        roomkey :"560e2abd007ea0ba5c7108edd061fc27"
+        room    : room,
+        roomkey :roomkey
     };
     var callbacks = {
         onOpen:sOpen,
@@ -64,11 +68,14 @@
         alert("connect closed:" + e.code);
     }
 
-    function message(datas){
+    function message(datas)
+    {
         var jsonDatas = new websocket.Json_parse(datas);
         var msg_type = datas.content.type;
-        try {
-            if(msg_type == 'text') {
+        try
+        {
+            if(msg_type == 'shake_bonus')
+            {
                 var html = "<p class='achieve'><img class='send_avatar' src="+jsonDatas.get_from().avatar+">"+jsonDatas.get_from().nickname+"说:"+jsonDatas.get_msg()+"</p>";
                 document.getElementById('achieve_box').innerHTML += html;
             };
@@ -78,9 +85,6 @@
         }
     }
 
-
-
-
     var shake_start   = document.getElementById('shake_start');
     var shake_null    = document.getElementById('shake_null');
     var shake_success = document.getElementById('shake_success');
@@ -199,6 +203,8 @@
                             msg = '你送给了他<span class="price">' + money + '</span>元红包';
                         }
 
+                        websocket.shake_bonus(bonus.info.money);
+
                         html += '<div class="head_icon">' + avatar + '</div>' +
                             '<div class="name_box">' + '<div class="name">' + bonus.bonuses[i].name + '</div>' +
                             '<div class="results_msg">' + msg + '</div>' + '</div>';

+ 13 - 1
mobile/templates/default/room/invite.php

@@ -132,6 +132,17 @@
 
             socket.send(JSON.stringify(jsonobject));
         }
+        function shake_bonus(){
+            var jsonobject = {
+                op:"message",
+                room:room,
+                room_key:roomkey,
+                type:"shake_bonus",
+                content:4
+            };
+
+            socket.send(JSON.stringify(jsonobject));
+        }
         function login()
         {
             var jsonobject = {
@@ -238,8 +249,9 @@
         <input id="msg" type="text" placeholder="发送信息">
         <br>
         <button id="connect" onclick="Connect();">Connect</button>
-        <button id="send" onclick="Send();">Send</button>
         <button id="login" onclick="login();">join</button>
+        <button id="send" onclick="Send();">Send</button>
+        <button id="shake_bonus" onclick="shake_bonus();">Send</button>
         <button id="close" onclick="Close();">Close</button>
     </div>
 </div>

+ 5 - 0
test/TestBonus.php

@@ -155,6 +155,11 @@ class TestBonus extends PHPUnit_Framework_TestCase
         $sns = array_unique($sns);
         $count = count($sns);
     }
+    public function testMoney()
+    {
+
+    }
+
     public function testStaff()
     {
         $staffs  = lrlz_staff();

+ 13 - 0
test/TestRoomFactory.php

@@ -24,6 +24,8 @@ require_once(BASE_ROOT_PATH . '/helper/room/factory_client.php');
 
 class TestRoomFactory extends PHPUnit_Framework_TestCase
 {
+    const admin_member_id = 36429;
+
     public static function setUpBeforeClass()
     {
         Base::run_util();
@@ -50,6 +52,12 @@ class TestRoomFactory extends PHPUnit_Framework_TestCase
         $user = 36430;
         $ret = $processor->onRequest(0,json_encode(["act" => 'factory','room' => $roomid,'op' => 'invite','user' => $user]));
     }
+    public function testProcessorCreateShake()
+    {
+        $processor = new room\factory_processor();
+        $creator = 36429;
+        $ret = $processor->onRequest(0,json_encode(["act" => 'factory','op' => 'create', "type" => 'shake_bonus','creator' => $creator]));
+    }
     ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
 
     public function testSocketInvite()
@@ -58,4 +66,9 @@ class TestRoomFactory extends PHPUnit_Framework_TestCase
         $ret = room\factory_client::instance()->invite(30,$user);
     }
 
+    public function testShakeBonus()
+    {
+        $user = 36429;
+        $ret = room\factory_client::instance()->create_shake($user);
+    }
 }