some fixes + other output + analyse recoils instead of ions
[physik/nlsop.git] / nlsop_server.c
index 353979b..9adc6f8 100644 (file)
@@ -129,38 +129,19 @@ int save_job(unsigned char dc) {
   int ret;
   d3_lattice d3l;
   info info;
-  unsigned char data;
   t_job *j;
 
   j=(t_job *)priv.job.current->data;
 
-  printf("receiving data from client (%d)\n",j->size);
-  data=DATA_OK;
-
-  /* initial data_ok to start transmit on client */
-  network_send_chan(&(priv.net),gi,&data,sizeof(unsigned char));
+  printf("receiving data from client (#cells=%d)\n",j->size);
 
   network_receive_chan(&(priv.net),gi,(unsigned char *)&d3l,
                        sizeof(d3_lattice));
-  network_send_chan(&(priv.net),gi,&data,sizeof(unsigned char));
-  printf("debug: got d3_lattice\n");
-
   network_receive_chan(&(priv.net),gi,(unsigned char *)&info,sizeof(info));
-  network_send_chan(&(priv.net),gi,&data,sizeof(unsigned char));
-  printf("debug: got info\n");
-
   network_receive_chan(&(priv.net),gi,j->ac,j->size*sizeof(unsigned char));
-  network_send_chan(&(priv.net),gi,&data,sizeof(unsigned char));
-  printf("debug: got ac\n");
-
   network_receive_chan(&(priv.net),gi,(unsigned char *)j->cc,
                        j->size*sizeof(int));
-  network_send_chan(&(priv.net),gi,&data,sizeof(unsigned char));
-  printf("debug: got cc\n");
-
   network_receive_chan(&(priv.net),gi,(unsigned char *)&(j->step),sizeof(int));
-  network_send_chan(&(priv.net),gi,&data,sizeof(unsigned char));
-  printf("debug: got steps\n");
 
   if(dc!=DC_QUIT) {
     snprintf(filename,128,"./data/nlsop_b%f_c%f_s%f_ds%d_dr%f_-_%d_of_%d.save",
@@ -247,19 +228,26 @@ int send_status(void) {
 
   data=GUI_INFO;
 
-  count=list_count(&(priv.job));
-
-  printf("sending job info\n");
-
   network_send_chan(&(priv.net),gi,&data,sizeof(unsigned char));
-  network_send_chan(&(priv.net),gi,(unsigned char *)&count,sizeof(int));
+  printf("sending job + client list ...\n");
 
+  count=list_count(&(priv.job));
+  network_send_chan(&(priv.net),gi,(unsigned char *)&count,sizeof(int));
   list_reset(&(priv.job));
   for(i=0;i<count;i++) {
     network_send_chan(&(priv.net),gi,priv.job.current->data,sizeof(t_job));
     list_next(&(priv.job));
   }
 
+  count=list_count(&(priv.client));
+  network_send_chan(&(priv.net),gi,(unsigned char *)&count,sizeof(int));
+  list_reset(&(priv.client));
+  for(i=0;i<count;i++) {
+    network_send_chan(&(priv.net),gi,priv.client.current->data,
+                      sizeof(t_client));
+    list_next(&(priv.client));
+  }
+
   return 1;
 }
 
@@ -458,6 +446,8 @@ int parse_incoming(t_event *event,void *allineed) {
 
 void destroy_it(int signum) {
 
+  t_job *j;
+
   printf("connection to client (ch %d) fucked up!\n",gi);
   event_math(priv.net.connection[gi].fd,&(priv.event),READ,REMOVE);
   network_close(&(priv.net),gi);
@@ -465,6 +455,13 @@ void destroy_it(int signum) {
     list_del_current(&(priv.client));
     printf("removed client from list\n");
   }
+  if(list_search_data(&(priv.job),&gi,sizeof(int))==L_SUCCESS) {
+    printf("associated job found. resetting & queueing job.\n");
+    j=(t_job *)priv.job.current->data;
+    j->channel=-1;
+    j->status=IN_QUEUE;
+    j->progress=0;
+  }
   if(list_search_data(&(priv.gui),&gi,sizeof(int))==L_SUCCESS) {
     list_del_current(&(priv.gui));
     printf("removed gui from list\n");