disable long pool

This commit is contained in:
vision 2015-06-05 13:47:34 +03:00
parent 320b716a5f
commit 561095a808
4 changed files with 107 additions and 38 deletions

View file

@ -55,7 +55,6 @@ class MessageApiAction extends Action {
while(true){
sleep(5);
}
}
@ -66,7 +65,15 @@ class MessageApiAction extends Action {
$this->sendJson(['status' => false, 'message' => 'No data.']);
}
return \Yii::$app->mymessages->sendMessage($whom_id, $message);
\Yii::$app->mymessages->sendMessage($whom_id, $message);
return \Yii::$app->mymessages->getNewMessages(\Yii::$app->user->identity->id, $whom_id);
}
protected function deleteMessage() {
$id_message = \Yii::$app->request->get('id_message', false);
$result = \Yii::$app->mymessages->deleteMessage($id_message);
return $result['id'];
}
@ -77,13 +84,19 @@ class MessageApiAction extends Action {
$this->sendJson(['status' => false, 'message' => 'No last id, info:' . print_r($last_id, 1)]);
}
$time_cancel = (int) ini_get('max_execution_time') - 1;
$duration = $time_cancel < 25 ? $time_cancel : 25;
$endTime = time() + $duration;
$duration = $time_cancel < 30 ? $time_cancel : 25;
$endTime = time() + $duration; $i=0;
while(time() < $endTime){
$i++;
if($i > 4) {
$this->sendJson('dddd');
}
/*
$data = \Yii::$app->mymessages->checkMessage($last_id);
if (count($data) > 0) {
$this->sendJson($data);
}
*/
sleep(7);
}
}

View file

@ -142,7 +142,7 @@ class MyMessages extends Component {
* @throws EceptionMessages
* @return array
*/
protected function changeStatusMessage($id, $status, $is_delete = null) {
protected function changeStatusMessage($id, $status, $is_delete = false) {
$model = Messages::findOne($id);
$status_name = 'status';
$current_user_id = \Yii::$app->user->identity->id;
@ -241,10 +241,11 @@ class MyMessages extends Component {
*/
protected function getMessages($whom_id, $from_id = null, $type = null, $last_id = null) {
$table_name = Messages::tableName();
$my_id = \Yii::$app->user->getId();
$query = new \yii\db\Query();
$query
->select(['msg.created_at', 'msg.id', 'msg.status', 'msg.message', "usr1.id as from_id", "usr1.$this->attributeNameUser as from_name", "usr2.id as whom_id", "usr2.$this->attributeNameUser as whom_name"])
->select(['FROM_UNIXTIME(msg.created_at, "%d-%m-%Y %H:%i:%S") as created_at', 'msg.id', 'msg.status', 'msg.message', "usr1.id as from_id", "usr1.$this->attributeNameUser as from_name", "usr2.id as whom_id", "usr2.$this->attributeNameUser as whom_name"])
->from("$table_name as msg")
->leftJoin("$this->userTableName as usr1", 'usr1.id = msg.from_id')
->leftJoin("$this->userTableName as usr2", 'usr2.id = msg.whom_id');
@ -259,10 +260,14 @@ class MyMessages extends Component {
}
//if not set type
//send all message where no delete
if($type) {
$query->andWhere(['=', 'msg.status', $type]);
}else {
$query->andWhere(['!=', 'msg.is_delete_whom', 1]);
} else {
$query->andWhere('((msg.is_delete_from != 1 AND from_id = :my_id) OR (msg.is_delete_whom != 1 AND whom_id = :my_id) ) ', [
':my_id' => $my_id,
]);
}
if($last_id){
@ -272,8 +277,7 @@ class MyMessages extends Component {
$return = $query->orderBy('msg.id')->all();
$ids = Array();
foreach($return as $m) {
//$return[$m['from_name']][] = $m;
if($m['whom_id'] == \Yii::$app->user->getId()) {
if($m['whom_id'] == $my_id) {
$ids[] = $m['id'];
}
}
@ -287,18 +291,4 @@ class MyMessages extends Component {
return array_map(function ($r) use ($user_id) { $r['i_am_sender'] = $r['from_id'] == $user_id; return $r;}, $return);
}
public static function unixToDate ($arr){
if(!is_array($arr) && !is_object($arr)) {
return $arr;
}
if(isset($arr['created_at'])) {
$arr['created_at'] = \Yii::$app->formatter->asDatetime( $arr['created_at'], 'php:d-m-Y H:i');
}
if(isset($arr['updated_at'])) {
$arr['updated_at'] = \Yii::$app->formatter->asDatetime( $arr['updated_at'], 'php:d-m-Y H:i');
}
return $arr;
}
}

View file

@ -265,4 +265,28 @@ body {
background: -moz-linear-gradient(#E9E9E9, #F5F5F5);
background: -o-linear-gradient(#E9E9E9, #F5F5F5);
background: linear-gradient(#E9E9E9, #F5F5F5);
}
}
ul.list_users li.active {
background-color: rgb(61, 61, 61);
}
ul.list_users li.active span{
color: rgb(170, 175, 179);
}
span.delete-message {
transform: rotate(90deg);
display: block;
float: right;
position: relative;
top: -15px;
right: 2px;
margin-left: 10px;
color: rgb(100, 66, 224);
font-weight: bold;
}
span.delete-message:hover {
color: red;
}

View file

@ -9,6 +9,7 @@ function getUrl() {
//Работа с окном сообщением
var messages = (function() {
"use strict";
var di = {};
return function(id_block_) {
@ -59,7 +60,7 @@ var messages = (function() {
success: function(msg){
if(msg.status) {
self.inputText.val('');
self.getNewMessages();
self.updateBox(msg.data);
} else {
self.log('error: ' + 'sendMessage');
self.log(msg);
@ -68,6 +69,15 @@ var messages = (function() {
});
};
var changeActiveUser = function(id) {
var currentId = self.inputFromId.val();
if(currentId != id) {
self.inputFromId.val(id);
self.mainBox.find('li.contact').removeClass('active');
self.mainBox.find('li.contact[data-user=' + id + ']').addClass('active');
}
};
this.reInit = function() {
init();
};
@ -90,9 +100,11 @@ var messages = (function() {
self.lastId = 1;
};
this.createHtmlMessage = function(n) {
var html = '';
html += '<div class="message ' + (n['i_am_sender'] ? 'bubble-right' : 'bubble-left') + '">';
html += '<div data-id="' + n['id'] +'" class="message ' + (n['i_am_sender'] ? 'bubble-right' : 'bubble-left') + '">';
html += '<span class="delete-message">X</span>';
html += '<label class="message-user">' + n['from_name'] + '</label>';
html += '<label class="message-timestamp">' + n['created_at'] +'</label>';
html += '<p>' + n['message'] + '</p>';
@ -104,6 +116,22 @@ var messages = (function() {
self.log(m);
};
self.deleteMessage = function(idMessage) {
$.ajax({
type: "GET",
url: self.base_url,
data: {id_message:idMessage, action:'deleteMessage'},
success: function(msg){
if(msg.status) {
self.mainBox.find('div.message[data-id=' + msg['data'] + ']').remove();
} else {
self.log('error: ' + 'deleteMessage');
self.log(msg);
}
}
});
};
this.updateBox = function(m) {
var html = '';
m.forEach(function(h){
@ -129,11 +157,21 @@ var messages = (function() {
return false;
});
self.mainBox.click(function(event) {
var target = $(event.target);
if(target.is('span.delete-message')) {
var idMessage = target.parent('div.message').data('id');
self.deleteMessage(idMessage);
return false;
}
});
this.mainBox.find('.contact').click(function(event){
var user_id = $(this).data('user');
if(user_id) {
self.clearBox();
self.inputFromId.val(user_id);
changeActiveUser(user_id);
self.inputText.attr('disabled', false);
self.getAllMessages();
}
@ -141,9 +179,11 @@ var messages = (function() {
di[id_block] = this;
//this.pools = new pooling(self.lastId);
//this.pools.addListener('newData', this.fromPooling);
/*
this.pools = new pooling(self.lastId);
this.pools.addListener('newData', this.fromPooling);
this.pools.start();
*/
}
})();
@ -151,6 +191,7 @@ var messages = (function() {
//Пуллинг, данные отдаются через события
var pooling = (function() {
"use strict";
var lastId = 0;
var di = false;
@ -171,11 +212,13 @@ var pooling = (function() {
url:getUrl(),
type:"GET",
data:{last_id:lastId, action:'pooling'},
cahce:false,
timeout:10000,
async:true,
//cahce:false,
//timeout:10000,
//async:true,
success:function(result){
self.triggerEvent('newData', result);
if(result) {
self.triggerEvent('newData', result);
}
},
complete:function() {
if(activeTimeout) {
@ -187,6 +230,7 @@ var pooling = (function() {
this.start = function() {
if(!activeTimeout) {
self.log(15);
pooling();
activeTimeout = true;
}
@ -236,7 +280,5 @@ var pooling = (function() {
}
}
};
this.start();
};
})();
})();