mirror of
				https://github.com/Mibew/design.git
				synced 2025-10-31 18:41:05 +03:00 
			
		
		
		
	Create base class for Client Side Request Processors
This commit is contained in:
		
							parent
							
								
									0933263cc9
								
							
						
					
					
						commit
						a300b99171
					
				| @ -57,9 +57,9 @@ $dbtables = array( | ||||
| 		"groupid" => "int references ${mysqlprefix}chatgroup(groupid)", | ||||
| 	), | ||||
| 
 | ||||
| 	"${mysqlprefix}chatrequestbuffer" => array( | ||||
| 	"${mysqlprefix}requestbuffer" => array( | ||||
| 		"requestid" => "int NOT NULL auto_increment PRIMARY KEY", | ||||
| 		"threadid" => "int NOT NULL references ${mysqlprefix}chatthread(threadid)", | ||||
| 		"requestkey" => "varchar(128) NOT NULL", | ||||
| 		"request" => "text NOT NULL" | ||||
| 	), | ||||
| 
 | ||||
| @ -167,8 +167,8 @@ $dbtables_indexes = array( | ||||
| 		"groupid" => "groupid", | ||||
| 		"operatorid" => "operatorid" | ||||
| 	), | ||||
| 	"${mysqlprefix}chatrequestbuffer" => array( | ||||
| 		"threadid" => "threadid" | ||||
| 	"${mysqlprefix}requestbuffer" => array( | ||||
| 		"requestkey" => "requestkey" | ||||
| 	), | ||||
| 	"${mysqlprefix}chatmessage" => array( | ||||
| 		"idx_agentid" => "agentid" | ||||
| @ -194,7 +194,7 @@ $memtables = array(); | ||||
| 
 | ||||
| $dbtables_can_update = array( | ||||
| 	"${mysqlprefix}chatthread" => array("agentId", "userTyping", "agentTyping", "messageCount", "nextagent", "shownmessageid", "userid", "userAgent", "groupid", "dtmchatstarted"), | ||||
| 	"${mysqlprefix}chatrequestbuffer" => array("requestid", "threadid", "request"), | ||||
| 	"${mysqlprefix}requestbuffer" => array("requestid", "requestkey", "request"), | ||||
| 	"${mysqlprefix}chatmessage" => array("agentId"), | ||||
| 	"${mysqlprefix}chatoperator" => array("vcavatar", "vcjabbername", "iperm", "istatus", "idisabled", "vcemail", "dtmrestore", "vcrestoretoken"), | ||||
| 	"${mysqlprefix}chatban" => array(), | ||||
|  | ||||
							
								
								
									
										96
									
								
								src/messenger/webim/libs/classes/client_side_processor.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										96
									
								
								src/messenger/webim/libs/classes/client_side_processor.php
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,96 @@ | ||||
| <?php | ||||
| /* | ||||
|  * Copyright 2005-2013 the original author or authors. | ||||
|  * | ||||
|  * Licensed under the Apache License, Version 2.0 (the "License"); | ||||
|  * you may not use this file except in compliance with the License. | ||||
|  * You may obtain a copy of the License at | ||||
|  * | ||||
|  *     http://www.apache.org/licenses/LICENSE-2.0 | ||||
|  * | ||||
|  * Unless required by applicable law or agreed to in writing, software | ||||
|  * distributed under the License is distributed on an "AS IS" BASIS, | ||||
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||||
|  * See the License for the specific language governing permissions and | ||||
|  * limitations under the License. | ||||
|  */ | ||||
| 
 | ||||
| /** | ||||
|  * Base class for all request processors that interact with JavaScript | ||||
|  * applications at the client side. | ||||
|  */ | ||||
| abstract class ClientSideProcessor extends RequestProcessor { | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Call function at client side | ||||
| 	 * | ||||
| 	 * @param array $functions Array of functions to call. See Mibew API for | ||||
| 	 * details. | ||||
| 	 * @param array|null $callback callback array for synchronous requests. | ||||
| 	 * @return mixed request result or boolean false on failure. | ||||
| 	 */ | ||||
| 	public function call($functions, $callback = null) { | ||||
| 		return parent::call($functions, true, $callback); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Sends asynchronous responses | ||||
| 	 * | ||||
| 	 * @param array $responses An array of the 'Request' arrays. See Mibew API | ||||
| 	 * for details | ||||
| 	 */ | ||||
| 	protected function sendAsyncResponses($responses) { | ||||
| 		header("Content-type: text/plain; charset=UTF-8"); | ||||
| 		echo($this->mibewAPI->encodePackage( | ||||
| 			$responses, | ||||
| 			$this->config['signature'], | ||||
| 			true | ||||
| 		)); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Add request to client side to the buffer. Use database as storage. | ||||
| 	 * Override this method if you want to use another storage and/or save logic. | ||||
| 	 * | ||||
| 	 * @param String $key Request key. Use to load request from buffer. | ||||
| 	 * @param $request Request array. | ||||
| 	 */ | ||||
| 	protected function addRequestToBuffer($key, $request) { | ||||
| 		// Save request to database
 | ||||
| 		$db = Database::getInstance(); | ||||
| 		$db->query( | ||||
| 			"INSERT INTO {requestbuffer} (request, requestkey) VALUES (:request, :key)", | ||||
| 			array(':request' => serialize($request), ':key' => $key) | ||||
| 		); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Load stored requests to the client side | ||||
| 	 * | ||||
| 	 * @param String $key Request key | ||||
| 	 * @return array Array of requests with given key | ||||
| 	 */ | ||||
| 	protected function getRequestsFromBuffer($key) { | ||||
| 		$db = Database::getInstance(); | ||||
| 		// Get requests from database
 | ||||
| 		$requests = $db->query( | ||||
| 			"SELECT request FROM {requestbuffer} WHERE requestkey = :key", | ||||
| 			array(':key' => $key), | ||||
| 			array('return_rows' => Database::RETURN_ALL_ROWS) | ||||
| 		); | ||||
| 		// Remove got requests from database
 | ||||
| 		$db->query( | ||||
| 			"DELETE FROM {requestbuffer} WHERE requestkey = :key", | ||||
| 			array(':key' => $key) | ||||
| 		); | ||||
| 		// Unserialize requests
 | ||||
| 		$result = array(); | ||||
| 		foreach($requests as $request_info) { | ||||
| 			$result[] =  unserialize($request_info['request']); | ||||
| 		} | ||||
| 		return $result; | ||||
| 	} | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| ?>
 | ||||
| @ -29,7 +29,7 @@ | ||||
|  * | ||||
|  * Implements Singleton pattern | ||||
|  */ | ||||
| class ThreadProcessor extends RequestProcessor { | ||||
| class ThreadProcessor extends ClientSideProcessor { | ||||
| 
 | ||||
| 	/** | ||||
| 	 * An instance of the ThreadProcessor class | ||||
| @ -61,7 +61,10 @@ class ThreadProcessor extends RequestProcessor { | ||||
| 		$thread = Thread::load($thread_id, $last_token); | ||||
| 		// Check thread
 | ||||
| 		if (! $thread) { | ||||
| 			throw new ThreadProcessorException('Wrong thread', ThreadProcessorException::ERROR_WRONG_THREAD); | ||||
| 			throw new ThreadProcessorException( | ||||
| 				'Wrong thread', | ||||
| 				ThreadProcessorException::ERROR_WRONG_THREAD | ||||
| 			); | ||||
| 		} | ||||
| 		// Return thread
 | ||||
| 		return $thread; | ||||
| @ -102,17 +105,6 @@ class ThreadProcessor extends RequestProcessor { | ||||
| 		)); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Call function at window side | ||||
| 	 * | ||||
| 	 * @param array $functions Array of functions to call. See Mibew API for details. | ||||
| 	 * @param array|null $callback callback array for synchronous requests. | ||||
| 	 * @return mixed request result or boolean false on failure. | ||||
| 	 */ | ||||
| 	public function call($functions, $callback = null) { | ||||
| 		return parent::call($functions, true, $callback); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Creates and returns an instance of the MibewAPI class. | ||||
| 	 * | ||||
| @ -122,20 +114,6 @@ class ThreadProcessor extends RequestProcessor { | ||||
| 		return MibewAPI::getAPI('MibewAPIChatInteraction'); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Sends asynchronous responses | ||||
| 	 * | ||||
| 	 * @param array $responses An array of the 'Request' arrays. See Mibew API for details | ||||
| 	 */ | ||||
| 	protected function sendAsyncResponses($responses) { | ||||
| 		header("Content-type: text/plain; charset=UTF-8"); | ||||
| 		echo($this->mibewAPI->encodePackage( | ||||
| 			$responses, | ||||
| 			$this->config['signature'], | ||||
| 			true | ||||
| 		)); | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Sends asynchronous request | ||||
| 	 * | ||||
| @ -161,42 +139,11 @@ class ThreadProcessor extends RequestProcessor { | ||||
| 				); | ||||
| 			} | ||||
| 		} | ||||
| 		// Save request to database
 | ||||
| 		$db = Database::getInstance(); | ||||
| 		$db->query( | ||||
| 			"INSERT INTO {chatrequestbuffer} (request, threadid) VALUES (:request, :threadid)", | ||||
| 			array(':request' => serialize($request), ':threadid' => $thread_id) | ||||
| 		); | ||||
| 		// Store request in buffer
 | ||||
| 		$this->addRequestToBuffer('thread_'.$thread_id, $request); | ||||
| 		return true; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Load stored requests to window from database | ||||
| 	 * | ||||
| 	 * @param Thread $thread Requests loads for this thread | ||||
| 	 * @return array Array of requests to $thread thread | ||||
| 	 */ | ||||
| 	protected function getStoredRequests(Thread $thread) { | ||||
| 		$db = Database::getInstance(); | ||||
| 		// Get requests from database
 | ||||
| 		$requests = $db->query( | ||||
| 			"SELECT request FROM {chatrequestbuffer} WHERE threadid = :threadid", | ||||
| 			array(':threadid' => $thread->id), | ||||
| 			array('return_rows' => Database::RETURN_ALL_ROWS) | ||||
| 		); | ||||
| 		// Remove got requests from database
 | ||||
| 		$db->query( | ||||
| 			"DELETE FROM {chatrequestbuffer} WHERE threadid = :threadid", | ||||
| 			array(':threadid' => $thread->id) | ||||
| 		); | ||||
| 		// Unserialize requests
 | ||||
| 		$result = array(); | ||||
| 		foreach($requests as $request_info) { | ||||
| 			$result[] =  unserialize($request_info['request']); | ||||
| 		} | ||||
| 		return $result; | ||||
| 	} | ||||
| 
 | ||||
| 	/** | ||||
| 	 * Send new messages to window | ||||
| 	 * | ||||
| @ -285,7 +232,7 @@ class ThreadProcessor extends RequestProcessor { | ||||
| 		$this->sendMessages($thread, $args['user'], $args['lastId']); | ||||
| 
 | ||||
| 		// Load stored requests
 | ||||
| 		$stored_requests = $this->getStoredRequests($thread); | ||||
| 		$stored_requests = $this->getRequestsFromBuffer('thread_'.$thread->id); | ||||
| 		if ($stored_requests !== false) { | ||||
| 			$this->responses = array_merge($this->responses, $stored_requests); | ||||
| 		} | ||||
|  | ||||
| @ -23,6 +23,7 @@ require_once('libs/classes/mibew_api.php'); | ||||
| require_once('libs/classes/mibew_api_interaction.php'); | ||||
| require_once('libs/classes/mibew_api_chat_interaction.php'); | ||||
| require_once('libs/classes/mibew_api_execution_context.php'); | ||||
| require_once('libs/classes/client_side_processor.php'); | ||||
| require_once('libs/classes/thread_processor.php'); | ||||
| 
 | ||||
| $processor = ThreadProcessor::getInstance(); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user