예제 #1
0
 /// <summary>
 /// Data being sent to the serial port
 /// </summary>
 private void SerialPort_DataOut(ISerialPort sender, Queue <byte> DataBytes)
 {
     if (GeneratingEvents)
     {
         DataSent?.Invoke(sender, DataBytes);
     }
 }
예제 #2
0
        internal void ProcessSend(SocketAsyncEventArgs Args)
        {
            T Session = (T)Args.UserToken;

            if (Args.SocketError == SocketError.Success)
            {
                Session.SendBytesRemainingCount = Session.SendBytesRemainingCount - Args.BytesTransferred;

                if (Session.SendBytesRemainingCount == 0)
                {
                    SendPool.Push(Args);
                }
                else
                {
                    Session.BytesSentAlreadyCount += Args.BytesTransferred;
                    StartSend(Args);
                }

                if (DataSent != null)
                {
                    DataSent.Invoke(new SocketSentEventArgs <T>(Session, Session.DataToSend, Args.BytesTransferred));
                }
            }
            else
            {
                CloseClientSocket(Args);
                SendPool.Push(Args);
            }
        }
예제 #3
0
 public void AddNetworkListeners(NetworkConnected netConCall, DataSent dataSentCall, DataReceived dataRecvCall, NetworkError netErrorCall)
 {
     OnNetworkConnected += netConCall;
     OnDataSent         += dataSentCall;
     OnDataReceived     += dataRecvCall;
     OnNetworkError     += netErrorCall;
 }
예제 #4
0
        DataSent PushData(int type, object data, int priority, MsgQueue.MessageProc proc)
        {
            List <OneQueue> qs = Receiver.Queues;

            if (priority < 0 || priority >= qs.Count)
            {
                priority = qs.Count - 1;
            }
            object o = data;


            OneQueue.Message msg = new OneQueue.Message();
            msg.sender = this;
            msg.Data   = o;
            msg.type   = type;
            mutex.WaitOne();
            qs[priority].PushData(msg);
            DataSent d = null;

            if (type == MsgQueue.msgtype_Request)
            {
                d = new DataSent(msg);
                sentMsgs.Add(d);
            }
            mutex.ReleaseMutex();
            return(d);
        }
예제 #5
0
        public void SendMessage(DataBuffer data)
        {
            var bytes = data.ToBytes();

            Connection.BeginSend(bytes, 0, bytes.Length, 0, OnSend, Connection);
            DataSent?.Invoke(this, new ProviderDataEventArgs(null, false, null, bytes.Length));
        }
            internal async Task SendDataAsync(string data, CancellationToken token)
            {
                try
                {
                    if (Disposed)
                    {
                        return;
                    }

                    _data = string.Copy(data);
                    await _writer.WriteAsync(_data);

                    _writer.Flush();
                    if (!_data.Contains("Alive") || TLCFIDataProvider.Default.Settings.LogAliveTrace)
                    {
                        _logger.Trace(" --> {0}", _data);
                    }
                    DataSent?.Invoke(this, _data);
                }
                catch (IOException)
                {
                    Disconnected?.Invoke(this, new EventArgs());
                }
                catch
                {
                    Disconnected?.Invoke(this, new EventArgs());
                }
            }
예제 #7
0
 public virtual void SendByte(byte Data, bool RaiseEvent = true)
 {
     SendBuffer.Add(Data);
     if (RaiseEvent)
     {
         DataSent?.Invoke(this);
     }
 }
예제 #8
0
 public virtual void SendBytes(byte[] Data)
 {
     foreach (byte b in Data)
     {
         SendByte(b, false);
     }
     DataSent?.Invoke(this);
 }
예제 #9
0
 private void DataSentInvokeCallback(IAsyncResult ar)
 {
     try
     {
         DataSent?.EndInvoke(ar);
     }
     catch
     {
     }
 }
예제 #10
0
        /// <summary>
        /// 发送消息并在本地处理
        /// </summary>
        /// <param name="data">数据</param>
        /// <param name="priority">0:最高优先级,-1:最低优先级</param>
        /// <param name="proc">调用方法</param>
        /// <returns></returns>
        public object ProcessData(object data, int priority, MsgQueue.MessageProc proc)
        {
            State = SenderState.Busy;
            DataSent d = PushData(MsgQueue.msgtype_Request, data, priority, proc);

            requestThread = Thread.CurrentThread;
            d.evt.WaitOne();
            requestThread = null;
            State         = SenderState.Idle;
            return(d.retData);
        }
예제 #11
0
 internal void OnDataSent(byte[] buffer, int offset, int count)
 {
     try
     {
         DataSent?.Invoke(this, new DataEventArgs(buffer, offset, count));
     }
     catch (Exception ex)
     {
         exceptionFunc(new Exception("Exception thrown in user event", ex));
     }
 }
예제 #12
0
        public Task Send(string message)
        {
            DataSent.Add(new NotificationData
            {
                Message         = message,
                Subject         = "subject",
                RecipientsEmail = "recipientEmail"
            });

            return(Task.CompletedTask);
        }
예제 #13
0
        public void SendMessage(DataBuffer data)
        {
            if (client != null)
            {
                NetOutgoingMessage outmsg = client.CreateMessage();
                outmsg.Write(data.ToBytes());
                client.SendMessage(outmsg, NetDeliveryMethod.ReliableSequenced);

                DataSent?.Invoke(this, new ProviderDataEventArgs(null, false, data, data.GetLength()));
            }
        }
예제 #14
0
        /// <summary>
        /// 发送消息并请求响应
        /// </summary>
        /// <param name="data">数据</param>
        /// <param name="priority">0:最高优先级,-1:最低优先级</param>
        /// <returns></returns>
        public object RequestData(object data, int priority)
        {
            State = SenderState.Waiting;
            DataSent d = PushData(MsgQueue.msgtype_Request, data, priority, null);

            requestThread = Thread.CurrentThread;
            d.evt.WaitOne();
            requestThread = null;
            State         = SenderState.Idle;
            return(d.retData);
        }
예제 #15
0
        public void SendMessage(DataBuffer buffer)
        {
            var msg = buffer.ToBytes();

            msg = Compress(msg);

            client.GetStream().Write(BitConverter.GetBytes((Int16)msg.Length), 0, 2);
            client.GetStream().Write(msg, 0, msg.Length);
            client.GetStream().Flush();

            DataSent?.Invoke(this, new ProviderDataEventArgs(null, false, null, msg.Length));
        }
예제 #16
0
 /// <summary>
 /// Async callback when send is completed.
 /// </summary>
 /// <param name="ar">The asynchronous result.</param>
 private void OnSendComplete(IAsyncResult ar)
 {
     try
     {
         socket.EndSend(ar);
         DataSent?.Invoke(this, new ConnectionArgs(this));
     }
     catch
     {
         OnDisconnect();
     }
 }
예제 #17
0
        private void ProcessSend(SocketAsyncEventArgs e)
        {
            ClientToken clientToken = (ClientToken)e.UserToken;

            if (e.SocketError != SocketError.Success)
            {
                if (e.SocketError == SocketError.OperationAborted)
                {
                    return;
                }

                //Fire DataSentError event
                if (DataSendError != null)
                {
                    if (CallDataSendErrorAsync)
                    {
                        DataSendError.BeginInvoke(this, r => DataSendError.EndInvoke(r), null);
                    }
                    else
                    {
                        DataSendError(this);
                    }
                }

                clientToken.ResetSend();
                ProcessDisconnect(e);
            }

            clientToken.SendBytesRemaining = clientToken.SendBytesRemaining - e.BytesTransferred;
            if (clientToken.SendBytesRemaining == 0)
            {
                //Fire DataSent event
                if (DataSent != null)
                {
                    if (CallDataSentAsync)
                    {
                        DataSent.BeginInvoke(this, r => DataSent.EndInvoke(r), null);
                    }
                    else
                    {
                        DataSent(this);
                    }
                }

                clientToken.ResetSend();
            }
            else
            {
                clientToken.BytesSentAlready += e.BytesTransferred;
                StartSend();
            }
        }
예제 #18
0
        //private
        private void onSend(IAsyncResult r)
        {
            Socket socket = (Socket)r.AsyncState;

            try {
                socket.EndSendTo(r);
            } catch (Exception ex) {
                Error?.Invoke(this, new ExceptionEventArgs(ex));
            }

            DataSent?.Invoke(this, EventArgs.Empty);
            sendNext();
        }
예제 #19
0
        private async void SendAsync(int msPeriodSend)
        {
            int msDataSending;

            var sw = new Stopwatch();

            while (true)
            {
                ShowMessage("Waiting for a connection...");
                client = await server.AcceptTcpClientAsync();

                ShowMessage("Connected!");

                stream = client.GetStream();

                int millisecondsDelay;
                while (!cancelTokenSource.Token.IsCancellationRequested)
                {
                    sw.Restart();
                    try
                    {
                        if (imageCollection.TryTake(out Bitmap bmp))
                        {
                            var data = await Task.Run(() => GrayImage.GrayImageToByte(bmp));

                            await stream.WriteAsync(data, 0, data.Length);
                        }
                    }
                    catch
                    {
                        client.Close();
                        ShowMessage("Client disconnected!");

                        break;
                    }
                    sw.Stop();

                    ShowMessage("Data sent!");

                    msDataSending = (int)sw.ElapsedMilliseconds;

                    DataSent?.Invoke(msDataSending);

                    millisecondsDelay = msPeriodSend - msDataSending;
                    if (millisecondsDelay > 0)
                    {
                        await Task.Delay(millisecondsDelay, cancelTokenSource.Token);
                    }
                }
            }
        }
예제 #20
0
        /// <summary>Asynchronous callback when a send completes successfully.</summary>
        /// <param name="asyncResult">The asynchronous result.</param>
        private void OnSendComplete(IAsyncResult asyncResult)
        {
            try
            {
                socket.EndSend(asyncResult);

                // Raise our data sent event.
                DataSent?.Invoke(this, new ConnectionArgs(this));
            }
            catch
            {
                OnConnectionDisconnect();
            }
        }
        public void Send(string text)
        {
            byte[] data = Encoding.ASCII.GetBytes(text);

            if (!_socket.Connected)
            {
                _socket.Connect(IPAddress.Parse(_address), _port);
                Connected?.Invoke(null, EventArgs.Empty);
            }

            _socket.BeginSend(data, 0, data.Length, SocketFlags.None, (ar) =>
            {
                var bytes = _socket.EndSend(ar);
                DataSent?.Invoke(this, text);
            }, new object());
        }
예제 #22
0
        private void WritePort(string text, bool addOk = true)
        {
            _comm.WritePort(text);
            if (DataSent != null)
            {
                DataSent.Invoke(this, text);
            }

            if (addOk && text != "ok")
            {
                _comm.WritePort("ok");
                if (DataSent != null)
                {
                    DataSent.Invoke(this, "ok");
                }
            }
        }
예제 #23
0
        //private
        private void onSend(IAsyncResult r)
        {
            Socket socket = (Socket)r.AsyncState;

            try {
                socket.EndSend(r);
            } catch (Exception ex) {
                Error?.Invoke(this, new ExceptionEventArgs(ex));
                Disconnect();
                return;
            }
            DataSent?.Invoke(this, EventArgs.Empty);
            if (IsConnected)
            {
                sendNext();
            }
        }
예제 #24
0
        public void SendMessage(object recipientKey, DataBuffer buffer)
        {
            var msg = Compress(buffer.ToBytes());

            try {
                var tcpClient = recipientKey as TcpClient;
                tcpClient.GetStream().Write(BitConverter.GetBytes((Int16)msg.Length), 0, 2);
                tcpClient.GetStream().Write(msg, 0, msg.Length);
                tcpClient.GetStream().Flush();

                DataSent?.Invoke(this, new ProviderDataEventArgs(recipientKey, false, null, msg.Length));
            } catch (Exception ex) {
                if (connected.Contains(recipientKey as TcpClient))
                {
                    DisconnectUser(recipientKey);
                }
            }
        }
예제 #25
0
파일: Client.cs 프로젝트: OJuergen/Netling
        public void SendPlayerData(string playerData)
        {
            if (State == ClientState.Debug)
            {
                return;
            }
            if (State != ClientState.Connected)
            {
                throw new InvalidOperationException("Cannot send player data: client not connected");
            }

            DataStreamWriter writer = _clientDriver.BeginSend(_reliablePipeline, _clientToServerConnection);

            writer.WriteInt(Commands.PlayerData);
            writer.WriteManagedString(playerData);
            _clientDriver.EndSend(writer);
            DataSent?.Invoke(writer.Length);
        }
예제 #26
0
파일: Client.cs 프로젝트: OJuergen/Netling
        public void SendPing()
        {
            if (State == ClientState.Debug)
            {
                return;
            }
            if (State != ClientState.Connected)
            {
                Debug.LogWarning($"Cannot send messages in client state {State}");
                return;
            }

            DataStreamWriter writer = _clientDriver.BeginSend(_unreliablePipeline, _clientToServerConnection);

            writer.WriteInt(Commands.Ping);
            writer.WriteFloat(Time.time);
            _clientDriver.EndSend(writer);
            DataSent?.Invoke(writer.Length);
        }
예제 #27
0
        /// <summary>
        /// Creates the TcpClientReader and TcpClientWriter
        /// </summary>
        /// <param name="remoteEndPoint">The remote server address</param>
        private void FinalizeConnection(IPEndPoint remoteEndPoint)
        {
            _networkStream             = _client.GetStream();
            _reader                    = new TcpClientReader(_client);
            _reader.OnException       += Disconnect;
            _reader.OnMessageReceived += OnMessageReceived;
            _reader.Start();

            _writer                = new TcpClientWriter(_client);
            _writer.OnException   += Disconnect;
            _writer.OnMessageSent += (message) => { DataSent?.Invoke(this, message); };
            _writer.Start();


            //Name = Guid.NewGuid().ToString() + "." + _client.Client.RemoteEndPoint.As<IPEndPoint>()?.Address.ToString() ?? "";
            Name = RemoteEndPoint.ToString();
            //var ipEndPoint = RemoteEndPoint;
            //if (ipEndPoint != null)
            //    Name = ipEndPoint.Address.ToString() + ":" + ipEndPoint.Port.ToString();
        }
예제 #28
0
        public void Send(Packet data)
        {
            if (Stream == null || !_socket.Connected)
            {
                return;
            }

            Task.Run( // Initiate the sender thread
                () => {
                try {
                    byte[] buffer = data.SerializePacket();
                    Stream?.Write(buffer, 0, buffer.Length);

                    DataSent?.Invoke(this, data);
                } catch (Exception ex) {
                    ConnectionLost?.Invoke(this, ex);
                }
            }
                );
        }
예제 #29
0
        public async Task SendMessage(string message)
        {
            if (_underlyingWebSocket.State == WebSocketState.Open)
            {
                var bytes = Encoding.UTF8.GetBytes(message);

                await _underlyingWebSocket.SendAsync(
                    new ArraySegment <byte>(bytes),
                    WebSocketMessageType.Text,
                    true,
                    CancellationToken.None
                    );

                DataSent?.Invoke(this, new WebSocketDataEventArgs(message));
            }
            else
            {
                throw new InvalidOperationException("Cannot send data while websocket is not open.");
            }
        }
예제 #30
0
파일: Client.cs 프로젝트: OJuergen/Netling
        public void SendRPC(NetAsset netAsset, string methodName, object[] args)
        {
            if (State == ClientState.Debug)
            {
                return;
            }
            if (State != ClientState.Connected)
            {
                throw new InvalidOperationException($"Cannot send rpc {methodName}: not connected");
            }

            DataStreamWriter streamWriter = _clientDriver.BeginSend(_reliablePipeline, _clientToServerConnection);

            streamWriter.WriteInt(Commands.NetAssetRPC);
            streamWriter.WriteFloat(Server.Time);
            streamWriter.WriteInt(netAsset.NetID);
            netAsset.SerializeRPC(ref streamWriter, methodName, args);
            _clientDriver.EndSend(streamWriter);
            DataSent?.Invoke(streamWriter.Length);
        }
예제 #31
0
	public void AddNetworkListeners(NetworkConnected netConCall, DataSent dataSentCall, DataReceived dataRecvCall, NetworkError netErrorCall) {
		OnNetworkConnected += netConCall;
		OnDataSent += dataSentCall;
		OnDataReceived += dataRecvCall;
		OnNetworkError += netErrorCall;
	}