From 94979c3799a5b8306479439915c12aae272e7a4f Mon Sep 17 00:00:00 2001 From: theolem Date: Sun, 8 Dec 2019 17:06:26 +0100 Subject: [PATCH] better --- CMakeLists.txt | 189 ++++++++++++++++++++++++++ package.xml | 58 ++++++++ scripts/.archi_reactive.py.swp | Bin 0 -> 12288 bytes scripts/archi_reactive_Andrei_Théo.py | 49 +++++++ scripts/copy.sh | 3 - scripts/netconfig.sh | 4 - scripts/wait.sh | 6 - scripts/wait_parallel.sh | 14 -- src/__pycache__/util.cpython-36.pyc | Bin 2187 -> 0 bytes src/balancer.py | 123 ----------------- src/client.py | 86 ------------ src/master | Bin 8504 -> 0 bytes src/master.c | 110 --------------- src/master.h | 9 -- src/slave | Bin 8328 -> 0 bytes src/slave.c | 30 ---- src/util.py | 63 --------- 17 files changed, 296 insertions(+), 448 deletions(-) create mode 100644 CMakeLists.txt create mode 100644 package.xml create mode 100644 scripts/.archi_reactive.py.swp create mode 100644 scripts/archi_reactive_Andrei_Théo.py delete mode 100755 scripts/copy.sh delete mode 100755 scripts/netconfig.sh delete mode 100755 scripts/wait.sh delete mode 100755 scripts/wait_parallel.sh delete mode 100755 src/__pycache__/util.cpython-36.pyc delete mode 100755 src/balancer.py delete mode 100755 src/client.py delete mode 100755 src/master delete mode 100755 src/master.c delete mode 100755 src/master.h delete mode 100755 src/slave delete mode 100755 src/slave.c delete mode 100755 src/util.py diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..62d8a42 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,189 @@ +cmake_minimum_required(VERSION 2.8.3) +project(archi_reactive) + +## Find catkin macros and libraries +## if COMPONENTS list like find_package(catkin REQUIRED COMPONENTS xyz) +## is used, also find other catkin packages +find_package(catkin REQUIRED COMPONENTS + geometry_msgs + rospy + sensor_msgs + std_msgs +) + +## System dependencies are found with CMake's conventions +# find_package(Boost REQUIRED COMPONENTS system) + + +## Uncomment this if the package has a setup.py. This macro ensures +## modules and global scripts declared therein get installed +## See http://ros.org/doc/api/catkin/html/user_guide/setup_dot_py.html +# catkin_python_setup() + +################################################ +## Declare ROS messages, services and actions ## +################################################ + +## To declare and build messages, services or actions from within this +## package, follow these steps: +## * Let MSG_DEP_SET be the set of packages whose message types you use in +## your messages/services/actions (e.g. std_msgs, actionlib_msgs, ...). +## * In the file package.xml: +## * add a build_depend tag for "message_generation" +## * add a build_depend and a run_depend tag for each package in MSG_DEP_SET +## * If MSG_DEP_SET isn't empty the following dependency has been pulled in +## but can be declared for certainty nonetheless: +## * add a run_depend tag for "message_runtime" +## * In this file (CMakeLists.txt): +## * add "message_generation" and every package in MSG_DEP_SET to +## find_package(catkin REQUIRED COMPONENTS ...) +## * add "message_runtime" and every package in MSG_DEP_SET to +## catkin_package(CATKIN_DEPENDS ...) +## * uncomment the add_*_files sections below as needed +## and list every .msg/.srv/.action file to be processed +## * uncomment the generate_messages entry below +## * add every package in MSG_DEP_SET to generate_messages(DEPENDENCIES ...) + +## Generate messages in the 'msg' folder +# add_message_files( +# FILES +# Message1.msg +# Message2.msg +# ) + +## Generate services in the 'srv' folder +# add_service_files( +# FILES +# Service1.srv +# Service2.srv +# ) + +## Generate actions in the 'action' folder +# add_action_files( +# FILES +# Action1.action +# Action2.action +# ) + +## Generate added messages and services with any dependencies listed here +# generate_messages( +# DEPENDENCIES +# geometry_msgs# sensor_msgs# std_msgs +# ) + +################################################ +## Declare ROS dynamic reconfigure parameters ## +################################################ + +## To declare and build dynamic reconfigure parameters within this +## package, follow these steps: +## * In the file package.xml: +## * add a build_depend and a run_depend tag for "dynamic_reconfigure" +## * In this file (CMakeLists.txt): +## * add "dynamic_reconfigure" to +## find_package(catkin REQUIRED COMPONENTS ...) +## * uncomment the "generate_dynamic_reconfigure_options" section below +## and list every .cfg file to be processed + +## Generate dynamic reconfigure parameters in the 'cfg' folder +# generate_dynamic_reconfigure_options( +# cfg/DynReconf1.cfg +# cfg/DynReconf2.cfg +# ) + +################################### +## catkin specific configuration ## +################################### +## The catkin_package macro generates cmake config files for your package +## Declare things to be passed to dependent projects +## INCLUDE_DIRS: uncomment this if you package contains header files +## LIBRARIES: libraries you create in this project that dependent projects also need +## CATKIN_DEPENDS: catkin_packages dependent projects also need +## DEPENDS: system dependencies of this project that dependent projects also need +catkin_package( +# INCLUDE_DIRS include +# LIBRARIES archi_reactive +# CATKIN_DEPENDS geometry_msgs rospy sensor_msgs std_msgs +# DEPENDS system_lib +) + +########### +## Build ## +########### + +## Specify additional locations of header files +## Your package locations should be listed before other locations +# include_directories(include) +include_directories( + ${catkin_INCLUDE_DIRS} +) + +## Declare a C++ library +# add_library(archi_reactive +# src/${PROJECT_NAME}/archi_reactive.cpp +# ) + +## Add cmake target dependencies of the library +## as an example, code may need to be generated before libraries +## either from message generation or dynamic reconfigure +# add_dependencies(archi_reactive ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Declare a C++ executable +# add_executable(archi_reactive_node src/archi_reactive_node.cpp) + +## Add cmake target dependencies of the executable +## same as for the library above +# add_dependencies(archi_reactive_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS}) + +## Specify libraries to link a library or executable target against +# target_link_libraries(archi_reactive_node +# ${catkin_LIBRARIES} +# ) + +############# +## Install ## +############# + +# all install targets should use catkin DESTINATION variables +# See http://ros.org/doc/api/catkin/html/adv_user_guide/variables.html + +## Mark executable scripts (Python etc.) for installation +## in contrast to setup.py, you can choose the destination +# install(PROGRAMS +# scripts/my_python_script +# DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark executables and/or libraries for installation +# install(TARGETS archi_reactive archi_reactive_node +# ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} +# RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} +# ) + +## Mark cpp header files for installation +# install(DIRECTORY include/${PROJECT_NAME}/ +# DESTINATION ${CATKIN_PACKAGE_INCLUDE_DESTINATION} +# FILES_MATCHING PATTERN "*.h" +# PATTERN ".svn" EXCLUDE +# ) + +## Mark other files for installation (e.g. launch and bag files, etc.) +# install(FILES +# # myfile1 +# # myfile2 +# DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION} +# ) + +############# +## Testing ## +############# + +## Add gtest based cpp test target and link libraries +# catkin_add_gtest(${PROJECT_NAME}-test test/test_archi_reactive.cpp) +# if(TARGET ${PROJECT_NAME}-test) +# target_link_libraries(${PROJECT_NAME}-test ${PROJECT_NAME}) +# endif() + +## Add folders to be run by python nosetests +# catkin_add_nosetests(test) diff --git a/package.xml b/package.xml new file mode 100644 index 0000000..8984f7e --- /dev/null +++ b/package.xml @@ -0,0 +1,58 @@ + + + archi_reactive + 0.0.0 + The archi_reactive package + + + + + turtlebot + + + + + + TODO + + + + + + + + + + + + + + + + + + + + + + + + + + catkin + geometry_msgs + rospy + sensor_msgs + std_msgs + geometry_msgs + rospy + sensor_msgs + std_msgs + + + + + + + + \ No newline at end of file diff --git a/scripts/.archi_reactive.py.swp b/scripts/.archi_reactive.py.swp new file mode 100644 index 0000000000000000000000000000000000000000..4f3076cf7582700be32917a16edd2fa7c6dbcbb8 GIT binary patch literal 12288 zcmeI2zmFS56vro2KoUUk54@ZU+u&RO2q(zFA?}V7iInJ~yGxoVTE@F$dvxBJWoFi# zQ$Py^;vYZ=Dr6c`AfZqpTtGuZhiIUH0tsrU;JaS0&kj-wI?$~2-JPFr-uuiOOQ)M| z>*kef^jz>P!}A1V@4fu!A@ma&jb^C?D(}p4PdE2J*COBO_C1o2$)1I$pKzYo357@L&Sx z*~Lz~m5-^cU7)9)yz$`SzSk4*1Uvyxz!UHUJONL@6YvE7R|H&ohP{P|9-2qho`28W z_nlY$#}n`bJONL@6YvB)0Z+ga@B};oPrwuK1pb2rc+A+9M;NO=3g_|v|MKtuUms`e zC+J7$bLbOj0=*BNKnKtz=q&WdV~qU1eHS{s`67=U;#=e9;g5HJRhHgRuREKKNdFXfe{sE+*7oex1Jf0flA5Xv& z@B};oPrwuK1U!L%OMvhgZPRgJQ>kiocG_^5b@NM_U14f#O&f8w)}X803Ui2ZgCag0 zc6oHXJVh$$LZxF-s}7}gLJ3oC5La4_6P?+uBa?|@e1()2Sxj+tI*D}V1li2cP>|E9 zjA*tV)ncvGbRsOpf>NV4ZzOWCY-9 zl3v7WE$m@Tl4MTRQE#X@JXT1FdVLcHb=Nu`<-2EeHkwYrW5ktfP|TI3OksK-y`Xfl z_0?ShLTR*OWr!7kRIw~}uDUQb>+flkFRaMGhOoEVt=8s7t95&`2)1Y?#D*;jirQ>m zg~W+7`Ca6BIxOeXB73MvffCg+W3ZYTD*IM2b~fgVjQ9{4X({DM%ju-YvodPL8*xi| zdXKO6}u1ka91?!)QI;o+G2?%Xn{h0cnC$>=>{6=}v^znk)xLzv zwu+6Aw7Y+>zq`G6xO)Ti2h)j82NL;ob?@5t!IkMd`LrFL@MFy?7n+$h&8}2UoGMDk IZh(XJH#2TL)c^nh literal 0 HcmV?d00001 diff --git a/scripts/archi_reactive_Andrei_Théo.py b/scripts/archi_reactive_Andrei_Théo.py new file mode 100644 index 0000000..60ca741 --- /dev/null +++ b/scripts/archi_reactive_Andrei_Théo.py @@ -0,0 +1,49 @@ +#!/usr/bin/env python +# Bamako + +# Andrei COROCAESCU, Théophile LEMARIÉ +# 02.12.2019 + +import rospy +from geometry_msgs.msg import Twist +from sensor_msgs.msg import LaserScan +import sys, tty, termios +from cv_bridge import CvBridge, CvBridgeError +import numpy as np +import cv2 +import cv2.cv as cv +import math +import numpy as np + +# noeud publiant sur le topic /cmd_vel_mux[...] pour contrôler la vitesse du robot +velocity_publisher = rospy.Publisher("/cmd_vel_mux/input/teleop", Twist, queue_size=10) + +# callback permettant de réagir aux obstacles +def callback(msg): + vel_msg = Twist() + + # valeurs par défaut, dans le cas où aucun obstacle n'est détecté + vel_msg.linear.x = 0.25 + vel_msg.angular.z = 0.0 + + # extraction des données de la kinect + ranges = msg.ranges + for i in ranges[100:500]: + # condition d'obstacle + if (i < 1.0 and i is not float("nan")): # obstacle trouvé devant, dans un angle de 30° environ + vel_msg.linear.x = 0.05 # diminuer la vitesse linéaire + vel_msg.angular.z = 1.5 # tourner à gauche + print("OBSTACLE") + break + + # envoyer les commande de vitesse / rotation + velocity_publisher.publish(vel_msg) + + +if __name__ == '__main__': + # déclaration des noeuds + # noeud d'écoute sur le topic /scan (données de profondeur de la kinect) + rospy.init_node('listener', anonymous=True) + rospy.Subscriber("/scan", LaserScan, callback) + rospy.spin() + diff --git a/scripts/copy.sh b/scripts/copy.sh deleted file mode 100755 index bd9e0c2..0000000 --- a/scripts/copy.sh +++ /dev/null @@ -1,3 +0,0 @@ -# copies code from master to all slaves -scp -r $PWD/../* theo@192.168.0.2:~Documents/recupPC/ recupPC -scp -r $PWD/../* theo@192.168.0.3:~Documents/recupPC/ recupPC diff --git a/scripts/netconfig.sh b/scripts/netconfig.sh deleted file mode 100755 index 590f110..0000000 --- a/scripts/netconfig.sh +++ /dev/null @@ -1,4 +0,0 @@ -# add ip address to ethernet interface -ip addr add 192.168.0.$1 dev eth0 -ip link set eth0 up - diff --git a/scripts/wait.sh b/scripts/wait.sh deleted file mode 100755 index d2e45d6..0000000 --- a/scripts/wait.sh +++ /dev/null @@ -1,6 +0,0 @@ -echo "Testing..." -for var in $@ -do - sleep $var -done -echo "Done." diff --git a/scripts/wait_parallel.sh b/scripts/wait_parallel.sh deleted file mode 100755 index 8492999..0000000 --- a/scripts/wait_parallel.sh +++ /dev/null @@ -1,14 +0,0 @@ -echo "Testing..." - -SLEEPMAX=1 - -for var in $@ -do - sleep $var & - if (( $var > $SLEEPMAX )); - then - SLEEPMAX=$var - fi -done -sleep "$SLEEPMAX" -echo "Done." diff --git a/src/__pycache__/util.cpython-36.pyc b/src/__pycache__/util.cpython-36.pyc deleted file mode 100755 index 6743be3cff89813820bb7f9db9cc89009b09fc03..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2187 zcmaJ?O>f&q5ZxsyiIHvjqfTVIA7DR_Rs|{@atVU8DA4p!pb&~UheAjo(44g`n<9nf z(zONYG1Jfdt7|3`#2plAM8~#F?v{YdP@9CGU4Js8NmTuytyX58I%7)P(hEjn-lB z(FV0(o3u$=uxqqUJFx5Y0qw$W(0zIU+oCq@!ETZ~6rKGW+%NjmwXeEgcY-GYn@I9+ zc-S(~AMj=mFc@(rXX08)VH{&E2^=E(9k*DE(j-xl8Kp^9)WgX{B~;WVdX$)sEWD6N zzZM#K5N{v#PSdgKnNyYao~2PfR*A`azx?#`;V@1^8Xkplm_$nVG9C4DGm5*DtD=b$ zhEY7iUZ3%J7=&y}&EC5qe}a`6K%dw3&U>J1j8z*CHlf@7VIgXvD7mC1Dypq9Z!80RYJI5vfa zn;DHc=doyD*AUCA;CC%OD){AD_wgT@MJ)9e=2dO)pnqb~mvo#<<1lWL=Z-!g_fQyj z25%qH?IV`TbJ#m}Pz0~9xk@)Ypd$T_S9qMoqH#P*D2(I6ja8ysc3E=`nIKsno7EV$ zxB!dd49(RcwhhTFcGxH;Iet7FD_N%a5I2HdtgEJGzyKQO&){{f-AILv>$Uk~-o8?;Tzm*SP zuoSaX701&$c#KAgj@QicBXA~yFbgjNXG*%bMPs4ILBpg&R*c@nT`Ne7&4reh^zUHL zq9C5!k@^ex6>>(+=q+nrVp6gOY>{(tpTxPZ_qZ7|@1cUn249gG6kRrJj%M!8pbV_L zSbs)!%pIy>{%hF*B)&g~_U$zKdIxt*ThCRbMi-DfM-&X)C{8u^mw^kd-u#QF<61ge z&0EL|PU?MZ(+51fEBMxFm{43%x{G}o3r9dPJ~ZQ3mgneWT+@g*@Wb@1>c|?JfiP_` z=YHla`x!@W8?M{8n5VnX(>x)a9*q(-*I<-H!MDqHRhCW;TDsbUZW^uDY|SnY?HNyT zZzZ5DslSBZ*(w~Z^rx5(&@WEZ<)mmt>3A}Vl})MrTG_9K?aa2pl?i11X%>d1uuY{6 t+Mat02Y+<5{T%sE$0_Bp`i|3)aT<^*$CFLh_xu`O*RR96_^bJ?{{Sc3w~PP) diff --git a/src/balancer.py b/src/balancer.py deleted file mode 100755 index 5cb8021..0000000 --- a/src/balancer.py +++ /dev/null @@ -1,123 +0,0 @@ -import socket -import threading -import logging -import time -import sys -from util import * - -message_queue=[] -if len(sys.argv) > 1 : - args = sys.argv[1:] - for arg in args : - message_queue.append("prog : " + arg) -else : - message_queue=["prog : echo hello"] - -print(message_queue) - -connections_threads=[] # active clients -data_socks={} - -HOST = "127.0.0.1" -PORT = 1235 - -data_port = input("Port data ?") ## port de donnée utilisé pour le premier utilisateur (ensuite incrémenté par 1) -if data_port == "": - data_port = 43222 -else : - data_port = int(data_port) - -nb_connections = 0 -stop = 0 - -s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - -### SERVER THREADS -class thread_get_input(threading.Thread): - def __init__(self) : - threading.Thread.__init__(self) - def run(self) : - while True : - program = get_program_input() - if program != "" : - message_queue.append("prog : " + program) - if stop == 1 : - break - -class thread_command_execution(threading.Thread) : - def __init__(self) : - threading.Thread.__init__(self) - self.round_robin_inc = 0 - def run(self) : - try : - while True : - if len(connections_threads) != 0 and len(message_queue) != 0 : - index = self.round_robin_inc % len(connections_threads) - thread = connections_threads[index] - self.round_robin_inc = self.round_robin_inc + 1 - program = message_queue.pop() - thread.command_program_execution(program) - if stop == 1 : - break - except KeyboardInterrupt : - self.s_data.close() - raise - -class thread_handle_socket(threading.Thread): - def __init__(self) : - threading.Thread.__init__(self) - - data_socks[data_port] = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - self.s_data = data_socks[data_port] - self.s_data.bind(('', data_port)) - self.s_data.listen() - self.conn, self.addr = self.s_data.accept() - - def command_program_execution(self, program): - self.conn.send(encode_message(program)) - start_time = time.time() - data = self.conn.recv(1024) - end_time = time.time() - mtype, ret_val = get_message_type(decode_message(data)) - print("Received " + str(ret_val) + " from " + str(self.addr[0]) + " in %s seconds ", end_time - start_time ) - - def run(self) : - while True : - time.sleep(1) - if stop == 1 : - break - -## MAIN - -# starts thread that reads input from user -thread_input = thread_get_input() -thread_input.start() - -thread_exec = thread_command_execution() -thread_exec.start() - -s.bind(('', PORT)) -s.listen() -try : - while True : - conn, addr = s.accept() - print("Nouvelle machine connectée : " + addr[0]) - #send data port to connected host - message = "prt : "+ str(data_port) - conn.sendall(encode_message(message)) - - # opens a new thread, which will open a data socket - connections_threads.append(thread_handle_socket()) - connections_threads[nb_connections].start() - - # increment it for the next one - data_port = data_port + 5; - nb_connections = nb_connections + 1 - - conn.close() - -except KeyboardInterrupt : - s.close() - stop = 1 - print(" Exiting...") - raise diff --git a/src/client.py b/src/client.py deleted file mode 100755 index 814ee17..0000000 --- a/src/client.py +++ /dev/null @@ -1,86 +0,0 @@ -import socket -import threading -import time -import sys -from util import * - -received_message_queue = [] -dataport = 0 -PORT = 1235 -stop = 0 - -empty_inc = 0 #inc var counting number of empty packets received - -# server control socket -if len(sys.argv) > 1: - SERVER=sys.argv[1] -else : - SERVER = "127.0.0.1" -print("server address: " , SERVER); - -### FUNCTIONS -def thread_execute_programs() : - while True : - if len(received_message_queue) != 0 : - print("handling message in thread") - message = received_message_queue.pop() - handle_message(message) - if stop == 1 : - break - time.sleep(1) - -## MAIN CODE -if __name__ == "__main__" : - - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect((SERVER, PORT)) # connection to server. Crashes if refused. - - # first receives port and closes connection to control socket... - data = s.recv(1024) - dataport = get_data_port(data) - # close connection - s.shutdown(socket.SHUT_RDWR) - s.close() - - print("Trying to open connection to data socket... ") - # opens the new server socket - while True : - try : - - s_data = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s_data.connect((SERVER, dataport)) - break - except ConnectionRefusedError : - print("retrying...") - time.sleep(1) - - thread_exec = threading.Thread(target = thread_execute_programs, args=() ) - thread_exec.start() - - # then gets data - while True : - try : - print("Waiting for data from server...") - data = s_data.recv(1024) - - if len(data) == 0 : - empty_inc = empty_inc + 1 - else : - empty_inc = 0 - - if empty_inc > 10 : - raise KeyboardInterrupt - - message = decode_message(data) - ret_val = handle_message(message) - if ret_val is not None : - s_data.send(str.encode(ret_val)) - elif ret_val == "-1" : - print("Closing data socket...") - raise KeyboardInterrupt - - except KeyboardInterrupt : - s_data.close() - stop = 1 - print(" Exiting...") - raise diff --git a/src/master b/src/master deleted file mode 100755 index 3780f53f16ff10064e5347ed933da2da8ba3ce36..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8504 zcmeHMU2Igx6`u8CFn{ZX@Z&&QZV9N+lm%1%OzOnzKdzDaDcEVF1}+asA zHfmZT6QV7JxKdLgMM$pl(o~g7-dyz|i(H|!eIXA~t0s{kYKozWLYsn23*LTb?m6qb z*XssVePpD&XU;e0oH=u5?%Xr8KWJ%ht?>Dj6u){(5jR@tAPw9w`6yRF8q_W|AHQEv zkEyxf=V;7nZ*T}&oifR$g;p`{2PM5-6%OE~kFlIk@sKFH#uBCEK#%-<&=O?9L)_nNaXHBT3+3Ue&HeGN9oshdM>qAyli9&dgS&QY+OaK^ zNrkrRag%+L-Lt<__eAq8p(US};USFLZ+y`9)9V9kzteeb_o-K3xsZP=^3;2zD-Ws< zT%LiXQAT?ntsn z4P@;Mup+SA_F*ko-D?JU-|hPErKtz(}RjiqC~ z@r)fyckFBGPbFg=k*M zng-N}?;}$;t`<<%?g&LCnrAC(LCv~JGxw4GC|tWa-*Ij6k;2uUQ1zNq+WwJo z@@krg{#_D0yZs*^o#w_V=$n_O{ATW!d1>Nl(|6f?XUeXD!8h69A~HCey_5C7hM3B3 zHizq9rdlWYv&cMC|3h#Si!tO06F-+Le+=G7?wlmYJ{yNgjEBUJ+~|P>)ez-|sCj12 z`V9~obsF?SGQK1@ze)yXE(Y&e= z-@G8<^iA%A?I%cpOL=*v)}fu`C+`&sTSzt#Yz@@xtzP)us*~#JRZo89YwPs(NcsrB zQm|V^luHfhb9gE+hI+!nf#B(irp5FQlifi)kE1OBT5M~BvtX(HJf0|#v7y*re;42l4ftqvvmVj|~PGexhk1EZ;meX_1z^>tW`vMK= zz^-s$OE|EhFG5VY=iK{y`PZDhvi`e9!B6{1Rf*;l1EA2#M^Z-H(JC- zOioVt*rHBxawEq$$+x=2d-z0ZUgCa>`DNUGmw6cnoBzKNId^&u9_R6&mI?6+d=4-9 z_MWDu-NuH_u58lI8aqSVLR&V~W;Iv){n}ljE!#r18y);}45HbORVn9sx3nKQj+}=} zalf)l&rT>e4&!} zt`uLSj+L1gzgnzD%Ho0I{Y$Bx>f(D`iU-w*EPPjkUo9!#AGlz|ZKe5yK7Xx?inO^8UIT{q(l-Ij zz*5BdB(Fnxjh6#A$dso%uko4dp;p`R2!m|`9>n?yde%v`mY?}v?4893BYzguFEw7H8rc60tU$+5iksrNNxy$! zJji&A<$nVj#QN;>#39A-1)YyI&dM$_7ZXb3_1akq z+;GWB^{c?w3ge>hYWp+yNfYuEhwJQ*KF^U}ciPU_*`A(Ix0=4#vh0M_O;=lVQx;8G zz5S`KNWT@eQ|XKq$quUSRAQh%X2+tTojdAwmKUPywYU{Yrz1mF49D#u)q`_(%!+0c zi6N-CI17??iD)817i@6KvRV&?_qA9p`> z7R=^D%G%R@pfTKT9cXPm+|prngd5vi$f~~n>&|4g&;RwBkFF0J8svIVUkb*e5j!GA zrtc6vQWi-$*MlmZ$|j?SQeC)c^j;fU(M-zfizK6TrPy`=3ekAd%4T9w73sF)$7B0b zQB2D~I-ax-I#(A5vNpUD2WS)&PVils40ovSG)pf+r`@CZ!&Rn)nC>{sUR;)5nojFe z5U?N;aQbk6#PLw6P-ZA$N4h}mv_t!(2G?Wh0ToK7>{uw=*tW@z^fK3*%!azMaol^y zqbfvPUnJ9~LeZfl>^am#bWqezm zB6*%rIX7^#mX$iu$MMkCCi;>O3N_H?F0zjbR*Q;TU-Cww>qL;LSHBtf9pviL|9P$m z75^oj@TN=qp-+3Y=#OzlXdZ1;Xgi}giN2hB=zj`2BZ$7_t3u_x1QA`xhPxaELuV1u zm%LVJkcGv6krVnn+UaZ~yyU+^<-FzfUwk-$3dL0PB~KQbXF=)TJN{Fw-^g;3PYad) zNq+?%ul_k;6chej6!UJ$zvWyA5na6Vp9AXFm;79)^v~+}hB`&)PdxgP#|ssIMPGQK z7d-m%-4^)+)LrbLjbSN}g$E0C4| diff --git a/src/master.c b/src/master.c deleted file mode 100755 index 8bbbb2c..0000000 --- a/src/master.c +++ /dev/null @@ -1,110 +0,0 @@ -#include -#include -#include "master.h" - -#define MASTERID = 0; -#define MAX_PROGRAM_NUMBER = 10; -#define MAX_PROGRAM_STR_LEN = 15; -int activeNodes[10]; //nodes active in the network. Assumes that all nodes have a unique id. -//char currentPrograms[MAX_PROGRAM_NUMBER][MAX_PROGRAM_STR_LEN]; //current programs : array of char pointers, each is a program string. - -void main() -{ - for(;;) - { - char program[50]; - printf("Entrez un programme à exécuter : \n"); - scanf("%s", program ); - - //calls roundRobin to decide where it should be executed - //sends it over the network - //gets program return output and print - - - } -} -/* -void initCurrentProgramsArray() -{ - int i=0; - while(iWX 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 Slylqa_GeTBUqVq~(Egt%A4k#v diff --git a/src/slave.c b/src/slave.c deleted file mode 100755 index 3846093..0000000 --- a/src/slave.c +++ /dev/null @@ -1,30 +0,0 @@ -#include - -int node_id ; // id of local node, passed as an argument from shell - -void main() -{ - // read id from command line - for(;;) - { - // receives message from master - // runs said program (already on local system) - // returns the return value to master - } -} - -char getsMessageFromMaster() -{ - // reads message from socket and returns a char[] or Message structure -} - -int returnProgramNameFromMessage(char message[]) -{ - // returns the formatted program string to be passed to system call -} - -int runProgram(char programName[], char args[]) -{ - // simple system call - return 1 ; // or any other return form. For the moment int. -} diff --git a/src/util.py b/src/util.py deleted file mode 100755 index 98d3c0b..0000000 --- a/src/util.py +++ /dev/null @@ -1,63 +0,0 @@ -import re -import subprocess - -regexp = "(.*) : (.*)" -prog = re.compile(regexp) - - -def add_client(addr) : - connections.append(addr) - print(connections) - -def del_client(addr) : - if addr in connections : - connections.remove(addr) - print(connections) - -def get_program_input() : - message = input("Entrez un programme à exécuter...") - return message - -def print_program_return(addr, ret_val) : - print("The program executed from " + str(addr) + " return the value " + str(ret_val)) - -def get_message_type(message) : - result=prog.findall(message) - if len(result) == 0 : - return None, None - return str(result[0][0]), str(result[0][1]) - -def get_data_port(message) : - clr_msg = decode_message(message) - mtype, mbody = get_message_type(clr_msg) - return int(mbody) - -def encode_message(message) : - return str.encode(message) - -def decode_message(raw_message) : - return raw_message.decode("utf-8") - -def execute_program(program) : - to_exec = program # executer en tâche de fond. - ret_val = subprocess.call(program + "&", shell=True) - return "val : " + str(ret_val) - -def handle_message(message): - mtype, mbody = get_message_type(message) - if mtype is None : - return None - if mtype == "prog" : - print("Received prog " + mbody ) - ret_val = execute_program(mbody) - return ret_val - if mtype == "clo" : - return -1 - elif mbody == "ret" : - print(message) - return None - -def round_robin() : - roundrobin_inc = roundrobin_inc + 1 - print("Roundrobin... inc = " + str(roundrobin_inc)) - return roundrobin_inc