Exemplo n.º 1
0
 public void Read <T>(Message message, Action <T> newMessage, ReadMessageData messageData = null, long peerId = 0)
 {
     if (peerId == 0)
     {
         peerId = (long)Id;
     }
     Send(message, peerId);
     Read <T>(newMessage, messageData, peerId);
 }
Exemplo n.º 2
0
        public void Read <T>(Action <T> newMessage, ReadMessageData messageData = null, long peerId = 0)
        {
            if (_readMessageData == null)
            {
                FillReadMessageData(Provider.BotInstance);
            }
            if (peerId == 0)
            {
                peerId = (long)Id;
            }

            GetChat(peerId).NewMessageAction = message =>
            {
                ReadMessageData data;

                if (messageData != null)
                {
                    data = messageData;
                }
                else if (_readMessageData.ContainsKey(typeof(T)))
                {
                    data = _readMessageData[typeof(T)];
                }
                else
                {
                    throw new InvalidCastException("Unknown type");
                }

                if (!data.TryParse(message, out object result))
                {
                    Send(data.Error, peerId);
                    Read(newMessage, messageData);
                    return;
                }

                GetChat(peerId).NewMessageAction = null;
                newMessage?.Invoke((T)result);
            };
        }