// This function processes the action queue for all connected users when they have one. private void ActionWork() { foreach (User u in ServerGlobals.users) { // Process the action queue if it's not blank. while (u.ActionQueue.Count != 0) { Action act = u.ActionQueue.Dequeue(); if (act == null) { break; } if (act.binaryData == null) { if (act.inst == null) { continue; } u.Socket.Send(ProtocolCodec.Encode(act.inst)); } else { u.Socket.Send(act.binaryData); } } } }
private void OnWS(User u, string message) { string[] decoded = ProtocolCodec.Decode(message); if (decoded == null) { return; } switch (decoded[0]) { default: break; case "mouse": { if (u.vm == null || u.connected == false) { break; } lock (VMLock) { u.vm.MouseMove(int.Parse(decoded[1]), int.Parse(decoded[2])); } } break; case "connect": lock (VMLock) { if (!u.connected) { // Bad but unless you have 1000 vms it should be alright. foreach (string id in ServerGlobals.virtualMachines.Keys) { if (decoded[1] == id) { Utils.Logger.Log(ServerGlobals.GetUserFromID(ID), "Connecting to VM " + id); ServerGlobals.virtualMachines[decoded[1]].ConnectUser(ServerGlobals.GetUserFromID(ID)); } } } } break; #if false case "list": if (!u.connected) { List <string> vmids = new List <string>(); foreach (string id in ServerGlobals.virtualMachines.Keys) { vmids.Add(id); Bitmap scalene_triangle = ServerGlobals.virtualMachines[id].vmc.GetDisplayBitmap(); Bitmap scaled = ResizeImage(scalene_triangle, 160, 160); //vmids.Add(); } u.ActionQueue.Enqueue(new Action { inst = vmids.ToArray() }); } break; #endif } }