Alphabetical Class Index  Class Hierarchy   File Members   Compound Members   File List  

HNetMessageRegistrar.h
1 //
2 // Copyright (c) 2005 by Tech Soft 3D, LLC.
3 // The information contained herein is confidential and proprietary to
4 // Tech Soft 3D, LLC., and considered a trade secret as defined under
5 // civil and criminal statutes. Tech Soft 3D shall pursue its civil
6 // and criminal remedies in the event of unauthorized use or misappropriation
7 // of its trade secrets. Use of this information by anyone other than
8 // authorized employees of Tech Soft 3D, LLC. is granted only under a
9 // written non-disclosure agreement, expressly prescribing the scope and
10 // manner of such use.
11 //
12 // $Id: 816a47120dc6f794cd644c33a63982eea66d395d $
13 //
14 #ifndef _HNetMessageRegistrar_H
15 #define _HNetMessageRegistrar_H
16 
17 #ifndef _HNET_MESSAGE_REGISTRAR
18 #define _HNET_MESSAGE_REGISTRAR
19 
20 #ifdef H_PACK_8
21 #pragma pack(push)
22 #pragma pack(8)
23 #endif
24 
25 #include "HBaseView.h"
26 #include "HOpObjectAnnotate.h"
27 #include "HOpCreateNurbs3D.h"
28 #include "HMarkupManager.h"
29 #include "vhash.h"
30 #include <stdio.h>
31 
32 
36 class MVOMessageHandler: public HNetMessageHandler {
37 
38 public:
43  m_pHBaseView = hbaseview;
44  };
51  const char * message_type,
52  const char * data,
53  unsigned int data_length) {;};
54 
55 protected:
58 };
59 
64 public:
75  const char * message_type,
76  const char * data,
77  unsigned int data_length) {
78  m_pHBaseView->SetCameraFromMessage(data, data_length);
79  };
80 };
81 
86 public:
97  const char * message_type,
98  const char * data,
99  unsigned int data_length) {
100  m_pHBaseView->SetRenderModeFromMessage(data, data_length);
101  };
102 };
103 
104 
109 public:
120  const char * message_type,
121  const char * data,
122  unsigned int data_length) {
123 
124  m_pHBaseView->InsertHSFDataFromMessage(data, data_length);
125  };
126 };
127 
132 public:
137 
144  const char * message_type,
145  const char * data,
146  unsigned int data_length) {
147 
148  m_pHBaseView->FlushFromMessage(data, data_length);
149  };
150 };
151 
152 
156 class HDevNullMessageHandler: public HNetMessageHandler {
157 public:
164  const char * message_type,
165  const char * data,
166  unsigned int data_length) {
167 
168  };
169 };
170 
176 public:
190  const char * message_type,
191  const char * data,
192  unsigned int data_length) {
193 
194  if (strcmp(message_type,"H_DESELECT_ALL") == 0)
196  else if (strcmp(message_type,"H_DELETE_SELECTION_LIST") == 0)
198  else
199  m_pHBaseView->SelectFromMessage(data, data_length);
200  };
201 };
202 
203 
208 public:
213 
220  const char * message_type,
221  const char * data,
222  unsigned int data_length) {
223 
224  m_pHBaseView->DeleteByKeyFromMessage(data, data_length);
225  };
226 };
227 
228 
233 public:
244  const char * message_type,
245  const char * data,
246  unsigned int data_length) {
247 
248  m_pHBaseView->SetWindowColorFromMessage(data, data_length);
249  };
250 };
251 
256 public:
267  const char * message_type,
268  const char * data,
269  unsigned int data_length) {
270 
271  m_pHBaseView->SetModellingMatrixFromMessage(data, data_length);
272  };
273 };
274 
280 public:
294  const char * message_type,
295  const char * data,
296  unsigned int data_length) {
297 
298  if (strcmp(message_type,"H_INSERT_MARKUP_LAYER_HSF_DATA") == 0)
300  else if (strcmp(message_type,"H_SET_MARKUP_LAYER") == 0)
302  else if (strcmp(message_type,"H_DISABLE_CURRENT_MARKUP_LAYER") == 0)
304  };
305 };
306 
311 public:
316 
323  const char * message_type,
324  const char * data,
325  unsigned int data_length) {
326 
328  };
329 };
330 
336 public:
350  const char * message_type,
351  const char * data,
352  unsigned int data_length) {
353 
354  if (strcmp(message_type,"H_INSERT_NURBS") == 0)
356  else if(strcmp(message_type,"H_FINISH_NURBS_EDITING") == 0)
358  else if(strcmp(message_type,"H_MODIFY_CONTROL_POINT") == 0)
360  };
361 };
362 
367 public:
378  const char * message_type,
379  const char * data,
380  unsigned int data_length) {
381  m_pHBaseView->SetHandednessFromMessage(data, data_length);
382  };
383 };
384 
389 public:
400  const char * message_type,
401  const char * data,
402  unsigned int data_length) {
403  m_pHBaseView->SetFontSizeFromMessage(data, data_length);
404  };
405 };
406 
407 
409 
414 
415 public:
416 
424  HBaseView * new_hbaseview,
425  HNetClient * new_hnetclient=0) {
426 
427  hbaseview=new_hbaseview;
428  hnetclient=new_hnetclient;
429 
430  if(!hnetclient)
431  message_handler_hash = new_vhash(1, malloc, free);
432  else
433  message_handler_hash = 0;
434 
435  default_message_handler=0;
436 
437  };
438 
444 
445  UnSetHandlers();
446 
447  if(message_handler_hash) {
448  delete_vhash(message_handler_hash);
449  message_handler_hash=0;
450  }
451  }
452 
462  virtual void SetHandlers(){
463 
465  SetMessageHandler( new HSetRenderModeMessageHandler(hbaseview), "H_SET_RENDERMODE");
466  SetMessageHandler( new HInsertHSFDataMessageHandler(hbaseview), "H_INSERT_HSF_DATA");
467  SetMessageHandler( new HFlushBaseViewMessageHandler(hbaseview), "H_FLUSH_BASE_VIEW");
468  SetMessageHandler( new HDevNullMessageHandler(), "H_DEV_NULL_DATA");
469  SetMessageHandler( new HSelectMessageHandler(hbaseview), "H_SELECT_ENTITY");
470  SetMessageHandler( new HSelectMessageHandler(hbaseview), "H_DESELECT_ALL");
471  SetMessageHandler( new HDeleteByKeyMessageHandler(hbaseview), "H_DELETE_BY_KEY");
472  SetMessageHandler( new HSelectMessageHandler(hbaseview), "H_DELETE_SELECTION_LIST");
473  SetMessageHandler( new HSetModellingMatrixMessageHandler(hbaseview), "H_SET_MODELLING_MATRIX");
474  SetMessageHandler( new HAnnotateObjectMessageHandler(hbaseview), "H_ANNOTATE_OBJECT");
475  SetMessageHandler( new HNurbsMessageHandler(hbaseview), "H_INSERT_NURBS");
476  SetMessageHandler( new HNurbsMessageHandler(hbaseview), "H_MODIFY_CONTROL_POINT");
477  SetMessageHandler( new HNurbsMessageHandler(hbaseview), "H_FINISH_NURBS_EDITING");
478  SetMessageHandler( new HSetWindowColorMessageHandler(hbaseview), "H_SET_WINDOW_COLOR");
479  SetMessageHandler( new HMarkupMessageHandler(hbaseview), "H_DISABLE_MARKUP_LAYER");
480  SetMessageHandler( new HMarkupMessageHandler(hbaseview), "H_SET_MARKUP_LAYER");
481  SetMessageHandler( new HMarkupMessageHandler(hbaseview), "H_INSERT_MARKUP_LAYER_HSF_DATA");
482  SetMessageHandler( new HSetHandednessMessageHandler(hbaseview), "H_SET_HANDEDNESS");
483  SetMessageHandler( new HSetFontSizeMessageHandler(hbaseview), "H_SET_FONT_SIZE");
484 
485  };
486 
492  virtual void UnSetHandlers(){
493 
494  if(hnetclient){
495 
496  hnetclient->EnumerateMessageHandlers(
497  net_unset_message_handler_helper, hnetclient);
498 
499  }else
500  if(message_handler_hash){
501  vhash_string_key_map_function(
502  message_handler_hash,
503  non_net_unset_message_handler_helper,
504  (void*)this);
505  }
506 
507  };
508 
533  virtual HNetMessageHandler * SetMessageHandler(
534  HNetMessageHandler * handler,
535  const char * message_type)
536  {
537  HNetMessageHandler * old_handler=0;
538  if(hnetclient)
539  old_handler = hnetclient->SetMessageHandler(handler,message_type);
540  else
541  if(message_type){
542  old_handler = (HNetMessageHandler *)vhash_remove_string_key(message_handler_hash, message_type);
543  if(handler)
544  vhash_insert_string_key(message_handler_hash, message_type, (void*) handler);
545  }else{
546  if(default_message_handler) old_handler = default_message_handler;
547  default_message_handler = handler;
548  }
549  return old_handler;
550  }
551 
561  bool ReadSnapFile(const char * file_name) {
562 
563  FILE * file = fopen(file_name,"rb");
564 
565  if(file==NULL) return false;
566  if(hnetclient) return false;
567 
568  unsigned long line_number = 0;
569  unsigned long line_buffer_size = 1024;
570  char * line_buffer;
571  unsigned long n;
572  unsigned long expected_n;
573  int a_char;
574  int read_again = 1;
575 
576  line_buffer = (char*) malloc(line_buffer_size);
577  fseek(file,0,SEEK_SET);
578 
579 READ_A_LINE:
580  n=0;
581  expected_n=0;
582  line_number++;
583 
584  while(1) {
585  /*resize buffer as needed*/
586  if(n == line_buffer_size) {
587  char * new_line_buffer;
588  new_line_buffer = (char*) malloc(line_buffer_size*2);
589  memcpy(new_line_buffer, line_buffer, line_buffer_size);
590  free(line_buffer);
591  line_buffer = new_line_buffer;
592  line_buffer_size = line_buffer_size*2;
593  }
594  a_char = fgetc(file);
595  if(a_char == EOF) {
596  read_again=0;
597  break;
598  }
599  if(expected_n) {
600  line_buffer[n] = (char) a_char;
601  n++;
602  if(n==expected_n) {
603  /*have a whole line*/
604  ProcessMessage(line_buffer, n);
605  break;
606  }
607  }else{
608  if(a_char == 0x0D || a_char == 0x0A) {
609  if(n == 0) continue;
610  /*this is a error in the file*/
611  read_again=0;
612  break;
613  }
614  if (a_char == ' ') {
615  line_buffer[n] = '\0';
616  sscanf(line_buffer, "%ld", &expected_n);
617  n=0;
618  }else{
619  line_buffer[n] = (char) a_char;
620  n++;
621  }
622  }
623  }
624  if(read_again)
625  goto READ_A_LINE;
626  free(line_buffer);
627  return true;
628  };
629 
630 
631 protected:
632 
640  virtual void ProcessMessage(
641  const char * message,
642  unsigned long message_length) {
643 
644  if(hnetclient) return;
645 
646  char * message_type = (char*) malloc(message_length);
647  unsigned long n = 0;
648 
649  while(n < message_length && message[n] != ' ') {
650  message_type[n] = message[n];
651  n++;
652  }
653  message_type[n] = '\0';
654  n++;
655  HNetMessageHandler * message_handler =
656  (HNetMessageHandler *) vhash_lookup_string_key(message_handler_hash, message_type);
657 
658  if(!message_handler)
659  message_handler = default_message_handler;
660  if(message_handler)
661  message_handler->ProcessMessage(message_type, &message[n], message_length-n);
662  free(message_type);
663  }
664 
668  HNetClient * hnetclient;
669 
670 private:
671  struct vhash_s * message_handler_hash;
672  HNetMessageHandler * default_message_handler;
673 
674  static void net_unset_message_handler_helper(
675  void * handler,
676  const char * message,
677  void * user_data){
678 
679  ((HNetClient*)user_data)->SetMessageHandler(0,message);
680  delete (HNetMessageHandler*)handler;
681  };
682 
683  static void non_net_unset_message_handler_helper(
684  void * handler,
685  const char * message,
686  void * user_data){
687 
688  HNetMessageRegistrar * self = (HNetMessageRegistrar *) user_data;
689  self->SetMessageHandler(0,message);
690  delete (HNetMessageHandler*)handler;
691  };
692 
693 };
694 
695 
696 #ifdef H_PACK_8
697 #pragma pack(pop)
698 #endif
699 
700 #endif
701 #endif
702 
703 
704 
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:243
HInsertHSFDataMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:113
HBaseView * m_pHBaseView
A pointer to an HBaseView object.
Definition: HNetMessageRegistrar.h:53
virtual void SetHandlers()
Definition: HNetMessageRegistrar.h:462
Definition: HNetMessageRegistrar.h:156
HAnnotateObjectMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:315
virtual void FlushFromMessage(const char *in_data, unsigned int data_length)
HSetHandednessMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:371
Definition: HNetMessageRegistrar.h:232
HNetClient * hnetclient
This is the HNetClient for this registrar.
Definition: HNetMessageRegistrar.h:668
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:96
HSetRenderModeMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:90
static void FinishNurbsEditingFromMessage(const char *in_data, unsigned int data_length, HBaseView *pView)
The HNetMessageRegistrar class maps messages from HNetClients or .snap files to MVO calls...
Definition: HNetMessageRegistrar.h:413
HMarkupManager * GetMarkupManager()
HSetWindowColorMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:237
virtual void SetFontSizeFromMessage(const char *in_data, unsigned int data_length)
virtual void DisableCurrentMarkupLayerFromMessage(const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:85
HSetCameraMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:68
Definition: HNetMessageRegistrar.h:366
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:143
HSelectMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:180
Definition: HNetMessageRegistrar.h:207
Definition: HNetMessageRegistrar.h:335
bool ReadSnapFile(const char *file_name)
Definition: HNetMessageRegistrar.h:561
HSetFontSizeMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:393
HNetMessageRegistrar(HBaseView *new_hbaseview, HNetClient *new_hnetclient=0)
Definition: HNetMessageRegistrar.h:423
HBaseView * hbaseview
This is the HBaseView for this registrar.
Definition: HNetMessageRegistrar.h:666
Definition: HNetMessageRegistrar.h:63
HFlushBaseViewMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:136
virtual HNetMessageHandler * SetMessageHandler(HNetMessageHandler *handler, const char *message_type)
Definition: HNetMessageRegistrar.h:533
Definition: HNetMessageRegistrar.h:108
virtual void DeleteSelectionList(bool emit_message=false)
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:189
HDeleteByKeyMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:212
Definition: HNetMessageRegistrar.h:175
virtual void SetRenderModeFromMessage(const char *in_data, unsigned int data_length)
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:219
The HBaseView class defines and manages a view of model information.
Definition: HBaseView.h:337
MVOMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:42
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:293
virtual void SetWindowColorFromMessage(const char *in_data, unsigned int data_length)
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:349
Definition: HNetMessageRegistrar.h:388
virtual void DeSelectAllFromMessage()
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:119
HSetModellingMatrixMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:260
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:377
Definition: HNetMessageRegistrar.h:36
virtual void DeleteByKeyFromMessage(const char *in_data, unsigned int data_length)
virtual ~HNetMessageRegistrar()
Definition: HNetMessageRegistrar.h:443
Definition: HNetMessageRegistrar.h:255
static void AnnotateObjectFromMessage(HBaseView *pView, const char *in_data, unsigned int data_length)
static void InsertNurbsFromMessage(const char *in_data, unsigned int data_length, HBaseView *m_pView)
Definition: HNetMessageRegistrar.h:310
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:399
Definition: HNetMessageRegistrar.h:131
virtual void SetModellingMatrixFromMessage(const char *in_data, unsigned int data_length)
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:322
virtual void SetMarkupLayerFromMessage(const char *data, unsigned int data_length)
virtual void UnSetHandlers()
Definition: HNetMessageRegistrar.h:492
Definition: HNetMessageRegistrar.h:279
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:266
virtual void InsertHSFDataFromMessage(const char *in_data, unsigned int data_length)
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:163
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:50
virtual void SelectFromMessage(const char *in_data, unsigned int data_length)
HNurbsMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:340
HMarkupMessageHandler(HBaseView *hbaseview)
Definition: HNetMessageRegistrar.h:284
virtual void ProcessMessage(const char *message, unsigned long message_length)
Definition: HNetMessageRegistrar.h:640
static void ModifyControlPointFromMessage(const char *in_data, unsigned int data_length, HBaseView *pView)
virtual void InsertMarkupSegmentFromMessage(const char *in_data, unsigned int data_length)
virtual void SetHandednessFromMessage(const char *in_data, unsigned int data_length)
void ProcessMessage(const char *message_type, const char *data, unsigned int data_length)
Definition: HNetMessageRegistrar.h:74
virtual void SetCameraFromMessage(const char *data, unsigned int data_length)