Exemplo n.º 1
0
        protected override void SendAsync(Threads.Result result, byte[] data)
        {
            try
            {
                if (client != null)
                {
                    Converter32 c = new Converter32(data.Length);

                    writeBuffer[0] = c.Byte1;
                    writeBuffer[1] = c.Byte2;
                    writeBuffer[2] = c.Byte3;
                    writeBuffer[3] = c.Byte4;

                    stream.BeginWrite(writeBuffer, 0, writeBuffer.Length, FinalizeSendLength, new SendState {
                        result = result, data = data
                    });
                }
                else
                {
                    throw new ArgumentNullException("client", "The connection tcpClient is not defined.");
                }
            }
            catch (Exception e)
            {
                result.Complete(e);
            }
        }
Exemplo n.º 2
0
        protected override void SendAsync(Threads.Result result, BufferPool.Buffer data, bool dispose_buffer = true)
        {
            try
            {
                if (Connected())
                {
                    Converter32 c = new Converter32(data.Size);

                    writeBuffer.Data[0] = c.Byte1;
                    writeBuffer.Data[1] = c.Byte2;
                    writeBuffer.Data[2] = c.Byte3;
                    writeBuffer.Data[3] = c.Byte4;

                    BeginSend(writeBuffer.Data, writeBuffer.Data.Length, FinalizeSendLength, new SendState(result, data, dispose_buffer));
                }
                else
                {
                    throw new ArgumentNullException("client", "The connection is not opened.");
                }
            }
            catch (Exception e)
            {
                result.Complete(e);
            }
        }
Exemplo n.º 3
0
        protected void Worker()
        {
            WaitHandle[] wait = new WaitHandle[] { stopEvent, addEvent };

            BufferPool.Buffer heartbeat_data = new BufferPool.Buffer(null, new byte[0], false);

            int event_idx;

            while ((event_idx = WaitHandle.WaitAny(wait, parameters.heartbeat)) != 0)
            {
                if (event_idx == WaitHandle.WaitTimeout)
                {
                    // Handle heartbeat
                    if (sendResult == null || sendResult.Done)
                    {
                        sendResult = CreateResult();

                        SendAsync(sendResult, heartbeat_data, false);
                    }
                }
                else
                {
                    Threads.Task task = null;

                    lock (addEvent)
                    {
                        if (sendResult == null || sendResult.Done)
                        {
                            sendResult = null;

                            lock (sendQueue)
                            {
                                if (sendQueue.Count > 0)
                                {
                                    task = sendQueue.Dequeue();
                                }
                                else
                                {
                                    // Nothing to do anymore, go to sleep
                                    addEvent.Reset();
                                }
                            }
                        }
                        else
                        {
                            // Not done yet, go to sleep
                            addEvent.Reset();
                        }
                    }

                    if (task != null)
                    {
                        sendResult = (Threads.Result)task.result;

                        task.callback();
                    }
                }
            }
        }
Exemplo n.º 4
0
        public void SendAsync(BufferPool.Buffer data, bool dispose_buffer = true)
        {
            if (!disposed)
            {
                lock (sendQueue)
                {
                    Threads.Result result = CreateResult();

                    sendQueue.Enqueue(new Threads.Task(() => SendAsync(result, data, dispose_buffer), result));
                }

                lock (addEvent)
                {
                    addEvent.Set();
                }
            }
        }
Exemplo n.º 5
0
        public void SendAsync(byte[] data)
        {
            if (!disposed)
            {
                lock (sendQueue)
                {
                    Threads.Result result = CreateResult();

                    sendQueue.Enqueue(new Threads.Task(() => SendAsync(result, data), result));
                }

                lock (addEvent)
                {
                    addEvent.Set();
                }
            }
        }
Exemplo n.º 6
0
        public Base(Negotiation.Base parent, Message.Negotiation.Parameters parameters, UnityAction <Base> disconnection_handler)
        {
            this.parent     = parent;
            this.parameters = parameters;

            events = new ChannelEvents();
            events.onDisconnectedHandler = new ChannelEvents.DisonnectionHandlerCallback();
            events.onDisconnectedHandler.AddListener(disconnection_handler);

            sendResult = null;

            sendQueue = new Queue <Threads.Task>();

            stopEvent = new ManualResetEvent(false);
            addEvent  = new ManualResetEvent(false);

            worker = new Threads.Thread(Worker);
        }
Exemplo n.º 7
0
 protected override void SendAsync(Threads.Result result, byte[] data)
 {
     try
     {
         if (client != null)
         {
             client.BeginSend(data, data.Length, FinalizeSend, new SendState {
                 result = result, data = data
             });
         }
         else
         {
             throw new ArgumentNullException("client", "The connection UdpClient is not defined.");
         }
     }
     catch (Exception e)
     {
         result.Complete(e);
     }
 }
Exemplo n.º 8
0
 protected abstract void SendAsync(Threads.Result result, BufferPool.Buffer data, bool dispose_buffer = true);
Exemplo n.º 9
0
 public SendState(Threads.Result result, BufferPool.Buffer data, bool dispose_buffer)
 {
     this.result         = result;
     this.data           = data;
     this.dispose_buffer = dispose_buffer;
 }
Exemplo n.º 10
0
 protected abstract void SendAsync(Threads.Result result, byte[] data);