Ejemplo n.º 1
0
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseBrowserLink();
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
            }

            app.UseStaticFiles();
            app.UseCors(options => options
                        .AllowAnyOrigin()
                        .AllowAnyMethod()
                        .AllowAnyHeader()
                        );

            app.UseMvc(routes =>
            {
                routes.MapRoute(
                    name: "default",
                    template: "{controller=Home}/{action=Index}/{id?}");
            });
            var wsOptions = new WebSocketOptions()
            {
                KeepAliveInterval = TimeSpan.FromSeconds(240),
                ReceiveBufferSize = 16 * 1024
            };

            app.UseWebSockets(wsOptions);

            RoomServer.Initialize(app, "/websocket");
        }
        protected internal override async Task Shutdown(string reason)
        {
            RoomServer.Shutdown(reason);
            PlayerServer.Shutdown(reason);

            while (RoomServer.Status != NetPeerStatus.NotRunning || PlayerServer.Status != NetPeerStatus.NotRunning)
            {
                await Task.Delay(10);
            }
        }
        protected internal override void SendToAllRooms(NetMessage msg, ReliabilityMode mode)
        {
            var lmsg = RoomServer.CreateMessage(msg.Data.Length);

            msg.Clone(lmsg);
            NetMessage.RecycleMessage(msg);

            var method = mode.RoomDelivery();

            RoomServer.SendToAll(lmsg, method);
        }
        protected internal override void SendToOtherRooms(Room except, NetMessage msg, ReliabilityMode mode)
        {
            var lmsg = RoomServer.CreateMessage(msg.Data.Length);

            msg.Clone(lmsg);
            NetMessage.RecycleMessage(msg);

            var method = mode.RoomDelivery();

            RoomServer.SendToAll(lmsg, except.Connection as NetConnection, method, 0);
        }
        protected internal override void SendToRoom(Room room, NetMessage msg, ReliabilityMode mode)
        {
            var lmsg = RoomServer.CreateMessage(msg.Data.Length);

            msg.Clone(lmsg);
            NetMessage.RecycleMessage(msg);

            var method = mode.RoomDelivery();

            RoomServer.SendMessage(lmsg, room.Connection as NetConnection, method);
        }
        private void LidgrenApproveRoomConnection(NetConnection sConn, IPEndPoint sender, NetMessage msg)
        {
            if (!ApproveRoomConnection(sender, msg, out var denyReason, out var room))
            {
                sConn.Deny(denyReason);
                return;
            }

            room.Connection = sConn;

            var gbytes = room.Guid.ToByteArray();
            var gmsg   = RoomServer.CreateMessage(gbytes.Length);

            gmsg.Write(gbytes);
            sConn.Approve(gmsg);
            sConn.Tag = room;
        }
Ejemplo n.º 7
0
 //为了防止其他类去调用这个类生成这个实例
 //所以把这个构造函数私有
 private ServerManager()
 {
     loginser = new LoginServer();
     hallser  = new HallServer();
     roomser  = new RoomServer();
 }
Ejemplo n.º 8
0
 partial void ImplementationShutdown(string reason)
 {
     RoomServer.Shutdown(reason);
     PlayerServer.Shutdown(reason);
 }