Files
secondo/apis/python2/SecondoAPI/optimizer_pkg/.ipynb_checkpoints/optimizer_server-checkpoint.ipynb

192 lines
7.0 KiB
Plaintext
Raw Normal View History

2026-01-23 17:03:45 +08:00
{
"cells": [
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"\"\"\"\n",
"The module optimizer_server implements the connection to Optimizer server. \n",
"\n",
"\"\"\"\n",
"\n",
"import asyncio\n",
"import nest_asyncio\n",
"nest_asyncio.apply()\n",
"\n",
"class Optimizer():\n",
" \"\"\"\n",
" This class contains attributes and methods for connecting to a running Optimizer server, \n",
" optimizing commands and queries, returning the result queries to be executed by Secondo.\n",
" \n",
" \"\"\"\n",
" \n",
" def __init__(self, server, port):\n",
" \"\"\"\n",
" The constructor of the calss Optimizer.\n",
" \n",
" :param server: The IP-address of Optimizer server.\n",
" :param port: The port number of the socket.\n",
" :return: None.\n",
" \n",
" \"\"\"\n",
" \n",
" self.server = server\n",
" self.port = port\n",
" self.initialized = False\n",
" self.conn = None\n",
" self.optreader = None\n",
" self.optwriter = None\n",
" loop = asyncio.get_event_loop()\n",
" loop.run_until_complete(self.connect())\n",
" \n",
" \n",
" async def connect(self):\n",
" \"\"\"\n",
" This method connects to Optimizer server using asyncio methods and sets the connection, \n",
" stream- reader and writer attributes of the Optimizer class. \n",
" \n",
" \"\"\"\n",
" \n",
" if self.initialized == True:\n",
" raise SecondoAPI_Error('Optimizer already initialised.')\n",
" \n",
" elif self.initialized == False:\n",
" \n",
" try:\n",
" self.conn = asyncio.open_connection(self.server, int(self.port))\n",
" except ConnectionRefusedError as e:\n",
" raise SecondoAPI_Error(e.args[1] + ' - Connection to Optimizer server refused.')\n",
" except OSError as e:\n",
" raise SecondoAPI_Error(e.args[1] + ' - Connection to Optimizer couldnt be stablished.')\n",
" \n",
" \n",
" try:\n",
" self.optreader, self.optwriter = await asyncio.wait_for(self.conn, timeout = 10)\n",
" except ConnectionRefusedError as e:\n",
" raise SecondoAPI_Error(e.args[1] + ' - Connection to Optimizer server refused.')\n",
" except OSError as e:\n",
" raise SecondoAPI_Error(e.args[1] + ' - Connection to Optimizer couldnt be stablished.') \n",
" \n",
" \n",
" message = \"<who>\\n\"\n",
" while True:\n",
" self.optwriter.write(message.encode(\"utf-8\"))\n",
" await self.optwriter.drain()\n",
" \n",
" \n",
" line = await self.optreader.readline()\n",
" \n",
" line = line.decode(\"utf-8\")\n",
" \n",
" if not line:\n",
" break\n",
" \n",
" if line != \"<optimizer>\\n\":\n",
" break\n",
" \n",
" if line == \"<optimizer>\\n\":\n",
" self.initialized = True\n",
" print(\"Connection to Optimizer stablished...\")\n",
" break\n",
" \n",
" \n",
" def close(self):\n",
" \"\"\"\n",
" This method closes the connections to Optimizer server.\n",
"\n",
" \"\"\"\n",
" if not self.initialized:\n",
" raise SecondoAPI_Error('The connection to Optimizer has not been initialised.')\n",
" self.initialized = False\n",
" if self.optwriter is not None:\n",
" self.optwriter.close()\n",
" if self.conn is not None:\n",
" self.conn.close()\n",
" \n",
" \n",
" \n",
" def get_opt_conn(self):\n",
" \"\"\"\n",
" This method returns the connection attribute of Optimizer object.\n",
"\n",
" :return: The connection attribute of Optimizer object.\n",
" \"\"\"\n",
" if self.conn is not None:\n",
" return self.conn\n",
" else:\n",
" raise SecondoAPI_Error('The connection to Optimizer is reset.')\n",
" \n",
" \n",
" def get_opt_initialized(self):\n",
" if self.initialized:\n",
" return True\n",
" else:\n",
" raise SecondoAPI_Error('Optimizer is already initialised.')\n",
" \n",
" \n",
" def get_opt_streams(self):\n",
" \"\"\"\n",
" This method returns the stream reader/ writer attributes of Optimizer object.\n",
" \n",
" :return: The stream reader/ writer attributes of Optimizer object.\n",
" \"\"\"\n",
" if self.optreader is not None and self.optwriter is not None:\n",
" return self.optreader, self.optwriter\n",
" else:\n",
" raise SecondoAPI_Error('Connection Error, Streams not connected.')\n",
" #return None\n",
" \n",
" def get_server(self):\n",
" \"\"\"\n",
" This method returns the server attributes of Optimizer object.\n",
" \n",
" :return: The server attributes of Optimizer object, which consists of an IP-address eg. 127.0.0.0.\n",
" \"\"\"\n",
" return self.server\n",
" \n",
" \n",
" def get_port(self):\n",
" \n",
" \"\"\"\n",
" This method returns the port attributes of Optimizer object.\n",
" :return: The port attributes of Optimizer object, which consists of an integer number as port eg. 5678.\n",
" \"\"\"\n",
" return self.port\n",
" \n",
" \n",
" def set_opt_initialized(self, val):\n",
" \"\"\"\n",
" This method sets an attribute of Optimizer object that shows if the Optimizer is initialised and running.\n",
" :param initialized: A boolean value, when True means the Optimizer is initialised and running.\n",
" \"\"\"\n",
" self.initialized = val\n",
" \n",
" "
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.4"
}
},
"nbformat": 4,
"nbformat_minor": 2
}