TibrvSender

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using System.Xml;

namespace TibrvSender
{
    public partial class MainForm : Form
    {
        #region Valiable

        private string service = "";
        private string network = "";
        private string daemon = "";
        private string targetSubject = "";
        private string sourceSubject = "";

        private SortedList<object, object> messageQueue;
        private const string FIELD_NAME = "xmlData";
        private TibrvListener tibrvListener;
        private Thread dispatcher;
        private TIBCO.Rendezvous.Listener listener;
        private SortedList<object, object> reqMessageQueue;

        TIBCO.Rendezvous.Transport transport = null;

        #endregion

        #region Main funtions

        public MainForm()
        {
            CheckForIllegalCrossThreadCalls = false;

            InitializeComponent();

        }

        private void MainForm_Load(object sender, EventArgs e){}

        private void InitializeTibrv()
        {
            this.messageQueue = new SortedList<object, object>();

            try
            {
                TIBCO.Rendezvous.Environment.Open();
            }
            catch (TIBCO.Rendezvous.RendezvousException e)
            {
                return;
            }

            try
            {
                this.transport = new TIBCO.Rendezvous.NetTransport(this.service, this.network, this.daemon);
            }
            catch (TIBCO.Rendezvous.RendezvousException e)
            {
                return;
            }

            try
            {
                this.listener = new TIBCO.Rendezvous.Listener(TIBCO.Rendezvous.Environment.DefaultQueue, this.transport, sourceSubject, null);
                this.listener.MessageReceived += new TIBCO.Rendezvous.MessageReceivedEventHandler(listener_MessageReceived);

                this.dispatcher = new Thread(new ThreadStart(Run));
                this.dispatcher.Start();

                this.textBoxService.Enabled = false;
                this.textBoxNetwork.Enabled = false;
                this.textBoxDaemon.Enabled = false;
                this.textBoxTargetSubject.Enabled = false;
                this.textBoxSourceSubject.Enabled = false;

                this.ConnectBox.BackColor = Color.Lime;
                this.ConnectBox.Text = "Connected";

                WriteView(string.Format("Initialize Success!"));
            }
            catch (TIBCO.Rendezvous.RendezvousException e)
            {
                return;
            }
        }

        private void FinalizeTibrv()
        {
            try
            {
                if (this.listener != null)
                {
                    this.listener.MessageReceived -= new TIBCO.Rendezvous.MessageReceivedEventHandler(listener_MessageReceived);
                    this.listener.Destroy();
                    this.listener = null;
                }

                if (this.transport != null)
                {
                    this.transport.Destroy();
                    this.transport = null;
                }

                if (this.messageQueue != null)
                {
                    this.messageQueue.Clear();
                    this.messageQueue = null;
                }

                if (this.dispatcher != null)
                {
                    this.dispatcher.Join(1000);
                    this.dispatcher = null;
                }

                TIBCO.Rendezvous.Environment.Close();

                WriteView("Tibrv finalization succeeded");

                this.ConnectBox.Text = "DisConnected";
                this.ConnectBox.BackColor = Color.Red;

                this.textBoxService.Enabled = true;
                this.textBoxNetwork.Enabled = true;
                this.textBoxDaemon.Enabled = true;
                this.textBoxTargetSubject.Enabled = true;
                this.textBoxSourceSubject.Enabled = true;
            }
            catch (TIBCO.Rendezvous.RendezvousException exception)
            {
                System.Environment.Exit(1);
            }
            catch (Exception ex)
            {
                WriteView(ex.Message);
                WriteView(ex.StackTrace);
                System.Environment.Exit(1);
            }
        }

        private void Run()
        {
            while (this.dispatcher != null && this.dispatcher.IsAlive)
            {
                try
                {
                    TIBCO.Rendezvous.Environment.DefaultQueue.Dispatch();
                    Thread.Sleep(100);
                }
                catch { }
            }
        }

        private void Send(string message)
        {
            TIBCO.Rendezvous.Message tibMessage = new TIBCO.Rendezvous.Message();

            try
            {
                if (string.IsNullOrEmpty(targetSubject)) 
                {
                    WriteView("Initialize Tibrv");
                    
                    return;
                }

                tibMessage.SendSubject = targetSubject;

                if (string.IsNullOrEmpty(sourceSubject))
                {
                    WriteView("Initialize Tibrv");
                    
                    return;
                }

                tibMessage.ReplySubject = sourceSubject;

                tibMessage.AddField(FIELD_NAME, message);
                                
                transport.Send(tibMessage);
            }
            catch (TIBCO.Rendezvous.RendezvousException exception)
            {
                System.Environment.Exit(1);
            }

            WriteView(string.Format("Publishing: subject={0} \"{1}\"", tibMessage.SendSubject, message));

            tibMessage.Dispose();
        }

        private void SendReply(string message, string replySubject)
        {
            TIBCO.Rendezvous.Message tibMessage = new TIBCO.Rendezvous.Message();

            try
            {
                if (string.IsNullOrEmpty(replySubject))
                {
                    WriteView("Initialize Tibrv");

                    return;
                }

                tibMessage.SendSubject = replySubject;

                if (string.IsNullOrEmpty(sourceSubject))
                {
                    WriteView("Initialize Tibrv");

                    return;
                }

                tibMessage.ReplySubject = sourceSubject;

                tibMessage.AddField(FIELD_NAME, message);

                transport.Send(tibMessage);
            }
            catch (TIBCO.Rendezvous.RendezvousException exception)
            {
                System.Environment.Exit(1);
            }

            WriteView(string.Format("Publishing: subject={0} \"{1}\"", tibMessage.SendSubject, message));

            tibMessage.Dispose();
        }

        void listener_MessageReceived(object listener, TIBCO.Rendezvous.MessageReceivedEventArgs messageReceivedEventArgs)
        {
            try
            {
                TIBCO.Rendezvous.MessageField messageField = messageReceivedEventArgs.Message.GetFieldByIndex(0);

                string receivedMessage = ((string)messageField.Value).Trim();

                if (replyFlag.Checked)
                {
                    string replySubject = messageReceivedEventArgs.Message.ReplySubject;

                    //XmlDocument xdoc = new XmlDocument();
                    //xdoc.LoadXml(receivedMessage);
                    // xmlItem = xdoc.SelectSingleNode("//Message//Body//JOBNAME");
                    //XmlNode xmlItem2 = xdoc.SelectSingleNode("//Message//Header//ORIGINALSOURCESUBJECTNAME");

                    //string newJobName = xmlItem.InnerText.ToString();
                    //string newOriginName = xmlItem2.InnerText.ToString();

                    //receivedMessage = this.txtSend.Text;

                    //XmlDocument xdoc1 = new XmlDocument();
                    //xdoc1.LoadXml(receivedMessage);
                    //XmlNode xmlItem1 = xdoc1.SelectSingleNode("//Message//Body//JOBNAME");
                    //XmlNode xmlItem3 = xdoc1.SelectSingleNode("//Message//Header//ORIGINALSOURCESUBJECTNAME");

                    //string oldJobName = xmlItem1.InnerText.ToString();
                    //string oldOriginName = xmlItem3.InnerText.ToString();

                    //receivedMessage = receivedMessage.Replace(oldJobName, newJobName);
                    //receivedMessage = receivedMessage.Replace(oldOriginName, newOriginName);

                    receivedMessage = this.txtSend.Text;

                    SendReply(receivedMessage, replySubject);
                }

                WriteView(string.Format("Publishing: subject={0} \"{1}\"", targetSubject, receivedMessage));
            }
            catch (TIBCO.Rendezvous.RendezvousException exception)
            {
                System.Environment.Exit(1);
            }
        }

        void OnMessageReceived(object listener, TIBCO.Rendezvous.MessageReceivedEventArgs messageReceivedEventArgs)
        {
            tibrvListener.OnMessage(messageReceivedEventArgs.Message);
        }

        #endregion

        #region etc funtions

        private void WriteView(string message)
        {
            if (txtView.TextLength > 10000) txtView.Clear();

            txtView.AppendText(message + System.Environment.NewLine);

            txtView.ScrollToCaret();
        }

        #endregion

        #region Events

        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            FinalizeTibrv();
        }

        private void btnSend_Click(object sender, EventArgs e)
        {
            if (txtSend.Text == "")
            {
                WriteView("Enter Tibrv Massage");

                return;
            }

            if (replyFlag.Checked)
            {
                MessageBox.Show("Reply Flag is Enabled.");

                return;
            }

            string[] msgList = txtSend.Text.Split(';');

            int i = 0;

            foreach (string message in msgList)
            {
                Send(message.Trim());
                WriteView((++i).ToString());
                Thread.Sleep(2000);
            }
            
        }

        private void txtSend_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                btnSend_Click(null, null);
                e.Handled = true;
            }
        }

        private void buttonInitialize_Click(object sender, EventArgs e)
        {
            targetSubject = textBoxTargetSubject.Text.Trim();
            sourceSubject = this.textBoxSourceSubject.Text.Trim();

            if (string.IsNullOrEmpty(targetSubject)) { WriteView("Enter targetSubject"); return; }
            if (string.IsNullOrEmpty(sourceSubject)) { WriteView("Enter sourceSubject"); return; }
            WriteView("Initializing Tibrv....");

            service = textBoxService.Text.Trim();
            network = textBoxNetwork.Text.Trim();
            daemon = textBoxDaemon.Text.Trim();

            InitializeTibrv();            
        }

        private void buttonTerminate_Click(object sender, EventArgs e)
        {
            FinalizeTibrv();
        }

        private void clearLogToolStripMenuItem_Click(object sender, EventArgs e)
        {
            txtView.Clear();   
        }

        private void clearMessegeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            txtSend.Clear();
        }

        #endregion
    }
}

using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;

namespace TibrvSender
{
    static class Program
    {
        /// <summary>
        /// 해당 응용 프로그램의 주 진입점입니다.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new MainForm());
        }
    }
}
using System;
using System.Collections.Generic;

namespace TibrvSender
{
    public class TibrvAdapter : TibrvListener
    {
        private List<TibrvListener> tibrvListener = new List<TibrvListener>();

        private TibrvManager tibrvManager;

        public TibrvAdapter()
        {
            this.tibrvManager = new TibrvManager(this);
        }

        public void AddTibrvListener(TibrvListener tibrvListener)
        {
            this.tibrvListener.Add(tibrvListener);
        }

        public void RemoveTibrvListener(TibrvListener tibrvListener)
        {
            this.tibrvListener.Remove(tibrvListener);
        }

        public bool Initialize(string sourceSubject, string targetSubject, string service, string network, string daemon)
        {
            try
            {

                if (this.tibrvManager.Initialize(sourceSubject, targetSubject, service, network, daemon))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool Initialize(string fieldKey, string sourceSubject, string targetSubject, string service, string network, string daemon)
        {
            try
            {

                if (this.tibrvManager.Initialize(fieldKey, sourceSubject, targetSubject, service, network, daemon))
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool Terminate()
        {
            try
            {
                if (this.tibrvManager.Terminate())
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        //public TIBCO.Rendezvous.Message RequestSync(string targetSubject, string message, double timeout)
        //{
        //    try
        //    {
        //        targetSubject = GetTargetSubject(targetSubject);

        //        TIBCO.Rendezvous.Message replyMessage = this.tibrvManager.SendRequest(targetSubject, message, timeout);

        //        if (replyMessage == null)

        //            return replyMessage;
        //    }
        //    catch (Exception e)
        //    {
        //        return null;
        //    }
        //}

        //public TIBCO.Rendezvous.Message RequestSync(string targetSubject, SortedList<object, object> messages, double timeout)
        //{
        //    try
        //    {
        //        targetSubject = GetTargetSubject(targetSubject);

        //        TIBCO.Rendezvous.Message replyMessage = this.tibrvManager.SendRequest(targetSubject, messages, timeout);

        //        if (replyMessage == null)

        //            return replyMessage;
        //    }
        //    catch (Exception e)
        //    {
        //        return null;
        //    }
        //}

        //public TIBCO.Rendezvous.Message RequestSync(string targetSubject, TIBCO.Rendezvous.Message message, double timeout)
        //{
        //    try
        //    {
        //        targetSubject = GetTargetSubject(targetSubject);

        //        TIBCO.Rendezvous.Message replyMessage = this.tibrvManager.SendRequest(targetSubject, message, timeout);

        //        if (replyMessage == null)

        //            return replyMessage;
        //    }
        //    catch (Exception e)
        //    {
        //        return null;
        //    }
        //}

        public bool RequestAsync(string targetSubject, string message)
        {
            try
            {
                targetSubject = GetTargetSubject(targetSubject);

                if (this.tibrvManager.Send(targetSubject, message))
                    return true;
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool RequestAsync(string targetSubject, SortedList<object, object> messages)
        {
            try
            {
                targetSubject = GetTargetSubject(targetSubject);

                if (this.tibrvManager.Send(targetSubject, messages))
                    return true;
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool RequestAsync(string targetSubject, TIBCO.Rendezvous.Message message)
        {
            try
            {
                targetSubject = GetTargetSubject(targetSubject);

                if (this.tibrvManager.Send(targetSubject, message))
                    return true;
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool ReplySync(string targetSubject, TIBCO.Rendezvous.Message message, string reply)
        {
            try
            {
                targetSubject = GetTargetSubject(targetSubject);

                if (this.tibrvManager.SendReplySync(targetSubject, message, reply))
                    return true;
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool ReplySync(string targetSubject, TIBCO.Rendezvous.Message message, SortedList<object, object> replys)
        {
            try
            {
                targetSubject = GetTargetSubject(targetSubject);

                if (this.tibrvManager.SendReplySync(targetSubject, message, replys))
                    return true;
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool ReplySync(string targetSubject, TIBCO.Rendezvous.Message message, TIBCO.Rendezvous.Message reply)
        {
            try
            {
                targetSubject = GetTargetSubject(targetSubject);

                if (this.tibrvManager.SendReplySync(targetSubject, message, reply))
                    return true;
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool ReplyAsync(string targetSubject, string reply)
        {
            try
            {
                targetSubject = GetTargetSubject(targetSubject);

                if (this.tibrvManager.SendReplyAsync(targetSubject, reply))
                    return true;
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool ReplyAsync(string targetSubject, SortedList<object, object> replys)
        {
            try
            {
                targetSubject = GetTargetSubject(targetSubject);

                if (this.tibrvManager.SendReplyAsync(targetSubject, replys))
                    return true;
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool ReplyAsync(string targetSubject, TIBCO.Rendezvous.Message reply)
        {
            try
            {
                targetSubject = GetTargetSubject(targetSubject);

                if (this.tibrvManager.SendReplyAsync(targetSubject, reply))
                    return true;
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        void TibrvListener.OnMessage(TIBCO.Rendezvous.Message message)
        {
            try
            {
                foreach (TibrvListener tibrvlistener in this.tibrvListener)
                {
                    tibrvlistener.OnMessage(message);
                }
            }
            catch (Exception e)
            {
            }
        }

        private string GetTargetSubject(string targetSubject)
        {
            if (String.IsNullOrEmpty(targetSubject))
                return this.tibrvManager.TargetSubject;
            else
                return targetSubject;
        }
    }
}
namespace TibrvSender
{
    public interface TibrvListener
    {
        void OnMessage(TIBCO.Rendezvous.Message message);
    }
}
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;

namespace TibrvSender
{
    public class TibrvManager
    {
        private const string DEFAULT_FIELD_KEY = "xmlData";

        private TibrvListener tibrvListener;

        //  tibrv parameter
        private string fieldKey;
        private string sourceSubejct;
        private string targetSubject;
        private string service;
        private string network;
        private string daemon;

        private SortedList<object, object> messageQueue;

        private Thread dispatcher;

        private TIBCO.Rendezvous.Transport transport;
        private TIBCO.Rendezvous.Listener listener;

        public TibrvManager(TibrvListener tibrvListener)
        {
            this.tibrvListener = tibrvListener;
        }

        #region property

        public string SourceSubject
        {
            get { return sourceSubejct; }
        }

        public string TargetSubject
        {
            get { return targetSubject; }
        }

        public string Service
        {
            get { return service; }
        }

        public string Network
        {
            get { return network; }
        }

        private string Daemon
        {
            get { return daemon; }
        }

        #endregion

        public bool Initialize(string sourceSubject, string targetSubject, string service, string network, string daemon)
        {
            this.fieldKey = DEFAULT_FIELD_KEY;
            this.sourceSubejct = sourceSubject;
            this.targetSubject = targetSubject;
            this.service = service;
            this.network = network;
            this.daemon = daemon;

            this.messageQueue = new SortedList<object, object>();

            // Open TIBCO.Rendezvous.Environment 
            try
            {
                TIBCO.Rendezvous.Environment.Open();
            }
            catch (TIBCO.Rendezvous.RendezvousException e)
            {
                return false;
            }

            // Create TIBCO.Rendezvous.NetTransport
            try
            {
                this.transport = new TIBCO.Rendezvous.NetTransport(this.service, this.network, this.daemon);
            }
            catch (TIBCO.Rendezvous.RendezvousException e)
            {
                return false;
            }

            // Create TIBCO.Rendezvous.Listener using default queue
            try
            {
                this.listener = new TIBCO.Rendezvous.Listener(TIBCO.Rendezvous.Environment.DefaultQueue, this.transport, this.sourceSubejct, null);
                this.listener.MessageReceived += new TIBCO.Rendezvous.MessageReceivedEventHandler(listener_MessageReceived);

                this.dispatcher = new Thread(new ThreadStart(Run));
                this.dispatcher.Start();
            }
            catch (TIBCO.Rendezvous.RendezvousException e)
            {
                return false;
            }

            return true;
        }

        public bool Initialize(string fieldKey, string sourceSubject, string targetSubject, string service, string network, string daemon)
        {
            this.fieldKey = fieldKey;
            this.sourceSubejct = sourceSubject;
            this.targetSubject = targetSubject;
            this.service = service;
            this.network = network;
            this.daemon = daemon;

            this.messageQueue = new SortedList<object, object>();

            // Open TIBCO.Rendezvous.Environment 
            try
            {
                TIBCO.Rendezvous.Environment.Open();
            }
            catch (TIBCO.Rendezvous.RendezvousException e)
            {
                return false;
            }

            // Create TIBCO.Rendezvous.NetTransport
            try
            {
                this.transport = new TIBCO.Rendezvous.NetTransport(this.service, this.network, this.daemon);
            }
            catch (TIBCO.Rendezvous.RendezvousException e)
            {
                return false;
            }

            // Create TIBCO.Rendezvous.Listener using default queue
            try
            {
                this.listener = new TIBCO.Rendezvous.Listener(TIBCO.Rendezvous.Environment.DefaultQueue, this.transport, this.sourceSubejct, null);
                this.listener.MessageReceived += new TIBCO.Rendezvous.MessageReceivedEventHandler(listener_MessageReceived);

                this.dispatcher = new Thread(new ThreadStart(Run));
                this.dispatcher.Start();
            }
            catch (TIBCO.Rendezvous.RendezvousException e)
            {
                return false;
            }

            return true;




        }

        public bool Terminate()
        {
            try
            {
                if (this.listener != null)
                {
                    this.listener.MessageReceived -= new TIBCO.Rendezvous.MessageReceivedEventHandler(listener_MessageReceived);
                    this.listener.Destroy();
                    this.listener = null;
                }

                if (this.transport != null)
                {
                    this.transport.Destroy();
                    this.transport = null;
                }

                if (this.messageQueue != null)
                {
                    this.messageQueue.Clear();
                    this.messageQueue = null;
                }

                if (this.dispatcher != null)
                {
                    this.dispatcher.Join(1000);
                    this.dispatcher = null;
                }

                TIBCO.Rendezvous.Environment.Close();

                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        private void Run()
        {
            while (this.dispatcher != null && this.dispatcher.IsAlive)
            {
                try
                {
                    TIBCO.Rendezvous.Environment.DefaultQueue.Dispatch();
                    Thread.Sleep(100);
                }
                catch { }
            }
        }

        void listener_MessageReceived(object listener, TIBCO.Rendezvous.MessageReceivedEventArgs messageReceivedEventArgs)
        {
            try
            {
                this.tibrvListener.OnMessage(messageReceivedEventArgs.Message);
            }
            catch { }
        }

        public bool Send(string targetSubject, string message)
        {
            try
            {
                TIBCO.Rendezvous.Message tibrvMessage = new TIBCO.Rendezvous.Message();

                tibrvMessage.SendSubject = targetSubject;
                tibrvMessage.ReplySubject = this.sourceSubejct;
                tibrvMessage.AddField(this.fieldKey, message);

                this.transport.Send(tibrvMessage);

                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool Send(string targetSubject, SortedList<object, object> messages)
        {
            try
            {
                if (messages == null)
                {
                    return false;
                }

                if (messages.Count > 0)
                {
                    TIBCO.Rendezvous.Message tibrvMessage = new TIBCO.Rendezvous.Message();

                    tibrvMessage.SendSubject = targetSubject;
                    tibrvMessage.ReplySubject = this.sourceSubejct;

                    for (int i = 0; i < messages.Count; i++)
                    {
                        string fieldKey = (string)messages.Keys[i];
                        if (String.IsNullOrEmpty(fieldKey))
                            tibrvMessage.AddField(this.fieldKey, messages.Values[i].ToString());
                        else
                            tibrvMessage.AddField(fieldKey, messages.Values[i].ToString());
                    }

                    this.transport.Send(tibrvMessage);

                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool Send(string targetSubject, TIBCO.Rendezvous.Message message)
        {
            try
            {
                message.SendSubject = targetSubject;
                message.ReplySubject = this.sourceSubejct;

                this.transport.Send(message);

                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public TIBCO.Rendezvous.Message SendRequest(string targetSubject, string message, double timeout)
        {
            try
            {
                TIBCO.Rendezvous.Message tibrvMessage = new TIBCO.Rendezvous.Message();

                tibrvMessage.SendSubject = targetSubject;
                tibrvMessage.ReplySubject = this.sourceSubejct;

                tibrvMessage.AddField(this.fieldKey, message);

                TIBCO.Rendezvous.Message replyMessage = this.transport.SendRequest(tibrvMessage, timeout);

                return replyMessage;
            }
            catch (Exception e)
            {
                return null;
            }
        }

        public TIBCO.Rendezvous.Message SendRequest(string targetSubject, SortedList<object, object> messages, double timeout)
        {
            try
            {
                if (messages == null)
                {
                    return null;
                }

                if (messages.Count > 0)
                {
                    TIBCO.Rendezvous.Message tibrvMessage = new TIBCO.Rendezvous.Message();

                    tibrvMessage.SendSubject = targetSubject;
                    tibrvMessage.ReplySubject = this.sourceSubejct;

                    for (int i = 0; i < messages.Count; i++)
                    {
                        string fieldKey = (string)messages.Keys[i];

                        if (fieldKey == null)
                        {
                            tibrvMessage.AddField(this.fieldKey, messages.Values[i].ToString());
                        }
                        else
                        {
                            tibrvMessage.AddField(fieldKey, messages.Values[i].ToString());
                        }
                    }
                    TIBCO.Rendezvous.Message replyMessage = this.transport.SendRequest(tibrvMessage, timeout);
                    return replyMessage;
                }
                else
                {
                    return null;
                }

            }
            catch (Exception e)
            {
                return null;
            }
        }

        public TIBCO.Rendezvous.Message SendRequest(string targetSubject, TIBCO.Rendezvous.Message message, double timeout)
        {
            try
            {
                message.SendSubject = targetSubject;
                message.ReplySubject = this.sourceSubejct;

                TIBCO.Rendezvous.Message replyMessage = this.transport.SendRequest(message, timeout);

                return replyMessage;
            }
            catch (Exception e)
            {
                return null;
            }
        }

        public bool SendReplyAsync(string targetSubject, string message)
        {
            try
            {
                if (this.messageQueue.Count > 0)
                {
                    TIBCO.Rendezvous.Message tibrvMessage = new TIBCO.Rendezvous.Message();

                    tibrvMessage.SendSubject = targetSubject;
                    tibrvMessage.ReplySubject = this.sourceSubejct;
                    tibrvMessage.AddField(this.fieldKey, message);

                    this.transport.SendReply(tibrvMessage, (TIBCO.Rendezvous.Message)this.messageQueue.Values[0]);

                    this.messageQueue.Remove(this.messageQueue.Keys[0]);

                    return true;
                }
                else
                {
                    return false;
                }
            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool SendReplyAsync(string targetSubject, SortedList<object, object> messages)
        {
            try
            {
                if (this.messageQueue.Count == 0)
                {
                    return false;
                }

                if (messages == null)
                {
                    return false;
                }

                if (messages.Count > 0)
                {
                    TIBCO.Rendezvous.Message tibrvMessage = new TIBCO.Rendezvous.Message();

                    tibrvMessage.SendSubject = targetSubject;
                    tibrvMessage.ReplySubject = this.sourceSubejct;

                    for (int i = 0; i < messages.Count; i++)
                    {
                        string fieldKey = (string)messages.Keys[i];

                        if (String.IsNullOrEmpty(fieldKey))
                        {
                            tibrvMessage.AddField(this.fieldKey, messages.Values[i].ToString());
                        }
                        else
                        {
                            tibrvMessage.AddField(fieldKey, messages.Values[i].ToString());
                        }
                    }

                    this.transport.SendReply(tibrvMessage, (TIBCO.Rendezvous.Message)this.messageQueue.Values[0]);

                    this.messageQueue.Remove(this.messageQueue.Keys[0]);

                    return true;
                }
                else
                {
                    return false;
                }

            }
            catch (Exception e)
            {
                return false;
            }
        }

        public bool SendReplyAsync(string targetSubject, TIBCO.Rendezvous.Message message)
        {
            try
            {
                if (this.messageQueue.Count == 0)
                {
                    return false;
                }

                message.SendSubject = targetSubject;
                message.ReplySubject = this.sourceSubejct;

                this.transport.SendReply(message, (TIBCO.Rendezvous.Message)this.messageQueue.Values[0]);

                this.messageQueue.Remove(this.messageQueue.Keys[0]);

                return true;
            }
            catch (Exception e)
            {
                return false;
            }
        }

        //  Implement or not
        public bool SendReplySync(string targetSubject, TIBCO.Rendezvous.Message message, string reply)
        {
            return false;
        }

        public bool SendReplySync(string targetSubject, TIBCO.Rendezvous.Message message, SortedList<object, object> replys)
        {
            return false;
        }

        public bool SendReplySync(string targetSubject, TIBCO.Rendezvous.Message message, TIBCO.Rendezvous.Message reply)
        {
            return false;
        }

        public TIBCO.Rendezvous.Opaque ConvertStringToByteArray(string data)
        {
            try
            {
                ASCIIEncoding ascii = new ASCIIEncoding();
                TIBCO.Rendezvous.Opaque opaque = new TIBCO.Rendezvous.Opaque();

                if (String.IsNullOrEmpty(data))
                    opaque.Value = new byte[1];
                else
                    opaque.Value = ascii.GetBytes(data);

                return opaque;
            }
            catch (Exception e)
            {
                return null;
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值