Esempio n. 1
0
        public async Task BinaryEventTest()
        {
            ByteResponse result = null;
            var          client = new SocketIO(Uri, new SocketIOOptions
            {
                Query = new Dictionary <string, string>
                {
                    { "token", "io" }
                }
            });

            client.On("bytes", response => result = response.GetValue <ByteResponse>());

            const string dotNetCore = ".net core";
            const string client001  = "client001";
            const string name       = "unit test";

            client.OnConnected += async(sender, e) =>
            {
                await client.EmitAsync("bytes", name, new
                {
                    source = client001,
                    bytes  = Encoding.UTF8.GetBytes(dotNetCore)
                });
            };
            await client.ConnectAsync();

            await Task.Delay(200);

            await client.DisconnectAsync();

            Assert.AreEqual("client001", result.ClientSource);
            Assert.AreEqual("server", result.Source);
            Assert.AreEqual($"{dotNetCore} - server - {name}", Encoding.UTF8.GetString(result.Buffer));
        }
Esempio n. 2
0
        public async Task ReturnEchoedPayloadForByteArrayPOST()
        {
            ByteResponse response = await Settings.Host
                                    .AppendPathSegment("verbs")
                                    .AppendPathSegment("bytes")
                                    .PostJsonAsync(new
            {
                Bytes = Encoding.UTF8.GetBytes(Message)
            })
                                    .ReceiveJson <ByteResponse>();

            string message = Encoding.UTF8.GetString(response.Bytes);

            Assert.Equal(message, Message);
        }
Esempio n. 3
0
        public async Task CancelAckTest()
        {
            ByteResponse result = null;
            var          client = new SocketIO(ConnectAsyncTest.URL, new SocketIOOptions
            {
                Reconnection = false,
                Query        = new Dictionary <string, string>
                {
                    { "token", "io" }
                }
            });

            const string dotNetCore = ".net core";
            const string client001  = "client001";
            const string name       = "unit test";

            client.OnConnected += async(sender, e) =>
            {
                var cts = new CancellationTokenSource();
                cts.Cancel();
                await client.EmitAsync("binary ack", cts.Token, response =>
                {
                    result = response.GetValue <ByteResponse>();
                }, name, new
                {
                    source = client001,
                    bytes  = Encoding.UTF8.GetBytes(dotNetCore)
                });
            };
            await client.ConnectAsync();

            await Task.Delay(200);

            await client.DisconnectAsync();

            Assert.IsNull(result);
        }
Esempio n. 4
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public async Task <IHttpResponseAction> Execute(IHttpRequestContext context)
        {
            int            statusCode;
            RequestPackage package;
            var            actionDispatcher = GameEnvironment.Setting.ActionDispatcher;

            if (!actionDispatcher.TryDecodePackage(context.Request, out package, out statusCode))
            {
                return(new ByteResponse(statusCode, statusCode == 200 ? "OK" : "FAIL", new byte[0]));
            }

            GameSession session;

            if (package.ProxySid != Guid.Empty)
            {
                session          = GameSession.Get(package.ProxySid) ?? GameSession.CreateNew(package.ProxySid, context.Request);
                session.ProxySid = package.ProxySid;
            }
            else
            {
                session = (string.IsNullOrEmpty(package.SessionId)
                        ? GameSession.GetSessionByCookie(context.Request)
                        : GameSession.Get(package.SessionId))
                          ?? GameSession.CreateNew(Guid.NewGuid(), context.Request);
            }
            package.Bind(session);

            ActionGetter httpGet = actionDispatcher.GetActionGetter(package, session);

            if (package.IsUrlParam)
            {
                httpGet["UserHostAddress"] = session.RemoteAddress;
                httpGet["ssid"]            = session.KeyCode.ToString("N");
                httpGet["http"]            = "1";
            }

            var result = await System.Threading.Tasks.Task.Run <byte[]>(() =>
            {
                try
                {
                    return(ScriptEngines.GetCurrentMainScript().ProcessRequest(package, httpGet));
                }
                catch (Exception ex)
                {
                    TraceLog.WriteError("Excute mainclass error:{0}", ex);
                    return(new byte[0]);
                }
            });

            string sessionId = session.SessionId;
            var    response  = new ByteResponse(statusCode, "OK", result);

            response.CookieHandle += ctx =>
            {
                var cookie = ctx.Request.Cookies["sid"];
                if (cookie == null)
                {
                    cookie         = new Cookie("sid", sessionId);
                    cookie.Expires = DateTime.Now.AddMinutes(5);
                    ctx.Response.SetCookie(cookie);
                }
            };
            return(response);
        }