private void KeepAliveCallback(object sender, ElapsedEventArgs elapsedEventArgs)
        {
            if (!IsConnected || _isDisposed)
            {
                return;
            }

            try
            {
                byte[] keepAliveBytes = PacketProtocol <TMessageType> .WrapKeepaliveMessage();

                _socket.BeginSend(keepAliveBytes, 0, keepAliveBytes.Length, 0, new AsyncCallback(SendCallback), _socket);
            }
            catch (SocketException e)
            {
                OnDisconnect(e);
            }
        }
Пример #2
0
        private void FailureRaised ( ISocketConnection sender, Exception ex ) {
            // since the client generated an exceptipon we will disconnect it
            // as soon as the error message below is sent
            clientsToDisconnect.Add(sender.SocketHandle);

            // we warn the client something happened
            Nuxleus.Bucker.Message m = new Nuxleus.Bucker.Message();
            m.Type = "error";
            m.Op = null;
            m.Error = new Nuxleus.Bucker.Error();
            m.Error.Type = "internal-server-error";
            m.Error.Code = 500;
            sender.BeginSend(Nuxleus.Bucker.Message.Serialize(m));
        }
        public void Write(byte[] buffer)
        {
            FLastException = null;

            if (!Disposed)
            {
                if (Connected)
                {
                    FSentEvent.Reset();
                    FExceptionEvent.Reset();

                    WaitHandle[] wait = new WaitHandle[] { FSentEvent, FDisconnectEvent, FExceptionEvent };

                    FSocketConnection.BeginSend(buffer);

                    int signaled = WaitHandle.WaitAny(wait, FSentTimeout, false);

                    switch (signaled)
                    {
                    case 0:

                        //----- Sent!
                        FLastException = null;
                        break;

                    case 1:

                        //----- Disconnected!
                        DoDisconnect();
                        break;

                    case 2:

                        //----- Exception!
                        break;

                    default:

                        //----- TimeOut!
                        FLastException = new TimeoutException("Write timeout.");
                        break;
                    }
                }
            }
        }
Пример #4
0
        private void MessageReceived(ISocketConnection sender, IMessage message)
        {
            if (clientsToDisconnect.Contains(sender.SocketHandle))
            {
                // if the client has been scheduled to be closed we don't process any of its
                // incoming data
                return;
            }

            Nuxleus.Bucker.Message m = Nuxleus.Bucker.Message.Parse(message.InnerMessage);
            Nuxleus.Bucker.Message responseToSend = null;

            switch (m.Op.Type)
            {
                case OperationType.GetMessage:
                    responseToSend = HandleGetMessageRequest(m);
                    break;
                case OperationType.ListMessages:
                    responseToSend = HandleListMessagesRequest(m);
                    break;
                case OperationType.PushMessage:
                    Console.WriteLine(m.ToString());
                    responseToSend = HandlePushMessageRequest(m);
                    break;
                case OperationType.DeleteMessage:
                    responseToSend = HandleDeleteMessageRequest(m);
                    break;
                case OperationType.NewQueue:
                    responseToSend = HandleNewQueueRequest(m);
                    break;
                case OperationType.DeleteQueue:
                    responseToSend = HandleDeleteQueueRequest(m);
                    break;
                case OperationType.ListQueues:
                    responseToSend = HandleListQueuesRequest(m);
                    break;
                default:
                    responseToSend = new Nuxleus.Bucker.Message();
                    responseToSend.Type = "error";
                    responseToSend.Op = null;
                    responseToSend.Error = new Nuxleus.Bucker.Error();
                    responseToSend.Error.Type = "operation-not-allowed";
                    responseToSend.Error.Code = 405;
                    break;
            }

            if (responseToSend != null)
            {
                sender.BeginSend(Nuxleus.Bucker.Message.Serialize(responseToSend));
                responseToSend = null;
            }
        }
Пример #5
0
        private void ClientConnected ( ISocketConnection sender ) {
            // we are now connected to the queue server
            // let's ensure the queues we monitor are created too
            Nuxleus.Bucker.Message nq = new Nuxleus.Bucker.Message();
            nq.Op.Type = OperationType.NewQueue;
            foreach (string queueId in monitoredQueues) {
                nq.QueueId = queueId;
                sender.BeginSend(Nuxleus.Bucker.Message.Serialize(nq));
            }

            StartMonitoring();
        }