Guest User

flask-socketio,py

a guest
Oct 4th, 2020
451
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.59 KB | None | 0 0
  1. from typing import Counter
  2. from flask import Flask, request, render_template_string
  3. from flask_socketio import SocketIO, emit
  4.  
  5.  
  6. app = Flask(__name__)
  7. socketio = SocketIO(app, logge=True)
  8. clients = 0
  9.  
  10.  
  11. @socketio.on("connect", namespace="/")
  12. def connect():
  13.     global clients
  14.     print("fired connect")
  15.     clients += 1
  16.     emit("users", {"user_count": clients}, broadcast=True)
  17.  
  18.  
  19. @socketio.on("disconnect", namespace="/")
  20. def disconnect():
  21.     global clients
  22.     print("fired disconnect")
  23.     clients -= 1
  24.     emit("users", {"user_count": clients}, broadcast=True)
  25.  
  26.  
  27. TABLE_TEMPLATE = """
  28. <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.7.3/socket.io.min.js"></script>
  29. <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  30. <script>
  31.    $(document).ready(function(){
  32.        var namespace = '/';    
  33.        var socket = io.connect('http://' + document.domain + ':' + location.port + namespace);
  34.        // Update the counter when a new user connects
  35.        socket.on('users', function(users) {
  36.            userCount = document.getElementById('user_counter');
  37.            userCount.innerHTML = users.user_count;
  38.        });
  39. });
  40. </script>
  41. <h1 id='user_counter'></h1>
  42. <style>
  43.   table, th, td {
  44.   border: 1px solid black;
  45.   }
  46. </style>
  47. <table style="width: 100%">
  48.   <thead>
  49.      <th>Client</th>
  50.      <th>IP</th>
  51.      <th>Status</th>
  52.   </thead>
  53.   <tbody>
  54.      {% for row in data %}
  55.      <tr>
  56.         <td><center>{{ row.client }}</td></center>
  57.         <td><center>{{ row.ip }}</td></center>
  58.         <td><center>{{ row.status }}</td></center>
  59.      </tr>
  60.      {% endfor %}
  61.   </tbody>
  62. </table>
  63. """
  64.  
  65.  
  66. @app.route("/device_add", methods=["POST"])
  67. def device_add():
  68.     name = request.args.get("name")
  69.     with open("logs.log", "a") as f:
  70.         f.write(f"{name} Connected USB from IP: {request.remote_addr} \n")
  71.     return "ok"
  72.  
  73.  
  74. @app.route("/device_remove", methods=["POST"])
  75. def device_remove():
  76.     name = request.args.get("name")
  77.     with open("logs.log", "a") as f:
  78.         f.write(f"{name} Disconnected USB from IP: {request.remote_addr}\n")
  79.  
  80.     return "ok"
  81.  
  82.  
  83. @app.route("/", methods=["GET"])
  84. def device_list():
  85.     print(clients)
  86.     keys = ["client", "ip", "status"]
  87.     data = []
  88.     with open("logs.log", "r") as f:
  89.         for line in f:
  90.             row = line.split()
  91.             data.append(dict(zip(keys, [row[0], row[-1], row[1]])))
  92.  
  93.     return render_template_string(TABLE_TEMPLATE, data=data)
  94.  
  95.  
  96. if __name__ == "__main__":
  97.     socketio.run(app, port=8080, debug=True, use_reloader=True)
  98.  
Add Comment
Please, Sign In to add comment