Exemple #1
0
        public static void AddDaylily(this IServiceCollection services, StartupConfig startupConfig, Action configCallback = null)
        {
            var bot = new DaylilyCore(startupConfig, configCallback);

            bot.ConfigDispatcher(startupConfig.MessageDispatcher, startupConfig.GeneralDispatcherConfig);
            foreach (var frontend in startupConfig.Frontends)
            {
                bot.AddFrontend(frontend, startupConfig.GeneralFrontendsConfig);
            }
            services.AddSingleton(bot);
        }
Exemple #2
0
 public ApiController(Bot.DaylilyCore daylily)
 {
     _daylily = daylily;
 }
Exemple #3
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env, DaylilyCore daylily)
        {
            foreach (var frontend in daylily.Frontends)
            {
                if (frontend is CoolQFrontend cqFrontend && daylily.Dispatcher is CoolQDispatcher cqDispatcher)
                {
                    //cqFrontend.PrivateMessageReceived += (sender, e) => { };
                    //cqFrontend.DiscussMessageReceived+= (sender, e) => { };
                    //cqFrontend.GroupMessageReceived += (sender, e) => { };
                    cqFrontend.Requested += (sender, e) =>
                    {
                        daylily.EventDispatcher?.Event_Received(sender, new EventEventArgs(e.ParsedObject));
                    };
                    cqFrontend.Noticed += (sender, e) =>
                    {
                        daylily.EventDispatcher?.Event_Received(sender, new EventEventArgs(e.ParsedObject));
                    };
                    //cqFrontend.EventReceived += (sender, e) =>
                    //{
                    //    daylily.EventDispatcher?.Event_Received(sender, e);
                    //};
                }

                frontend.MessageReceived += (sender, e) =>
                {
                    daylily.MessageDispatcher?.Message_Received(sender, new MessageEventArgs(e.ParsedObject));
                };
                frontend.ErrorOccured += (sender, e) => { };
            }

            var webSocketOptions = new WebSocketOptions()
            {
                KeepAliveInterval = TimeSpan.FromSeconds(120),
                ReceiveBufferSize = 4 * 1024
            };

            app.UseWebSockets(webSocketOptions);

            async Task WebSocket(HttpContext context, Func <Task> next)
            {
                if (context.Request.Path == "/ws")
                {
                    if (context.WebSockets.IsWebSocketRequest)
                    {
                        SocketLogger.WebSocket = await context.WebSockets.AcceptWebSocketAsync();

                        await SocketLogger.Response();
                    }
                    else
                    {
                        context.Response.StatusCode = 400;
                    }
                }
                else
                {
                    await next();
                }
            }

            app.Use(WebSocket);
            Logger.Raw("Websocket控制台已启动。");

            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                app.UseHsts();
            }

            app.UseStaticFiles();
            //app.UseHttpsRedirection();
            app.UseCookiePolicy();

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
        }