actually make vm swich displays properly or whatever
This commit is contained in:
@@ -113,14 +113,22 @@ export default class CollabVMServer {
|
|||||||
|
|
||||||
this.OnDisplayResized(initSize);
|
this.OnDisplayResized(initSize);
|
||||||
|
|
||||||
vm.GetDisplay().on('resize', (size: Size) => this.OnDisplayResized(size));
|
// vm.GetDisplay().on('resize', (size: Size) => this.OnDisplayResized(size));
|
||||||
vm.GetDisplay().on('rect', (rect: Rect) => this.OnDisplayRectangle(rect));
|
// vm.GetDisplay().on('rect', (rect: Rect) => this.OnDisplayRectangle(rect));
|
||||||
|
|
||||||
this.VM = vm;
|
this.VM = vm;
|
||||||
|
|
||||||
// hack but whatever (TODO: less rickity)
|
// hack but whatever (TODO: less rickity)
|
||||||
if (config.vm.type == 'qemu') {
|
if (config.vm.type == 'qemu') {
|
||||||
(vm as QemuVM).on('statechange', (newState: VMState) => {
|
(vm as QemuVM).on('statechange', (newState: VMState) => {
|
||||||
|
if(newState == VMState.Started) {
|
||||||
|
this.logger.Info("started!!");
|
||||||
|
|
||||||
|
// well aware this sucks but whatever
|
||||||
|
this.VM.GetDisplay().on('resize', (size: Size) => this.OnDisplayResized(size));
|
||||||
|
this.VM.GetDisplay().on('rect', (rect: Rect) => this.OnDisplayRectangle(rect));
|
||||||
|
}
|
||||||
|
|
||||||
if (newState == VMState.Stopped) {
|
if (newState == VMState.Stopped) {
|
||||||
this.logger.Info('stopped ?');
|
this.logger.Info('stopped ?');
|
||||||
setTimeout(async () => {
|
setTimeout(async () => {
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ export class QemuVM extends EventEmitter {
|
|||||||
|
|
||||||
private qemuProcess: ExecaChildProcess | null = null;
|
private qemuProcess: ExecaChildProcess | null = null;
|
||||||
|
|
||||||
private display: QemuDisplay;
|
private display: QemuDisplay | null;
|
||||||
private definition: QemuVmDefinition;
|
private definition: QemuVmDefinition;
|
||||||
private addedAdditionalArguments = false;
|
private addedAdditionalArguments = false;
|
||||||
|
|
||||||
@@ -137,7 +137,7 @@ export class QemuVM extends EventEmitter {
|
|||||||
}
|
}
|
||||||
|
|
||||||
GetDisplay() {
|
GetDisplay() {
|
||||||
return this.display;
|
return this.display!;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Private fun bits :)
|
/// Private fun bits :)
|
||||||
@@ -260,6 +260,7 @@ export class QemuVM extends EventEmitter {
|
|||||||
self.qmpInstance.on('close', onQmpError);
|
self.qmpInstance.on('close', onQmpError);
|
||||||
self.qmpInstance.on('error', (e: Error) => {
|
self.qmpInstance.on('error', (e: Error) => {
|
||||||
self.VMLog().Error("QMP Error: {0}", e.message);
|
self.VMLog().Error("QMP Error: {0}", e.message);
|
||||||
|
onQmpError();
|
||||||
});
|
});
|
||||||
|
|
||||||
self.qmpInstance.on('event', async (ev) => {
|
self.qmpInstance.on('event', async (ev) => {
|
||||||
@@ -277,7 +278,7 @@ export class QemuVM extends EventEmitter {
|
|||||||
self.qmpInstance.on('qmp-ready', async (hadError) => {
|
self.qmpInstance.on('qmp-ready', async (hadError) => {
|
||||||
self.VMLog().Info('QMP ready');
|
self.VMLog().Info('QMP ready');
|
||||||
|
|
||||||
self.display.Connect();
|
self.display?.Connect();
|
||||||
|
|
||||||
// QMP has been connected so the VM is ready to be considered started
|
// QMP has been connected so the VM is ready to be considered started
|
||||||
self.qmpFailCount = 0;
|
self.qmpFailCount = 0;
|
||||||
@@ -299,6 +300,9 @@ export class QemuVM extends EventEmitter {
|
|||||||
private async DisconnectDisplay() {
|
private async DisconnectDisplay() {
|
||||||
try {
|
try {
|
||||||
this.display?.Disconnect();
|
this.display?.Disconnect();
|
||||||
|
|
||||||
|
// create a new display (and gc the old one)
|
||||||
|
this.display = new QemuDisplay(this.GetVncPath());
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
// oh well lol
|
// oh well lol
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user