public MainController(Control Control, MessageFilter MessageFilter, Boolean EnableStepping, Boolean EnableDrawing, Boolean Online) : base(Control, MessageFilter, EnableStepping, EnableDrawing, Online) { // Simplest Controller Processing = new Thread(Run) { Name = "Controller" }; // if (Online) { Connection = new DiepConnection(); Connection.MessageReceived += Client_MessageReceived; Connection.Start(); var connectMessage = new ConnectMessage() { Id = -1, Name = DiepConnection.GetUsername(), }; Connection.Enqueue(connectMessage); } // Starting Controller Dictionaries Tanks = new Dictionary <long, Tank>(); Shoots = new Dictionary <long, Shoot>(); Shapes = new Dictionary <long, Shape>(); }
public void Broadcast(DiepConnection Connection, Diep.GameConnection.Messages.Message message) { foreach (var connection in Connections.ToArray().Where(a => Connection == null || a.Id != Connection.Id)) { connection.Enqueue(message); } }
private void FreshConnection_MessageReceived(DiepConnection Connection, Diep.GameConnection.Messages.Message Message) { if (Connection is ServerDiepConnection sdc) { switch (Message.Type) { case MessageType.Message: break; case MessageType.ConnectMessage: AuthenticateClient(sdc, Message as ConnectMessage); SpawnTank(sdc); SendOtherTanks(Connection); break; case MessageType.TankMoveMessage: Broadcast(Connection, Message); break; case MessageType.TankSpawnMessage: Broadcast(null, Message); break; case MessageType.ShootMessage: ExecuteShoot(Connection as ServerDiepConnection, Message as ShootMessage); break; default: break; } } }
private void Client_MessageReceived(DiepConnection Connection, GameConnection.Messages.Message Message) { Control.Invoke((Action) delegate { switch (Message.Type) { case MessageType.Message: break; case MessageType.ConnectMessage: SetIdentification(Connection, Message as ConnectMessage); break; case MessageType.TankSpawnMessage: if (Message is TankSpawnMessage tsm) { SpawnTank(tsm); } break; case MessageType.TankMoveMessage: MoveTank(Message as TankMoveMessage); break; case MessageType.ShootMessage: ExecuteShoot(Message as ShootMessage); break; case MessageType.ShootSpawnMessage: if (Message is ShootSpawnMessage ssm) { SpawnShoot(ssm); } break; case MessageType.ShootMoveMessage: MoveShoot(Message as ShootMoveMessage); break; default: break; } });
private void SendOtherTanks(DiepConnection Connection) { foreach (var connection in Connections.ToArray().Where(a => a.Id != Connection.Id && a.Tank != null)) { var tank = connection.Tank; var bounds = tank.Bounds; var spawnMessage = new TankSpawnMessage() { Id = connection.Id, ServerTankId = tank.Id, Name = connection.Tank.Name, Height = bounds.Height, Width = bounds.Width, TeamColor = tank.TeamColor, Weight = tank.Weight, X = bounds.X, Y = bounds.Y }; Connection.Enqueue(spawnMessage); } }