public AsyncMessageSender CreateCommunicator(string commName, string mainName, string subName, string subKey, bool isMain, Action<string, object> receiveMessageProcessor) { AsyncMessageReceiver receiver = null; string mainToSubQueueName = string.Format("{0}_{1}_TO_{2}_{3}", commName, mainName, subName, subKey); string subToMainQueueName = string.Format("{0}_{1}_TO_{2}", commName, subName, mainName); if (isMain) { //main's receiver(DSDPS_CLIENT_SERVER) is shared on same system. if (subToMainReceiverDic.ContainsKey(subToMainQueueName)) { receiver = subToMainReceiverDic[subToMainQueueName]; } else { receiver = new AsyncMessageReceiver(commName, mainName, subName, subKey, isMain, receiveMessageProcessor); receiver.Init(); subToMainReceiverDic.Add(subToMainQueueName, receiver); } //main's sender(DSDPS_SERVER_CLIENT_XXXX) is not shared. return new AsyncMessageSender(commName, mainName, subName, subKey, isMain, receiver); } else { //sub's receiver is not shared. receiver = new AsyncMessageReceiver(commName, mainName, subName, subKey, isMain, receiveMessageProcessor); receiver.Init(); //sub's sender(DSDPS_CLIENT_SERVER) is shared, eg only one sender exists on system. if (subToMainSenderDic.ContainsKey(subToMainQueueName)) { return subToMainSenderDic[subToMainQueueName]; } else { AsyncMessageSender sender = new AsyncMessageSender(commName, mainName, subName, subKey, isMain, receiver); subToMainSenderDic.Add(subToMainQueueName, sender); return sender; } } }
public AsyncMessageSender(string commName, string mainName, string subName, string subKey, bool isMain, AsyncMessageReceiver receiver) { this.isMain = isMain; this.commName = commName; this.mainName = mainName; this.subName = subName; string mainToSubQueueName = string.Format("{0}_{1}_TO_{2}_{3}", commName, mainName, subName, subKey); string subToMainQueueName = string.Format("{0}_{1}_TO_{2}", commName, subName, mainName); if (isMain) { senderQueueName = mainToSubQueueName; } else { senderQueueName = subToMainQueueName; } this.receiver = receiver; }