Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
53
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.48 KB | None | 0 0
  1. from collections import namedtuple
  2. from enum import enum
  3. from datetime import datetime
  4. import threading
  5. import socket
  6. import json
  7.  
  8. ##################################################################################################################################
  9. # Daniels Mysteriska Notes #
  10. ##################################################################################################################################
  11. #Vissa saker kan vara redundanta, om du hittar något så skicka koden som är motsägande till mig på Discord
  12. #Om jag inte ser det direkt eller tar lite tid att svara så föröska kolla på något annat
  13.  
  14. #Kom ihåg att python har bra documentation för saker så sök, sök, sök
  15. #Ändra hur mycket du vill det här är bara ideer jag hade
  16.  
  17. #Tror att kruxet verkligen ligger i att lista ut hur meddelande ska gå runt sen så blir det ganska simpelt
  18.  
  19. #Det är väldigt råligt att blanda engelska och svenska
  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 processStates(Enum):
  26. WANTED = 0
  27. HELD = 1
  28. RELEASED = 2
  29.  
  30. #Tror inte vi behöver den här heller
  31. #class msgTypes(Enum):
  32. # REQUEST = 0
  33. # REPLY = 1
  34.  
  35. #Kolla upp hur namedtuples, fungerar ungefär som en struct i c.
  36. #Hade ideen för dessa när vi började så vet inte om de blir så bra
  37. mutexState = namedtuple('State', 'state priority replylst')
  38. mutexPriority = namedtuple('Priority', 'timestamp pid')
  39. mutexMessage = namedtuple('Message', 'msgtype mutexName priority')
  40.  
  41. #Använda denna för att se
  42. processInfo = { }
  43.  
  44. #Använd inte den här tror jag använd message queue istället
  45. #mutexQueue = {
  46. # 'proc_a': statetable['proc_a'],
  47. # 'proc_b': statetable['proc_b'],
  48. # 'proc_c': statetable['proc_c']
  49. # }
  50.  
  51. messageQueue = {}
  52. messageListener = None
  53.  
  54. remotes_n = 2
  55. prio = None
  56.  
  57. #Kan eventuellt använda denna för att när vi vill skicka meddelande
  58. processAddress = {'proc_a': ('192.168.0.50', '8000'), 'proc_b': ('192.168.0.50', '8001'), 'proc_c': ('192.168.0.50', '8002')}
  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. processInfo['processName'] = procName
  66. processInfo['processPID'] = procPID
  67. processInfo['processState'] = processStates.RELEASED
  68.  
  69. prio = mutexPriority(timestamp = datetime.now, pid = procpid)
  70. StateTable[procname] = mutexState(
  71. state = mutexStates.RELEASED,
  72. priority = mutexPriority(timestamp = datetime.now, pid = procpid),
  73. replylst = remotes_n
  74. )
  75. #TODO create thread for message listening
  76.  
  77. def UpdateMutexQueue():
  78. #TODO update mutex queue on recieving of a message
  79.  
  80. ##################################################################################################################################
  81. # Meddelande funktioner #
  82. ##################################################################################################################################
  83. #Den här tror jag vi kommer behöva för att skicka meddelande till andra processer.
  84. def SendMessage(addr, message):
  85. s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  86. s.connect(addr)
  87. s.send(message)
  88. s.close()
  89.  
  90. def MessageListener():
  91. #TODO link function to thread so that it can listen to incoming messages
  92. #TODO restructure
  93. #TODO add some kind of conditional when you recieve a message to update the message queue
  94. # messageQueue['procName']
  95. # messageQueue['procAddr']
  96.  
  97. #Tog bara det här från den andra koden för att se hur man gör
  98. msgThread = threading.Thread(target = messageListener, args = ((client, addr)))
  99.  
  100.  
  101. ##################################################################################################################################
  102. # Mutex Funktioner #
  103. ##################################################################################################################################
  104.  
  105. #Do we need this?????????????????
  106. def MutexHeld():
  107. for n in mutexQueue.items():
  108. processName, state = n
  109. if stateTable[processName].state == stateTypes.HELD:
  110. return True
  111. return False
  112.  
  113. def GetMutexLock(mutex);
  114. processInfo['processState'] = processStates.WANTED
  115. #meddelande som vi skickar iväg
  116. message = mutexMessage(msgType = mutex, mutexName = mutex, priority = prio)
  117.  
  118. #Tror att multicasten till de andra processerna kommer se ut så här kanske
  119. for n in processAddress
  120. processName, processAddr = n #Splittar tuplen i två delar namnet och addressen till respektive variabel
  121. if n not in processInfo['processName']: #Egna processen vill vi inte skicka meddelande till
  122. SendMessage(processAddr, message)
  123.  
  124. #Uppdatera eget mutexstate och skicka meddelande till alla andra processer state i meddeleandet så att de också kan uppdatera
  125. def ReleaseMutexLock(mutex, pname):
  126. processInfo['processState'] = processStates.RELEASED
  127.  
  128. for n in mutexQueue:
  129.  
  130.  
  131. return True
  132.  
  133. if condition:
  134. return false
  135.  
  136. #Vette Fan
  137. def MutexExit():
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement