Advertisement
Guest User

Untitled

a guest
Jan 22nd, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.65 KB | None | 0 0
  1. from collections import namedtuple
  2. from enum import enum
  3. import datetime
  4. import threading
  5. import socket
  6. import json
  7.  
  8.  
  9.  
  10. ##################################################################################################################################
  11. # Daniels Mysteriska Notes #
  12. ##################################################################################################################################
  13. #Vissa saker kan vara redundanta, om du hittar något så skicka koden som är motsägande till mig på Discord
  14. #Om jag inte ser det direkt eller tar lite tid att svara så föröska kolla på något annat
  15.  
  16. #Kom ihåg att python har bra documentation för saker så sök, sök, sök
  17. #Ändra hur mycket du vill det här är bara ideer jag hade
  18.  
  19. #Tror att kruxet verkligen ligger i att lista ut hur meddelande ska gå runt sen så blir det ganska simpelt
  20.  
  21. ##################################################################################################################################
  22. # Variabel deklarationer #
  23. ##################################################################################################################################
  24. #En Enum för att märka olika typer av meddelande. du använder den så här verkar det som messageType.WANTED eller vilken du nu vill använda
  25. class stateTypes(Enum):
  26. WANTED = 1
  27. HELD = 2
  28. REQUEST = 3
  29. REPLY = 4
  30. RELEASED = 5
  31.  
  32. #Kolla upp hur namedtuples, fungerar ungefär som en struct i c.
  33. #Hade ideen för dessa när vi började så vet inte om de blir så bra
  34. mutexState = namedtuple('State', 'state prio replylst')
  35. mutexPriority = namedtuple('Priority', 'timestamp pid')
  36. mutexMessage = namedtuple('Message', 'msgtype mutexname prio')
  37.  
  38. #Använda denna för att se
  39. stateTable = {
  40. 'proc_a': mutexState(state = None, prio = None, replylst = None),
  41. 'proc_b': mutexState(state = None, prio = None, replylst = None),
  42. 'proc_c': mutexState(state = None, prio = None, replylst = None)
  43. }
  44.  
  45. #Det här är en Dictionary, använder denna för att för att se hur det ligger till med de olika processerna, börjar med att alla requestar
  46. #Sen så uppdaterar vi den när de får ett lås, släpper ett lås, om de väntar på replies osv. Use case --> mutexQueue['proc_a']
  47. mutexQueue = {
  48. 'proc_a': statetable['proc_a'],
  49. 'proc_b': statetable['proc_b'],
  50. 'proc_c': statetable['proc_c']
  51. }
  52.  
  53. #Kan eventuellt använda denna för att när vi vill skicka meddelande
  54. processAddress = {'proc_a': ('192.168.0.50', '8000'), 'proc_b': ('192.168.0.50', '8001'), 'proc_c': ('192.168.0.50', '8002')}
  55.  
  56. #tänkte använda den här för att jämnföra mot ovanstående eller något.
  57. int n_nodes = 3
  58.  
  59.  
  60. ##################################################################################################################################
  61. #Auxillary funktioner #
  62. ##################################################################################################################################
  63. #Kallar på denna först för att skicka request messages till alla andra processer och lite annat eventuellt.
  64. def MutexInit(ip, procport, procpid, procName):
  65.  
  66.  
  67. def UpdateMutexQueue():
  68.  
  69. ##################################################################################################################################
  70. # Meddelande funktioner #
  71. ##################################################################################################################################
  72. #Den här tror jag vi kommer behöva för att skicka meddelande till andra processer.
  73. def SendMessage(addr, message):
  74. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  75. s.connect(addr)
  76. s.send(message)
  77. s.close()
  78.  
  79. #Vet inte om vi kommer behöva den här.
  80. def MessageHandler():
  81. request_socket = threading.thread
  82. if requestmessage.msgtype == "request":
  83. return 1
  84. else return 0
  85. replymessage = mutex_message()
  86. if replymessage.msgtype == "reply":
  87. return 1
  88. else return 0
  89.  
  90. ##################################################################################################################################
  91. # Mutex Funktioner #
  92. ##################################################################################################################################
  93. #Borde inte behöva vara mer avancerad än så här.
  94. def MutexHeld():
  95. for n in mutexQueue.items():
  96. processName, state = n
  97. if stateTable[processName].state == stateTypes.HELD:
  98. return True
  99. return False
  100.  
  101. def GetMutexLock(mutex);
  102. state = mutex_state(requested, datetime.datetime.now, None)
  103. return True
  104.  
  105. if condition:
  106. return False
  107.  
  108. #Uppdatera eget mutexstate och skicka meddelande till alla andra processer state i meddeleandet så att de också kan uppdatera
  109. def ReleaseMutexLock(mutex, pname):
  110. mutexState(state = stateTypes.RELEASED, prio = None, replylst = None),
  111. mutex_queue[pname] = 0
  112. return True
  113.  
  114. if condition:
  115. return false
  116.  
  117. #Vette Fan
  118. def MutexExit():
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement