/// <summary> /// removed since v0.5 /// </summary> /// <param name="cmd"></param> /// <param name="messageDelegate"></param> public void Send(HMessage message, Action <HMessage> messageDelegate) { if (this.connectionStatus != ConnectionStatus.CONNECTED) { notifyResultError(message.GetMsgid(), ResultStatus.NOT_CONNECTED, "Not connected.", messageDelegate); return; } if (message == null) { notifyResultError(null, ResultStatus.MISSING_ATTR, "Provided message is null.", messageDelegate); return; } if (message.GetActor() == null) { notifyResultError(message.GetMsgid(), ResultStatus.MISSING_ATTR, "Actor is missing.", messageDelegate); return; } message.SetSent(DateTime.UtcNow); message.SetPublisher(transportOptions.FullUrn); if (message.GetTimeout() > 0) { // hAPI will do correlation. If no answer within the // timeout, a timeout error will be sent. if (messageDelegate != null) { message.SetMsgid(Guid.NewGuid().ToString()); messageDelegates.Add(message.GetMsgid(), messageDelegate); ThreadPoolTimer timeOutTimer = ThreadPoolTimer.CreateTimer((obj) => { notifyResultError(message.GetMsgid(), ResultStatus.EXEC_TIMEOUT, "The response of message is time out.", null); }, new TimeSpan(0, 0, 0, 0, message.GetTimeout())); timerOutDictionary.Add(message.GetMsgid(), timeOutTimer); } else { //when there is no callback, timeout has no sense. delete timeout. message.SetTimeout(0); } } transportManager.SendObject(message); }