コード例 #1
0
        public void ConvertSDKUnrecognizedSenderStatusToAPIUnknownValue()
        {
            apiSenderStatus1 = "NEWLY_ADDED_SENDER_STATUS";
            SenderStatus unrecognizedSenderStatus = SenderStatus.valueOf(apiSenderStatus1);
            string       acutalApiScheme          = new SenderStatusConverter(unrecognizedSenderStatus).ToAPISenderStatus();

            Assert.AreEqual(apiSenderStatus1, acutalApiScheme);
        }
コード例 #2
0
        public void whenBuildingSenderStatusWithUnknownAPIValueThenUNRECOGNIZEDSenderStatusIsReturned()
        {
            string expectedSDKValue = "UNRECOGNIZED";


            SenderStatus classUnderTest = SenderStatus.valueOf("ThisSenderStatusDoesNotExistINSDK");
            String       actualSDKValue = classUnderTest.getSdkValue();


            Assert.AreEqual(expectedSDKValue, actualSDKValue);
        }
コード例 #3
0
        public void whenBuildingSenderStatusWithAPIValueLOCKEDThenLOCKEDSenderStatusIsReturned()
        {
            string expectedSDKValue = "LOCKED";


            SenderStatus classUnderTest = SenderStatus.valueOf("LOCKED");
            String       actualSDKValue = classUnderTest.getSdkValue();


            Assert.AreEqual(expectedSDKValue, actualSDKValue);
        }
コード例 #4
0
 public void TestSenderStatus()
 {
     foreach (SenderStatus senderStatus in SenderStatus.Values())
     {
         Assert.IsNotNull(senderStatus.ToString());
         Assert.IsNotEmpty(senderStatus.ToString());
     }
     Assert.AreEqual(0, (int)SenderStatus.INVITED);
     Assert.AreEqual("ACTIVE", (string)SenderStatus.ACTIVE);
     Assert.AreEqual("LOCKED", SenderStatus.LOCKED.GetName());
 }
コード例 #5
0
        public void SendData <T>(T Data) where T : ISerializable
        {
            Status       = SenderStatus.Preparing;
            MemoryStream = new MemoryStream();
            BinaryFormatter BinaryFormatter = new BinaryFormatter(); //二进制序列化类

            BinaryFormatter.Serialize(MemoryStream, Data);           //将消息类转换为内存流
            FullData     = MemoryStream.GetBuffer();
            DataLength   = FullData.Length;
            SendedLength = 0;
            MemoryStream.Flush();

            Socket.SendAsync(Encoding.UTF8.GetBytes("DataTransmit|*|" + DataLength));
        }
コード例 #6
0
 public void SendCompleted(object Sender, SocketEventArgs E)
 {
     if (Status == SenderStatus.Sending)
     {
         if (SendedLength < DataLength)
         {
             Buffer = new byte[DataLength - SendedLength < BufferLength ?
                               DataLength - SendedLength : BufferLength];
             Buffer = FullData.Skip(SendedLength).Take(Buffer.Length).ToArray();
             E.Socket.SendAsync(Buffer); //从内存中读取二进制流,并发送
             SendedLength += Buffer.Length;
         }
         else
         {
             Status = SenderStatus.Ready;
         }
     }
     else if (Status == SenderStatus.Preparing)
     {
         Status = SenderStatus.Sending;
         Buffer = new byte[BufferLength];
         MemoryStream.Position = 0;  //将流的当前位置重新归0,否则Read方法将读取不到任何数据
         if (SendedLength < DataLength)
         {
             Buffer = new byte[DataLength - SendedLength < BufferLength ?
                               DataLength - SendedLength : BufferLength];
             Buffer = FullData.Skip(SendedLength).Take(Buffer.Length).ToArray();
             E.Socket.SendAsync(Buffer); //从内存中读取二进制流,并发送
             SendedLength += Buffer.Length;
         }
     }
     SendOnce?.Invoke(this, new SendOnceEventArgs()
     {
         Socket           = Socket,
         NewData          = Buffer,
         CumulativeLength = SendedLength,
         ReceivedLength   = Buffer.Length,
         TotalLength      = DataLength,
         Status           = Status
     });
 }
コード例 #7
0
 public senderDestination()
 {
     Status = SenderStatus.Pending;
 }
コード例 #8
0
ファイル: Sender.cs プロジェクト: nordvall/letterbox
        private void HasResponse(IAsyncResult result)
        {
            try
            {
                _client.EndSend(result);

                SenderEnvelope envelope = null;

                lock (_syncLock)
                {
                    envelope = _sendQueue.Dequeue();
                }

                _retryTimer.Reset();

                var eventArgs = new SenderEventArgs(envelope, SenderEventArgs.SenderEventType.Succeeded);
                DispatchEvent(MessageSucceeded, eventArgs);
            }
            catch (Exception ex)
            {
                Status = SenderStatus.WaitForRetry;

                SenderEnvelope envelope = _sendQueue.Peek();

                var eventArgs = new SenderEventArgs(envelope, SenderEventArgs.SenderEventType.Failed);
                eventArgs.ErrorMessage = ex.Message;
                DispatchEvent(MessageFailed, eventArgs);

                _retryTimer.Wait();
            }

            TryToSendFirstMessageInQueue();
        }
コード例 #9
0
ファイル: Sender.cs プロジェクト: nordvall/letterbox
        private void TryToSendFirstMessageInQueue()
        {
            if (_sendQueue.Count > 0)
            {
                SenderEnvelope envelope = _sendQueue.Peek();
                envelope.Attempts.Add(DateTime.Now);

                Status = SenderStatus.Sending;
                _client.BeginSend(envelope.Message, new AsyncCallback(HasResponse));

                var eventArgs = new SenderEventArgs(envelope, SenderEventArgs.SenderEventType.Attempted);
                DispatchEvent(MessageAttempted, eventArgs);
            }
            else
            {
                Status = SenderStatus.Idle;
            }
        }
コード例 #10
0
 public AccountMemberBuilder WithStatus(SenderStatus status)
 {
     this.status = status;
     return this;
 }