Пример #1
0
        private static void ReceiveCallback(IAsyncResult ar)
        {
            // Retrieve the state object and the client socket
            // from the asynchronous state object.
            StateObject state  = (StateObject)ar.AsyncState;
            Socket      client = state.workSocket;
            // Read data from the remote device.
            int bytesRead = client.EndReceive(ar);

            if (bytesRead > 0)
            {
                var start = 0;
                do
                {
                    var pos = Array.IndexOf(state.buffer, (byte)0, start);

                    if (pos != -1 && pos < bytesRead)
                    {
                        //end separator, full payload availabled
                        state.sb.Append(Encoding.UTF8.GetString(state.buffer, start, pos - start));
                        string msg = state.sb.ToString();
                        state.sb = new StringBuilder();
                        //send message to UI deletage
                        if (Anchor.InvokeRequired)
                        {
                            var d = new ProcessMsgDelegate(ProcessMsg);
                            Anchor.Invoke(d, new object[] { msg });
                        }
                        else
                        {
                            ProcessMsg(msg);
                        }
                        start = pos + 1;
                    }
                    else
                    {
                        state.sb.Append(Encoding.UTF8.GetString(state.buffer, start, bytesRead - start));
                        break;
                    }
                } while (true);

                client.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0,
                                    new AsyncCallback(ReceiveCallback), state);
            }
        }
Пример #2
0
 public override PushMsgResult PushMsg(ProcessMsgDelegate sink) => sink(ref m_inProgress);
Пример #3
0
 public abstract PushMsgResult PushMsg(ProcessMsgDelegate sink);