/// <summary>
 /// Create new changeflag request
 /// </summary>
 /// <param name="msg"></param>
 /// <param name="flag"></param>
 /// <param name="value"></param>
 /// <param name="callback"></param>
 public ChangeFlagRequest(IMessage msg, MessageFlag flag, bool value, RequestCompletedCallback callback)
     : base(callback)
 {
     PreCommand    = new SelectFolderCommand(msg.Folder, null);
     Command       = new ChangeFlagCommand(msg, flag, value, null);
     ProcessorType = typeof(ChangeFlagProcessor);
 }
Example #2
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="ipEndPoint"></param>
        /// <param name="flag"></param>
        /// <param name="evt"></param>
        /// <param name="cableId"></param>
        /// <param name="channel"></param>
        /// <param name="data"></param>
        /// <exception cref="TcpException"></exception>
        /// <exception cref="socketException"></exception>
        private void InnerASendResponse(IPEndPoint ipEndPoint, MessageFlag flag, UInt32 evt, UInt16 cableId, UInt32 channel, byte[] data)
        {
            SCB scb = GetSCB(ipEndPoint);

            //scb.AsyncSend(flag, evt, cableId, channel, data);
            scb.ASendFromServer(flag, evt, cableId, channel, data);
        }
Example #3
0
        internal void ASendFromServer(MessageFlag flag, UInt32 evt, UInt16 cableId, UInt32 channel, byte[] data)
        {
            while (BufferLength > 10 * 1024 * 1024)
            {
                System.Threading.Thread.Sleep(1);
            }

            Server.SendMessageTask task = _Listener.GetTask(this);

            bool needSetEvent = false;

            lock (task.LockObj)
            {
                needSetEvent = task.IncTotalQueueCount(1) == 0;

                lock (_QueueLockObj)
                {
                    IncBufferLength(data.Length);
                    _Queue.Enqueue(new Message(flag, evt, cableId, channel, data));
                }
            }

            if (needSetEvent)
            {
                task.Event.Set();
            }
        }
 /// <summary>
 /// Create new changeflag request
 /// </summary>
 /// <param name="msg"></param>
 /// <param name="flag"></param>
 /// <param name="value"></param>
 /// <param name="callback"></param>
 public ChangeFlagRequest(IMessage msg, MessageFlag flag, bool value, RequestCompletedCallback callback)
     : base(callback)
 {
     PreCommand = new SelectFolderCommand(msg.Folder, null);
     Command = new ChangeFlagCommand(msg, flag, value, null);
     ProcessorType = typeof (ChangeFlagProcessor);
 }
Example #5
0
        internal void AsyncSend(MessageFlag flag, UInt32 evt, UInt16 cableId, UInt32 channel, byte[] data)
        {
            if (_SetThreadAffinityMask && (flag | MessageFlag.Sync) != 0)
            {
                if (PCombine != null)
                {
                    PCombine.Hit();
                }
            }

            while (BufferLength > 10 * 1024 * 1024)
            {
                System.Threading.Thread.Sleep(1);
            }

            bool needSetEvent = false;

            lock (_LockObj)
            {
                needSetEvent = _Queue.Count == 0;

                IncBufferLength(data.Length);
                _Queue.Enqueue(new Message(flag, evt, cableId, channel, data));
            }

            if (needSetEvent)
            {
                _Event.Set();
            }
        }
Example #6
0
        public virtual void Update(MessageJsonModel model)
        {
            if (_transientAuthor != null)
            {
                if (model.Member.HasValue)
                {
                    model.Member.Value.User = model.Author;
                    _transientAuthor        = new TransientMember(Client, GuildId.Value, model.Member.Value);
                }
                else
                {
                    _transientAuthor = new TransientUser(Client, model.Author);
                }
            }

            Content        = model.Content;
            MentionedUsers = model.Mentions.ToReadOnlyList(Client, (x, client) =>
            {
                var user = client.GetUser(x.Id);
                if (user != null)
                {
                    return(user);
                }

                return(new TransientUser(client, x) as IUser);
            });

            Reactions = Optional.Convert(model.Reactions, models => models.ToReadOnlyDictionary(
                                             x => TransientEmoji.Create(x.Emoji),
                                             x => new TransientMessageReaction(x) as IMessageReaction));

            Flags = model.Flags.GetValueOrDefault();
        }
Example #7
0
        /// <summary>
        /// Serializes the packet into a byte array, allowing it to be sent over a socket.
        /// </summary>
        /// <param name="Flags">The MessageFlag corresponding to the message's Ultravox class and type.</param>
        /// <param name="PayloadData">The payload for the packet itself.</param>
        /// <returns></returns>
        public static byte[] Serialize(MessageFlag Flags, byte[] PayloadData)
        {
            byte[] UltravoxMessage = new byte[] { 0x5A, 0x0, 0x0, 0x0, 0x0, 0x0 };

            byte[] LengthBytes = BitConverter.GetBytes((Int16)(PayloadData.Length));

            if (BitConverter.IsLittleEndian)
            {
                byte[] FlagBytes = BitConverter.GetBytes((Int16)(Flags)).Reverse().ToArray();
                Flags = (MessageFlag)(BitConverter.ToInt16(FlagBytes, 0));

                LengthBytes = LengthBytes.Reverse().ToArray();
            }

            Buffer.BlockCopy(BitConverter.GetBytes((short)(Flags)), 0, UltravoxMessage, 2, 2);

            if (PayloadData.Length > 255)
            {
                Buffer.BlockCopy(LengthBytes, 0, UltravoxMessage, 4, 2);
            }

            else
            {
                UltravoxMessage[5] = Convert.ToByte(PayloadData.Length);
            }

            byte[] FinalBytes = new byte[UltravoxMessage.Length + PayloadData.Length + 1];

            Buffer.BlockCopy(UltravoxMessage, 0, FinalBytes, 0, UltravoxMessage.Length);
            Buffer.BlockCopy(PayloadData, 0, FinalBytes, UltravoxMessage.Length, PayloadData.Length);

            UltravoxMessage = new byte[] { 0x5A, 0x0, 0x0, 0x0, 0x0, 0x0 };

            return(FinalBytes);
        }
Example #8
0
        /// <summary>
        /// 序列化并发送消息,如果序列化异常标记消息为错误状态仍旧发送,接收端根据消息类型是请求还是响应作不同处理
        /// </summary>
        public void SendMessage <T>(ref T msg) where T : struct, IMessage
        {
            //Log.Debug($"[{System.Diagnostics.Process.GetCurrentProcess().ProcessName}]发送:{msg.Type}");
            MessageFlag flag     = MessageFlag.None;
            int         msgId    = Interlocked.Increment(ref sendMsgIdIndex);
            ulong       sourceId = 0; //TODO: fix

            var mws = MessageWriteStream.ThreadInstance;

            mws.Reset(msg.Type, msgId, sourceId, flag, _sendQueue);
            BinSerializer bs = BinSerializer.ThreadInstance;

            bs.Init(mws);
            try
            {
                bs.Write((byte)msg.PayloadType); //不用bs.Serialize(msg)防止box
                msg.WriteObject(bs);
                mws.FinishWrite();
            }
            catch (Exception ex)
            {
                //发生异常,则通知接收端取消挂起的消息
                unsafe
                {
                    SendCancelMessage(mws.CurrentChunk);
                }
                //重新抛出异常
                Log.Warn(ExceptionHelper.GetExceptionDetailInfo(ex));
                throw new MessageSerializationException(MessageSerilizationErrorCode.SerializeFail, ex);
            }
            finally
            {
                bs.Clear();
            }
        }
        public async Task <Message> MethodCallAsync(BusAttachment bus, string ifaceName, string methodName, MsgArg args, uint numArgs,
                                                    TimeSpan timeout, MessageFlag flags = 0)
        {
            if (timeout.Ticks < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(timeout));
            }

            var replyMsg = Message.alljoyn_message_create(bus.Handle);

            TaskCompletionSource <Message>           tcs       = new TaskCompletionSource <Message>();
            alljoyn_messagereceiver_replyhandler_ptr replyFunc = (a, b) =>
            {
                tcs.SetResult(new Message(a));
            };
            var handle = GCHandle.Alloc(replyFunc);

            AllJoynException.CheckStatus(
                alljoyn_proxybusobject_methodcallasync(Handle, ifaceName, methodName, replyFunc, args.Handle,
                                                       (UIntPtr)numArgs, replyMsg, (uint)timeout.TotalMilliseconds, (byte)flags)
                );
            Message message;

            try
            {
                message = await tcs.Task;
            }
            finally
            {
                handle.Free();
            }
            return(message);
        }
Example #10
0
 public Message(int evt, MessageFlag flag, object data)
 {
     Event       = evt;
     Flag        = flag;
     Data        = data;
     _SSendEvent = null;
     RetData     = null;
 }
Example #11
0
 public MessageAttribute(string text, MessageFlag messageFlags = MessageFlag.HasText, bool regex = false)
     : this()
 {
     isRegex      = regex;
     InChat       = InChat.All;
     Text         = text;
     MessageFlags = messageFlags;
 }
Example #12
0
 public Message(int evt, MessageFlag flag, object data, System.Threading.ManualResetEvent ssendEvent)
 {
     Event       = evt;
     Flag        = flag;
     Data        = data;
     _SSendEvent = ssendEvent;
     RetData     = null;
 }
Example #13
0
        public bool HasFlag(string command, MessageFlag flag)
        {
            if (msgFlags.TryGetValue(command, out MessageFlag flags))
            {
                return(flags.HasFlag(flag));
            }

            return(false);
        }
Example #14
0
 public Message(MessageFlag flag, UInt32 evt, UInt16 cableId,
                UInt32 channel, byte[] data)
 {
     this.Flag    = flag;
     this.Event   = evt;
     this.CableId = cableId;
     this.Channel = channel;
     this.Data    = data;
 }
 public InsteonStandardMessage(DeviceAddress sourceAddress, DeviceAddress targetAddress, byte command1, byte command2, byte flagByte)
 {
     _sourceAddress = sourceAddress;
     _targetAddress = targetAddress;
     _command1 = command1;
     _command2 = command2;
     _flag = (MessageFlag)(flagByte & ((byte)0xE0));
     _flagByte = flagByte;
 }
Example #16
0
        public SearchHistoryEntry(Search.Options searchOptions)
        {
            Template       = searchOptions.Template ?? "";
            WholeWord      = searchOptions.WholeWord;
            Regexp         = searchOptions.Regexp;
            MatchCase      = searchOptions.MatchCase;
            TypesToLookFor = searchOptions.ContentTypes;

            this.normalizedTemplate = !MatchCase?Template.ToLower() : Template;
        }
Example #17
0
 public Message(IPAddress target, MessageType type, MessageFlag flag, int group = 0)
 {
     Identifier = MessageId.GetNextIdentifier();
     Target     = target;
     Type       = type;
     Flag       = flag;
     Group      = group;
     Payload    = new Payload();
     _data      = Encode();
 }
Example #18
0
 public static string flagToString(MessageFlag flag)
 {
     try
     {
         return ReverseMap[flag];
     }
     catch (KeyNotFoundException)
     {
         return string.Empty;
     }
 }
Example #19
0
 public ReceiveEventArgs(int scbId, EndPoint remoteIPEndPoint, MessageFlag flag, UInt32 evt, UInt16 cableId, UInt32 channel, byte[] data)
 {
     SCBID            = scbId;
     RemoteIPEndPoint = remoteIPEndPoint;
     Flag             = flag;
     Event            = evt;
     CableId          = cableId;
     Channel          = channel;
     Data             = data;
     ReturnData       = null;
 }
Example #20
0
 public void SetFlag(string command, MessageFlag flag)
 {
     if (msgFlags.TryGetValue(command, out MessageFlag flags))
     {
         msgFlags[command] = flags | flag;
     }
     else
     {
         msgFlags.Add(command, flag);
     }
 }
Example #21
0
        /// <summary>
        /// Send syncronization message
        /// </summary>
        /// <param name="evt">event</param>
        /// <param name="cableId">cableId no</param>
        /// <param name="data">data need to send</param>
        /// <param name="timeout">waitting timeout. In millisecond</param>
        /// <returns>data return from client</returns>
        private byte[] InnerSSend(MessageFlag flag, UInt32 evt, UInt16 cableId, byte[] data, int timeout)
        {
            if (!Connected)
            {
                throw new NTcpException("Tcp disconnected", ErrorCode.Disconnected);
            }

            SyncBlock syncBlock;
            UInt32    channel = GetChannelForSync(out syncBlock);

            _SendMessageQueue.AsyncSend(flag, evt, cableId, channel, data);

            bool bSuccess;

            byte[] retData;

            try
            {
                bSuccess = syncBlock.WaitOne(timeout);
                if (bSuccess)
                {
                    if (!Connected)
                    {
                        throw new NTcpException("Tcp disconnected during ssend", ErrorCode.Disconnected);
                    }

                    retData = syncBlock.RetData;
                }
            }
            catch (NTcpException)
            {
                throw;
            }
            catch (Exception e)
            {
                throw new NTcpException(string.Format("Tcp disconnected during ssend, err:{0}",
                                                      e), ErrorCode.Disconnected);
            }
            finally
            {
                syncBlock.Close();
                ReturnChannelForSync(channel);
            }

            if (bSuccess)
            {
                return(syncBlock.RetData);
            }
            else
            {
                throw new TimeoutException("SyncSend timeout!");
            }
        }
        /// <summary>
        /// Create a new ChangeFlag command
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="flag"></param>
        /// <param name="value"></param>
        /// <param name="callback"></param>
        public ChangeFlagCommand(IMessage msg, MessageFlag flag, bool value, CommandDataReceivedCallback callback)
            : base(callback)
        {
            //  UID STORE 4963 -FLAGS (\Seen)
            const string cmd = "UID STORE {0} {1}FLAGS (\\{2})";
            _parameters.Add(msg.UID.ToString());
            _parameters.Add(value ? "+":"-");
            _parameters.Add(flag.ToString());
            _parameterObjs.Add(msg);

            CommandString = String.Format(cmd, Parameters);
        }
Example #23
0
        private void OnReceiveEvent(SCB scb, MessageFlag flag, UInt32 evt, UInt16 cableId,
                                    UInt32 channel, byte[] data)
        {
            SyncBlock syncBlock;

            if ((flag & MessageFlag.Sync) != 0)
            {
                if (channel > int.MaxValue)
                {
                    //server side ssend

                    EventHandler <Event.ReceiveEventArgs> receiveEventHandler = ReceiveEventHandler;

                    if (receiveEventHandler != null)
                    {
                        try
                        {
                            Event.ReceiveEventArgs args = new Event.ReceiveEventArgs(scb.Id,
                                                                                     scb.RemoteIPEndPoint, flag, evt, cableId, channel, data);

                            receiveEventHandler(this, args);

                            InnerASend(flag, evt, cableId, args.ReturnData);
                        }
                        catch
                        {
                        }
                    }
                }
                else if (TryGetSyncChannel(channel, out syncBlock))
                {
                    syncBlock.RetData = data;
                    syncBlock.AutoEvent.Set();
                }
            }
            else
            {
                EventHandler <Event.ReceiveEventArgs> receiveEventHandler = ReceiveEventHandler;

                if (receiveEventHandler != null)
                {
                    try
                    {
                        receiveEventHandler(this, new Event.ReceiveEventArgs(scb.Id,
                                                                             scb.RemoteIPEndPoint, flag, evt, cableId, channel, data));
                    }
                    catch
                    {
                    }
                }
            }
        }
Example #24
0
        MessageFlag GetTypes(List <bool> typesCheckboxesValues)
        {
            MessageFlag f = MessageFlag.None;

            for (int i = 0; i < Math.Min(typeFlagsList.Length, typesCheckboxesValues.Count); ++i)
            {
                if (typesCheckboxesValues[i])
                {
                    f |= typeFlagsList[i];
                }
            }
            return(f);
        }
Example #25
0
            public MessageFlag HighestMessageFlag()
            {
                MessageFlag high = MessageFlag.None;

                foreach (var f in m_MessageSet)
                {
                    if (f > high)
                    {
                        high = f;
                    }
                }
                return(high);
            }
        /// <summary>
        /// Create a new ChangeFlag command
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="flag"></param>
        /// <param name="value"></param>
        /// <param name="callback"></param>
        public ChangeFlagCommand(IMessage msg, MessageFlag flag, bool value, CommandDataReceivedCallback callback)
            : base(callback)
        {
            //  UID STORE 4963 -FLAGS (\Seen)
            const string cmd = "UID STORE {0} {1}FLAGS (\\{2})";

            _parameters.Add(msg.UID.ToString());
            _parameters.Add(value ? "+":"-");
            _parameters.Add(flag.ToString());
            _parameterObjs.Add(msg);

            CommandString = String.Format(cmd, Parameters);
        }
Example #27
0
        private void OnReceiveEvent(SCB scb, MessageFlag flag, UInt32 evt, UInt16 cableId,
                                    UInt32 channel, byte[] data)
        {
            EventHandler <Event.ReceiveEventArgs> receiveEventHandler = DataReceived;

            if (receiveEventHandler != null)
            {
                Event.ReceiveEventArgs args = new Event.ReceiveEventArgs(scb.Id,
                                                                         scb.RemoteIPEndPoint, flag, evt, cableId, channel, data);

                _WorkThreads[scb.Id % _WorkThreads.Length].ASendMessage(args);
            }
        }
        /// <summary>
        ///
        /// </summary>
        /// <param name="flag"></param>
        /// <param name="evt"></param>
        /// <param name="group"></param>
        /// <param name="channel"></param>
        /// <param name="data"></param>
        /// <exception cref="TcpException"></exception>
        /// <exception cref="socketException"></exception>
        private void ASend(MessageFlag flag, UInt32 evt, UInt16 group, byte[] data)
        {
            if (!Connected)
            {
                throw new NTcpException("Tcp disconnected", ErrorCode.Disconnected);
            }

            IncCurChannel();

            _SendMessageQueue.ASend(flag, evt, group, CurChannel, data);

            //SCB scb = _SCB;
            //scb.ASend(flag, evt, group, channel, data);
        }
        public unsafe void Reset(MessageType msgType, int msgID, ulong sourceId, MessageFlag msgFlag, SharedMessageQueue queue = null)
        {
            _curChunk = null; //必须设置,否则缓存重用有问题

            _msgType  = msgType;
            _msgID    = msgID;
            _sourceId = sourceId;
            _msgFlag  = msgFlag;
            _queue    = queue;

            CreateChunk();

            //第一包设MessageSource
            //_curChunk->MessageSource = srcType;
        }
Example #30
0
        public Message MethodCall(BusAttachment bus, string ifaceName, string methodName, MsgArg args,
                                  uint numArgs, TimeSpan timeout, MessageFlag flags = 0)
        {
            if (timeout.Ticks < 0)
            {
                throw new ArgumentOutOfRangeException(nameof(timeout));
            }
            var replyMsg = new Message(bus);

            AllJoynException.CheckStatus(
                alljoyn_proxybusobject_methodcall(Handle, ifaceName, methodName, args.Handle,
                                                  (UIntPtr)numArgs, replyMsg.Handle, (uint)timeout.TotalMilliseconds, (byte)flags)
                );
            return(replyMsg);
        }
Example #31
0
        public static Message GetMessage(MessageFlag lookup)
        {
            if (m_MessageLookup == null)
            {
                InitMessages();
            }

            Message msg = null;

            m_MessageLookup.TryGetValue(lookup, out msg);
            if (msg == null)
            {
                msg = m_MessageLookup[MessageFlag.None];
            }
            return(msg);
        }
Example #32
0
            public void SetFlag(MessageFlag flag, bool on)
            {
                if (flag == MessageFlag.Info || flag == MessageFlag.Warning || flag == MessageFlag.Error)
                {
                    return;
                }

                if (on)
                {
                    m_MessageFlags |= flag;
                    m_MessageSet.Add(flag);
                }
                else
                {
                    m_MessageFlags &= ~flag;
                    m_MessageSet.Remove(flag);
                }
            }
Example #33
0
        /// <summary>
        /// Inner Asend to the client specified in ipEndPoint.
        /// </summary>
        /// <param name="flag"></param>
        /// <param name="evt"></param>
        /// <param name="cableId"></param>
        /// <param name="channel"></param>
        /// <param name="data"></param>
        /// <exception cref="TcpException"></exception>
        /// <exception cref="socketException"></exception>
        private bool InnerASend(IPEndPoint ipEndPoint, MessageFlag flag, UInt32 evt, UInt16 cableId, byte[] data)
        {
            SCB scb = GetSCB(ipEndPoint);

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

            IncCurChannel();

            //scb.AsyncSend(flag, evt, cableId, channel, data);
            scb.ASendFromServer(flag, evt, cableId, CurChannel, data);

            return(true);
            //SCB scb = _SCB;
            //scb.AsyncSend(flag, evt, cableId, channel, data);
        }
Example #34
0
        private void SetPayloadLength(uint payloadLength)
        {
            if (payloadLength <= 255)
            {
                if (!MessageFlag.HasFlag(MessageFlag.ShortRecord))
                {
                    MessageFlag |= MessageFlag.ShortRecord;
                }
            }
            else
            {
                if (MessageFlag.HasFlag(MessageFlag.ShortRecord))
                {
                    MessageFlag &= ~MessageFlag.ShortRecord;
                }
            }

            _payloadLength = payloadLength;
        }
 /// <summary>
 /// 
 /// </summary>
 /// <param name="msg"></param>
 /// <param name="flag"></param>
 /// <param name="value"></param>
 /// <param name="localOnly">Indicates if the flag should be set only on the local object, and not on the server</param>
 public void SetMessageFlag(IMessage msg, MessageFlag flag, bool value, bool localOnly)
 {
     bool currentValue = _client.DataManager.GetValue<Message, bool>((Message)msg, flag.ToString());
     if (currentValue == value) return;
     _client.DataManager.SetValue(msg, flag.ToString(), value);
     if (localOnly) return;
     ChangeFlagRequest cfr = new ChangeFlagRequest(msg, flag, value, null);
     _client.RequestManager.SubmitRequest(cfr, true);
 }
Example #36
0
        /// <summary>
        /// 
        /// </summary>
        /// <param name="msg"></param>
        /// <param name="flag"></param>
        /// <param name="value"></param>
        /// <param name="localOnly">Indicates if the flag should be set only on the local object, and not on the server</param>
        public bool SetMessageFlag(IMessage msg, MessageFlag flag, bool value, bool localOnly)
        {
            bool currentValue = _client.DataManager.GetValue<Message, bool>((Message)msg, flag.ToString());
            if (currentValue == value) return true;
            _client.DataManager.SetValue(msg, flag.ToString(), value);
            if (localOnly) return true;
            ChangeFlagRequest cfr = new ChangeFlagRequest(msg, flag, value, null);
            _client.RequestManager.SubmitRequest(cfr, true);

            return cfr.Result.Response == IMAPResponse.IMAP_SUCCESS_RESPONSE;
        }