ipc.java

来自「卡耐基.梅隆大学的机器人仿真软件(Redhat linux 9下安装)」· Java 代码 · 共 948 行 · 第 1/3 页

JAVA
948
字号
  public static int unsubscribeDisconnect (CONNECT_HANDLE_TYPE 					   disconnectHandler) {    return unsubscribeDisconnect(disconnectHandler.getClass());  }  public static int subscribeHandlerChange (String msgName, 					    CHANGE_HANDLE_TYPE					    handlerChangeHandler) {    /* Do it this way because multiple handlers can be subscribed        for same message */    List list = (List)handlerChangeHashTable.get(msgName);    if (list == null) {      list = new LinkedList();      handlerChangeHashTable.put(msgName, list);    }    list.add(0, handlerChangeHandler);    if (list.size() == 1) {	return IPC_subscribeHandlerChange(msgName);    } else {	return IPC_OK;    }  }  public static int unsubscribeHandlerChange (String msgName,					      Class handlerChangeHandlerClass) {    List handlerList = (List)handlerChangeHashTable.get(msgName);    if (handlerList == null) {      return IPC_Error;    } else if (!removeFromHandlerList(handlerList, handlerChangeHandlerClass)) {      System.out.println("No change handler found for message "+ msgName			   +" of class "+ handlerChangeHandlerClass.getName());      return IPC_Error;    } else if (handlerList.size() == 0) {      return IPC_unsubscribeHandlerChange(msgName);    } else {      return IPC_OK;    }  }  public static int unsubscribeHandlerChange (String msgName,					      CHANGE_HANDLE_TYPE					      handlerChangeHandler){    return unsubscribeHandlerChange(msgName, handlerChangeHandler.getClass());  }  public static int numHandlers (String msgName) {    return IPC_numHandlers(msgName);  }  public static int defineFormat (String formatName, String formatString) {    return IPC_defineFormat(formatName, formatString);  }  public static int checkMsgFormats (String formatName, String formatString) {    return IPC_checkMsgFormats(formatName, formatString);  }  public static int publishData (String msgName, Object data)  {    formatters.VARCONTENT varcontent = new formatters.VARCONTENT();    int retVal, marshallRet = IPC_OK;    try { marshallRet = formatters.marshall(IPC_msgFormatter(msgName), 					    coerceDataObject(data), 					    varcontent);    } catch ( Exception e) {       handleException("publishData", msgName, e);    }    if (marshallRet == IPC_Error) {      return IPC_Error;    } else {      retVal = IPC_publish(msgName, varcontent.length, varcontent.byteArray);      if (varcontent.byteArray != 0) IPC_freeByteArray(varcontent.byteArray);      return retVal;    }   }  /* Specialized versions of "publish" to handle primitive data types */  public static int publishData (String msgName, char data) {    return publishData(msgName, new formatters.IPCChar(data)); }  public static int publishData (String msgName, boolean data)  {    return publishData(msgName, new formatters.IPCBoolean(data)); }  public static int publishData (String msgName, byte data) {    return publishData(msgName, new formatters.IPCByte(data)); }  public static int publishData (String msgName, short data) {    return publishData(msgName, new formatters.IPCShort(data)); }  public static int publishData (String msgName, int data) {    return publishData(msgName, new formatters.IPCInteger(data)); }  public static int publishData (String msgName, long data) {    return publishData(msgName, new formatters.IPCLong(data)); }  public static int publishData (String msgName, float data) {    return publishData(msgName, new formatters.IPCFloat(data)); }  public static int publishData (String msgName, double data) {    return publishData(msgName, new formatters.IPCDouble(data)); }  public static int respondData (MSG_INSTANCE msgInstance, String msgName,				 Object data) {    formatters.VARCONTENT varcontent = new formatters.VARCONTENT();    int retVal, marshallRet = IPC_OK;    try {      marshallRet = formatters.marshall(IPC_msgFormatter(msgName), 					coerceDataObject(data), varcontent);    } catch ( Exception e) {      handleException("respondData", msgName, e);    }    if (marshallRet == IPC_Error) {      return IPC_Error;    } else {      retVal = IPC_respond(msgInstance.cptr, msgName,			   varcontent.length, varcontent.byteArray);      if (varcontent.byteArray != 0) IPC_freeByteArray(varcontent.byteArray);      return retVal;    }  }  /* Specialized versions of "respond" to handle primitive data types */  public static int respondData (MSG_INSTANCE msgInstance, String msgName,				 char data) {    return respondData(msgInstance, msgName, new formatters.IPCChar(data)); }  public static int respondData (MSG_INSTANCE msgInstance, String msgName,				 boolean data) {    return respondData(msgInstance, msgName, new formatters.IPCBoolean(data));}  public static int respondData (MSG_INSTANCE msgInstance, String msgName,				 byte data) {    return respondData(msgInstance, msgName, new formatters.IPCByte(data)); }  public static int respondData (MSG_INSTANCE msgInstance, String msgName,				 short data) {    return respondData(msgInstance, msgName, new formatters.IPCShort(data)); }  public static int respondData (MSG_INSTANCE msgInstance, String msgName,				 int data) {    return respondData(msgInstance, msgName, new formatters.IPCInteger(data));}  public static int respondData (MSG_INSTANCE msgInstance, String msgName,				 long data) {    return respondData(msgInstance, msgName, new formatters.IPCLong(data)); }  public static int respondData (MSG_INSTANCE msgInstance, String msgName,				 float data) {    return respondData(msgInstance, msgName, new formatters.IPCFloat(data)); }  public static int respondData (MSG_INSTANCE msgInstance, String msgName,				 double data) {    return respondData(msgInstance, msgName, new formatters.IPCDouble(data)); }  public static int queryNotifyData (String msgName, Object data,				     HANDLER_TYPE handler, Class responseClass)    {    formatters.VARCONTENT varcontent = new formatters.VARCONTENT();    int retVal, marshallRet = IPC_OK;    try {      marshallRet = formatters.marshall(IPC_msgFormatter(msgName), 					coerceDataObject(data), varcontent);    } catch ( Exception e) {      handleException("queryNotifyData", msgName, e);    }    if (marshallRet == IPC_Error) {      return IPC_Error;    } else {      int handlerNum = ++handlerNumber;      String hashKey = Integer.toString(handlerNum);          msgHashTable.put(hashKey, new handlerHashData(handler, responseClass));      retVal = IPC_queryNotify(msgName, varcontent.length, 			       varcontent.byteArray, handlerNum);      if (varcontent.byteArray != 0) IPC_freeByteArray(varcontent.byteArray);      return retVal;    }  }  /* Specialized versions of "queryNotify" to handle primitive data types */  public static int queryNotifyData (String msgName, char data,				     HANDLER_TYPE handler,				     Class responseClass) {    return queryNotifyData(msgName, new formatters.IPCChar(data),			   handler, responseClass); }  public static int queryNotifyData (String msgName, boolean data,				     HANDLER_TYPE handler,				     Class responseClass) {    return queryNotifyData(msgName, new formatters.IPCBoolean(data), 			   handler, responseClass); }  public static int queryNotifyData (String msgName, byte data,				     HANDLER_TYPE handler,				     Class responseClass) {    return queryNotifyData(msgName, new formatters.IPCByte(data),			   handler, responseClass); }  public static int queryNotifyData (String msgName, short data,				     HANDLER_TYPE handler,				     Class responseClass) {    return queryNotifyData(msgName, new formatters.IPCShort(data),			   handler, responseClass); }  public static int queryNotifyData (String msgName, int data,				     HANDLER_TYPE handler,				     Class responseClass) {    return queryNotifyData(msgName, new formatters.IPCInteger(data),			   handler, responseClass); }  public static int queryNotifyData (String msgName, long data,				     HANDLER_TYPE handler,				     Class responseClass) {    return queryNotifyData(msgName, new formatters.IPCLong(data),			   handler, responseClass); }  public static int queryNotifyData (String msgName, float data,				     HANDLER_TYPE handler,				     Class responseClass) {    return queryNotifyData(msgName, new formatters.IPCFloat(data),			   handler, responseClass); }  public static int queryNotifyData (String msgName, double data,				     HANDLER_TYPE handler,				     Class responseClass) {    return queryNotifyData(msgName, new formatters.IPCDouble(data),			   handler, responseClass); }  public static Object queryResponseData (String msgName, Object data,					  Class responseClass,					  long timeoutMSecs) {    formatters.VARCONTENT varcontent = new formatters.VARCONTENT();    Object responseObject = null;    int retVal;    try {      if (formatters.marshall(IPC_msgFormatter(msgName),coerceDataObject(data),			      varcontent) != IPC_Error) {	queryResponse response = new queryResponse();	retVal = IPC_queryResponse(msgName, varcontent.length,				   varcontent.byteArray, response,				   timeoutMSecs);	if (varcontent.byteArray != 0) IPC_freeByteArray(varcontent.byteArray);	if (retVal == IPC_OK && varcontent.byteArray != 0) {	  responseObject = unmarshallMsgData(response.formatter,					     response.byteArray,					     responseClass);	}      }    } catch ( Exception e) {      handleException("queryResponseData", msgName, e);    }    return responseObject;  }  /* Specialized versions of "queryResponse" to handle primitive data types */  public static Object queryResponseData (String msgName, char data,					  Class responseClass,					  long timeOutMSecs) {    return queryResponseData(msgName, new formatters.IPCChar(data),			     responseClass, timeOutMSecs); }  public static Object queryResponseData (String msgName, boolean data,					  Class responseClass,					  long timeOutMSecs) {    return queryResponseData(msgName, new formatters.IPCBoolean(data),			     responseClass, timeOutMSecs); }  public static Object queryResponseData (String msgName, byte data,					  Class responseClass,					  long timeOutMSecs) {    return queryResponseData(msgName, new formatters.IPCByte(data),			     responseClass, timeOutMSecs); }  public static Object queryResponseData (String msgName, short data,					  Class responseClass,					  long timeOutMSecs) {    return queryResponseData(msgName, new formatters.IPCShort(data),			     responseClass, timeOutMSecs); }  public static Object queryResponseData (String msgName, int data,					  Class responseClass,					  long timeOutMSecs) {    return queryResponseData(msgName, new formatters.IPCInteger(data),			     responseClass, timeOutMSecs); }  public static Object queryResponseData (String msgName, long data,					  Class responseClass,					  long timeOutMSecs) {    return queryResponseData(msgName, new formatters.IPCLong(data),			     responseClass, timeOutMSecs); }  public static Object queryResponseData (String msgName, float data,					  Class responseClass,					  long timeOutMSecs) {    return queryResponseData(msgName, new formatters.IPCFloat(data),			     responseClass, timeOutMSecs); }  public static Object queryResponseData (String msgName, double data,					  Class responseClass,					  long timeOutMSecs) {    return queryResponseData(msgName, new formatters.IPCDouble(data),			     responseClass, timeOutMSecs); }  public static IPC_CONTEXT getContext () {       return new IPC_CONTEXT(IPC_getContext());  }  public static int setContext (IPC_CONTEXT context) {    return IPC_setContext(context.cptr);  }  public static long getPID() {    return IPC_getPID();  }  public static int addTimer (long tdelay, long count, 			      TIMER_HANDLER_TYPE handler) {    int handlerNum = ++handlerNumber;    String hashKey = Integer.toString(handlerNum);    timerHashTable.put(handler.getClass().getName(), hashKey);    timerHashTable.put(hashKey, handler);    return IPC_addTimer(tdelay, count, handlerNum);  }  public static int addTimerGetRef (long tdelay, long count, 				    TIMER_HANDLER_TYPE handler,				    TIMER_REF timerRef) {    int refVal, handlerNum = ++handlerNumber;    String hashKey = Integer.toString(handlerNum);    timerHashTable.put(hashKey, handler);    refVal = IPC_addTimerGetRef(tdelay, count, handlerNum);    if (refVal == 0) {      return IPC_Error;

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?