コード例 #1
0
        public async Task Send(Message message)
        {
            IServiceCallback callback =
                OperationContext.Current.GetCallbackChannel <IServiceCallback>();
            IChannel channel = (IChannel)callback;

            WcfClientContext context;

            if (!callbacks.TryGetValue(channel, out context))
            {
                context            = new WcfClientContext(callback);
                callbacks[channel] = context;

                context.Closed += delegate()
                {
                    callbacks.TryRemove(channel, out context);
                };

                ClientForm clientForm = new ClientForm(context);
                clientForm.Show();
            }

            byte[] body = new byte[] { };
            if (!message.IsEmpty)
            {
                body = message.GetBody <byte[]>();
            }

            WebSocketMessageProperty property =
                (WebSocketMessageProperty)message.Properties[webSocketMessageProperty];

            await context.Receive(body, body.Length, property == null?
                                  WebSocketMessageType.Binary : property.MessageType, true);
        }
コード例 #2
0
        private HttpListener CreateHttpListener(Uri uri)
        {
            HttpListener listener = new HttpListener();
            string       scheme   = GetHttpScheme(uri);
            UriBuilder   newUri   = new UriBuilder(uri)
            {
                Scheme = scheme
            };

            listener.Prefixes.Add(newUri.ToString());
            listener.Start();
            Task task = new Task(delegate
            {
                while (true)
                {
                    HttpListenerContext listenerContext;
                    try
                    {
                        listenerContext = listener.GetContext();
                    }
                    catch
                    {
                        break;
                    }
                    if (listenerContext.Request.IsWebSocketRequest)
                    {
                        Invoke(new MethodInvoker(delegate
                        {
                            HttpListenerClientContext clientContext =
                                new HttpListenerClientContext(listenerContext);
                            ClientForm clientForm = new ClientForm(clientContext);
                            clientForm.Show();
                        }));
                    }
                    else
                    {
                        listenerContext.Response.StatusCode = 400;
                        listenerContext.Response.Close();
                    }
                }
            });

            task.Start();
            return(listener);
        }