示例#1
0
        /// <summary>
        /// Register the local message port.
        /// </summary>
        /// <exception cref="System.InvalidOperationException">Thrown when portName is already used, when there is an I/O error.</exception>
        /// <exception cref="System.ArgumentException">Thrown when there is an invalid parameter.</exception>
        /// <exception cref="System.OutOfMemoryException">Thrown when out of memory.</exception>
        /// <example>
        /// <code>
        /// MessagePort messagePort = new MessagePort("SenderPort", true);
        /// messagePort.MessageReceived += MessageReceivedCallback;
        /// messagePort.Listen();
        /// </code>
        /// </example>
        /// <since_tizen> 3 </since_tizen>
        public void Listen()
        {
            lock (s_lock)
            {
                if (s_portMap.Contains(_portName))
                {
                    MessagePortErrorFactory.ThrowException((int)MessagePortError.InvalidOperation, _portName + "is already used");
                }
                _messageCallBack = (int localPortId, string remoteAppId, string remotePortName, bool trusted, IntPtr message, IntPtr userData) =>
                {
                    MessageReceivedEventArgs args = new MessageReceivedEventArgs();
                    try
                    {
                        args.Message = new Bundle(new SafeBundleHandle(message, false));
                    }
                    catch (Exception ex)
                    {
                        Log.Error(LogTag, "Exception(" + ex.ToString() + ")");
                        args.Message = null;
                    }

                    if (args.Message == null)
                    {
                        Log.Error(LogTag, "Failed to create Bundle. message({0})", (message == IntPtr.Zero) ? "null" : message.ToString());
                        return;
                    }

                    if (!String.IsNullOrEmpty(remotePortName) && !String.IsNullOrEmpty(remoteAppId))
                    {
                        args.Remote = new RemoteValues()
                        {
                            AppId    = remoteAppId,
                            PortName = remotePortName,
                            Trusted  = trusted
                        };
                    }
                    MessageReceived?.Invoke(this, args);
                };

                _portId = _trusted ?
                          Interop.MessagePort.RegisterTrustedPort(_portName, _messageCallBack, IntPtr.Zero) :
                          Interop.MessagePort.RegisterPort(_portName, _messageCallBack, IntPtr.Zero);

                if (_portId <= 0)
                {
                    MessagePortErrorFactory.ThrowException(_portId, "RegisterPort", _portName);
                }

                s_portMap.Add(_portName);
                _listening = true;
            }
        }
示例#2
0
        /// <summary>
        /// Register the local message port.
        /// </summary>
        /// <exception cref="System.InvalidOperationException">Thrown when portName is already used, when there is an I/O error.</exception>
        /// <exception cref="System.ArgumentException">Thrown when there is an invalid parameter.</exception>
        /// <exception cref="System.OutOfMemoryException">Thrown when out of memory.</exception>
        /// <example>
        /// <code>
        /// MessagePort messagePort = new MessagePort("SenderPort", true);
        /// messagePort.MessageReceived += MessageReceivedCallback;
        /// messagePort.Listen();
        /// </code>
        /// </example>
        /// <since_tizen> 3 </since_tizen>
        public void Listen()
        {
            lock (s_lock)
            {
                if (s_portMap.Contains(_portName))
                {
                    MessagePortErrorFactory.ThrowException((int)MessagePortError.InvalidOperation, _portName + "is already used");
                }
                _messageCallBack = (int localPortId, string remoteAppId, string remotePortName, bool trusted, IntPtr message, IntPtr userData) =>
                {
                    MessageReceivedEventArgs args = new MessageReceivedEventArgs()
                    {
                        Message = new Bundle(new SafeBundleHandle(message, false))
                    };

                    if (!String.IsNullOrEmpty(remotePortName) && !String.IsNullOrEmpty(remoteAppId))
                    {
                        args.Remote = new RemoteValues()
                        {
                            AppId    = remoteAppId,
                            PortName = remotePortName,
                            Trusted  = trusted
                        };
                    }
                    MessageReceived?.Invoke(this, args);
                };

                _portId = _trusted ?
                          Interop.MessagePort.RegisterTrustedPort(_portName, _messageCallBack, IntPtr.Zero) :
                          Interop.MessagePort.RegisterPort(_portName, _messageCallBack, IntPtr.Zero);

                if (_portId <= 0)
                {
                    MessagePortErrorFactory.ThrowException(_portId, "RegisterPort", _portName);
                }

                s_portMap.Add(_portName);
                _listening = true;
            }
        }