private void MouseMoveExt(object sender, MouseEventExtArgs e) { BabylonMS.BMSPack outputpack = InitPack(); if ((e.Button == MouseButtons.XButton1) || (e.Button == MouseButtons.XButton2)) { e.Handled = true; return; } if (VirtualMouse) { User32.SetCursorPos(origo.X, origo.Y); MouseEventArgs e2; VirtualMouseX += e.X - origo.X - virtualOrigoX; VirtualMouseY += e.Y - origo.Y - virtualOrigoY; e2 = new MouseEventArgs(e.Button, e.Clicks, VirtualMouseX, VirtualMouseY, e.Delta); AddToPack(outputpack, e2); e.Handled = true; } else { AddToPack(outputpack, e); } if (bms != null) { sessiontransferpacket(outputpack); //lossy veszteséges a down és UP viszont nem //bms.TransferPacket(session.writer, outputpack, true); } }
static void Main(string[] args) { outputpack = new BabylonMS.BMSPack(); bms = BabylonMS.BabylonMS.ShipDocking(shipUUID, args); bms.NewInputFrame += NewInputFrame; bms.OpenGate(true); }
//void InputFrame_fromImageBuffer(String partnerUUID, BabylonMS.BMSPack imagebufferPack, StreamReader imagebufferReader, StreamWriter imagebufferWriter) void InputFrame_fromImageBuffer(BabylonMS.BMSEventSessionParameter imagebuffersession) { // The Imgebuffer sent some hwnd image data //please send to requester android try { byte cmd = (byte)imagebuffersession.inputPack.GetFieldByName("CMD").getValue(0); Int64 ID = (Int64)imagebuffersession.inputPack.GetFieldByName("REQID").getValue(0); AndroidDescriptor thisAndroid = getAndroidDescriptor(ID); switch (cmd) { case VRCEShared.CONST_COMMAND_RETRIEVE: if (imagebuffersession.inputPack.FieldsCount() > 2) { BabylonMS.BMSPack pack = new BabylonMS.BMSPack(); pack.AddField("CMD", BabylonMS.BabylonMS.CONST_FT_INT8).Value(VRCEShared.CONST_ANDROIDCOMMAND_RETRIEVE_ALL); pack.AddField("PCKCNT", BabylonMS.BabylonMS.CONST_FT_INT8).Value((byte)thisAndroid.sentPackCounter++); int cnt = (imagebuffersession.inputPack.FieldsCount() - 2) / 3; for (int i = 0; i < cnt; i++) { byte idx = (byte)imagebuffersession.inputPack.GetField((i * 4) + 2).getValue(0); pack.AddField("IDX", BabylonMS.BabylonMS.CONST_FT_INT8).Value(idx); pack.AddField("HWND", BabylonMS.BabylonMS.CONST_FT_INT64).Value(imagebuffersession.inputPack.GetField((i * 4) + 3).getValue(0)); pack.AddField("GROUP", BabylonMS.BabylonMS.CONST_FT_UUID).ValueAsUUID(imagebuffersession.inputPack.GetField((i * 4) + 4).GetUUIDValue(0)); pack.AddField("IMAGE", BabylonMS.BabylonMS.CONST_FT_BYTE).Value(imagebuffersession.inputPack.GetField((i * 4) + 5).getValue()); } BabylonMS.BabylonMS.TransferPacket(thisAndroid.writer, pack, true, thisAndroid.locker); //transfer images to requester android } break; } } finally { } }
public void AddToPack(BabylonMS.BMSPack outputpack, MouseEventArgs e) { BabylonMS.BMSField btn = outputpack.GetFieldByName("BUTTON"); //Able to call more then one and add extend field array BabylonMS.BMSField X = outputpack.GetFieldByName("X"); BabylonMS.BMSField Y = outputpack.GetFieldByName("Y"); uint button = (uint)e.Button; if (VirtualMouse) { if ((e.Button != MouseButtons.None) && (buttonState.CompareTo("") == 0)) { buttonState = "down"; } button |= VRMainContentExporter.VRCEShared.CONST_MOUSEBUTTON_VIRTUAL; if (buttonState.ToLower().CompareTo("down") == 0) { button |= VRMainContentExporter.VRCEShared.CONST_MOUSEBUTTON_DOWN; } btn.Value((int)button); X.Value((UInt16)VirtualMouseX); Y.Value((UInt16)VirtualMouseY); } else { if (buttonState.ToLower().CompareTo("down") == 0) { button |= VRMainContentExporter.VRCEShared.CONST_MOUSEBUTTON_DOWN; } btn.Value((int)button); X.Value((UInt16)(e.X - left)); Y.Value((UInt16)(e.Y - top)); } }
public void BringToFront() { focused = this; BabylonMS.BMSPack pack = new BabylonMS.BMSPack(); pack.Attribs = screensession.outputPack.Attribs; pack.setMinTimeWithoutStart(screensession.outputPack.MinTime); pack.AddField("CMD", BabylonMS.BabylonMS.CONST_FT_INT8).Value(VRCEShared.CONST_CAPTURE_FOCUS_WINDOW); screensession.TransferPacket(true, pack); //v;dett sempahore lock }
/* * private void sendPack(MemoryStream mem, NetworkStream stream) * { * long headersize = mem.Length; * byte[] packetLength = BitConverter.GetBytes(headersize); * stream.Write(packetLength, 0, 4); * mem.WriteTo(stream); * stream.Flush(); * } */ public BabylonMS.BMSPack InitPack() { BabylonMS.BMSPack outputpack = new BabylonMS.BMSPack(); outputpack.AddField("CMD", BabylonMS.BabylonMS.CONST_FT_INT8).Value(VRMainContentExporter.VRCEShared.CONST_IC_EVENT); BabylonMS.BMSField btn = outputpack.AddField("BUTTON", BabylonMS.BabylonMS.CONST_FT_INT32); BabylonMS.BMSField X = outputpack.AddField("X", BabylonMS.BabylonMS.CONST_FT_INT16); BabylonMS.BMSField Y = outputpack.AddField("Y", BabylonMS.BabylonMS.CONST_FT_INT16); return(outputpack); }
private void sessiontransferpacket(BabylonMS.BMSPack outputpack) { if (session.writelock.WaitOne(0)) //kimarad ha nem tudom elküldeni { session.writelock.Release(); session.outputPack = outputpack; Task t2 = Task.Factory.StartNew(() => { session.TransferPacket(true); }); } }
//T O A N D R O I D //public void sendNoticeToAndroidsNewContent(BabylonMS.BMSPack inputpack, StreamReader reader, StreamWriter writer) public void sendNoticeToAndroidsNewContent(BabylonMS.BMSEventSessionParameter session) { BabylonMS.BMSPack androidpack; foreach (AndroidDescriptor android in AndroidsList) { try { if (android.isEnabled(session)) //adott android mit kaphat meg... { byte cmd = (byte)session.inputPack.GetFieldByName("CMD").getValue(0); switch (cmd) { case VRCEShared.CONST_COMMAND_STORE: //->CONST_ANDROIDCOMMAND_CHANGE_HWND //Translate pack androidpack = new BabylonMS.BMSPack(); session.inputPack.CopyTo(androidpack); androidpack.GetFieldByName("CMD").clearValue().Value(VRCEShared.CONST_ANDROIDCOMMAND_CHANGE_HWND); //ClearValue because addarray to next position (2.) androidpack.AddField("PCKCNT", BabylonMS.BabylonMS.CONST_FT_INT8).Value((byte)android.sentPackCounter++); BabylonMS.BabylonMS.TransferPacket(android.writer, androidpack, true, android.locker); break; case VRCEShared.CONST_ANDROIDCOMMAND_LOST_WINDOW: androidpack = session.inputPack; androidpack.AddField("PCKCNT", BabylonMS.BabylonMS.CONST_FT_INT8).Value((byte)android.sentPackCounter++); BabylonMS.BabylonMS.TransferPacket(android.writer, androidpack, true, android.locker); break; case VRCEShared.CONST_IC_EVENT: //->CONST_ANDROIDCOMMAND_IC_EVENT androidpack = new BabylonMS.BMSPack(); session.inputPack.CopyTo(androidpack); androidpack.GetFieldByName("CMD").clearValue().Value(VRCEShared.CONST_ANDROIDCOMMAND_IC_EVENT); //ClearValue because addarray to next position (2.) ScreenCapture focused = ScreenCapture.getFocused(); if (focused != null) { androidpack.AddField("LEFT", BabylonMS.BabylonMS.CONST_FT_INT16).Value((Int16)ScreenCapture.frame[0]); androidpack.AddField("TOP", BabylonMS.BabylonMS.CONST_FT_INT16).Value((Int16)ScreenCapture.frame[1]); } androidpack.AddField("PCKCNT", BabylonMS.BabylonMS.CONST_FT_INT8).Value((byte)android.sentPackCounter++); BabylonMS.BabylonMS.TransferPacket(android.writer, androidpack, true, android.locker); break; } } } catch (Exception) { } } }
// az aktuális pack tartalom engedélyezve? public bool isEnabled(BabylonMS.BMSEventSessionParameter session) { BabylonMS.BMSPack pack = session.inputPack; if (selection.Count() < 1) { return(true); } //if empty the selection list then accepted (all types) long cmd = pack.GetField(0).getValue(0); //CMD if (cmd == VRCEShared.CONST_COMMAND_STORE) //now only one type of IMAGEPACK { long hwnd = pack.GetFieldByName("HWND").getValue(0); String group = pack.GetFieldByName("GROUP").GetUUIDValue(0); if (selection.Find(x => ((x.type == Selection.CONST_PACKTYPE_IMAGE) && (x.hwnd == hwnd) && (x.hwndgroupUUID == group))) != null) { return(true); //found STORE/HWND data } else { if (selection.Find(x => ((x.type == Selection.CONST_PACKTYPE_IMAGE))) == null) { //ebben a t\pusban egy'ltal'n nincs adat akkor elfogadva return(true); } } return(false); } //check mouse if (cmd == VRCEShared.CONST_IC_EVENT) { String mouseUUID = session.shipUUID; if (selection.Find(x => ((x.type == Selection.CONST_PACKTYPE_CONTROLLER) && (x.mouseUUID == mouseUUID))) != null) { return(true); //found stored data erre az egérre fel van iratkozva } else { if (selection.Find(x => ((x.type == Selection.CONST_PACKTYPE_CONTROLLER))) == null) { //ebben a t\pusban egy'ltal'n nincs adat akkor úgy vesszük fel van iratkozva rá return(true); } } } return(false); //unknown pack CMD }
private void HookManager_MouseUp(object sender, MouseEventArgs e) { mousebutton = MouseButtons.None; buttonState = "up"; BabylonMS.BMSPack outputpack = InitPack(); AddToPack(outputpack, e); if (bms != null) { session.outputPack = outputpack; Task t2 = Task.Factory.StartNew(() => { session.TransferPacket(true); }); //sessiontranferpacket(outputpack); //bms.TransferPacket(session.writer, outputpack, true); } buttonState = ""; }
static void NewInputFrame(BabylonMS.BMSEventSessionParameter session) { if (debug) { Console.WriteLine("NEW INPUT PACK"); } if (session.inputPack.FieldsCount() > 0) { BabylonMS.BMSPack outputpack = new BabylonMS.BMSPack(); byte command = (byte)session.inputPack.GetField(0).getValue(0); switch (command) { case VRMainContentExporter.VRCEShared.CONST_IC_MODE: //outputpack.AddField("IDX", BabylonMS.BabylonMS.CONST_FT_INT8).Value((byte)buf.position_in_buffer); //bms.TransferPacket(session.writer, outputpack, true); break; } } }
static void InputFrame(BabylonMS.BabylonMS bms, BabylonMS.BMSEventSessionParameter session) //newinput frame or continuous { String partnerUUID = session.shipUUID; bool isFirstTime; Int64 ID = IDGenerator.GetId(session.reader, out isFirstTime); //The client ID from reader instance unique ID try { /* * //Az inputpack paramétermintázatának ellenőrzésére szolgál (nem szükséges) * //Elválasztva egymás után a paramétermintázatok. * session.inputPack.AcceptedEnergyPattern(new byte[] { * BabylonMS.BabylonMS.CONST_FT_INT8,BabylonMS.BabylonMS.CONST_FT_INT64,BabylonMS.BabylonMS.CONST_FT_BYTE,BabylonMS.BabylonMS.CONST_FT_END, * BabylonMS.BabylonMS.CONST_FT_INT8,BabylonMS.BabylonMS.CONST_FT_INT64,BabylonMS.BabylonMS.CONST_FT_END * } * ); */ byte command = (byte)session.inputPack.GetField(0).getValue(0); BabylonMS.BMSPack outputpack = new BabylonMS.BMSPack(); Int64 hwnd; String group; String key; MediaBuffer buf; //String owner = partnerUUID; switch (command) { case VRMainContentExporter.VRCEShared.CONST_COMMAND_GETBUFFER: //TODO : NOT TESTED outputpack.AddField("CMD", BabylonMS.BabylonMS.CONST_FT_INT8).Value(command); //bool first = true; BabylonMS.BMSField f1 = null; BabylonMS.BMSField f2 = null; BabylonMS.BMSField f3 = null; BabylonMS.BMSField f4 = null; BabylonMS.BMSField f5 = null; int cnt = mediaserver.SIBuffer.Count(); byte idx = 0; for ( ; idx < cnt; idx++) { buf = mediaserver.SIBuffer[idx]; if (idx == 0) { f1 = outputpack.AddField("IDX", BabylonMS.BabylonMS.CONST_FT_INT8); f2 = outputpack.AddField("HWND", BabylonMS.BabylonMS.CONST_FT_INT64); f3 = outputpack.AddField("GROUP", BabylonMS.BabylonMS.CONST_FT_UUID); //UUID length string array f4 = outputpack.AddField("DATE", BabylonMS.BabylonMS.CONST_FT_INT64); f5 = outputpack.AddField("USAGE", BabylonMS.BabylonMS.CONST_FT_INT32); } f1.Value(idx); f2.Value(buf.hwnd); f3.ValueAsUUID(buf.owner); //mivel owner = UUID f4.Value(buf.created.Ticks); f5.Value(buf.usage); } if (idx > 0) { bms.TransferPacket(session.writer, outputpack, true); } break; case VRMainContentExporter.VRCEShared.CONST_COMMAND_EXIST: //TODO : NOT TESTED hwnd = session.inputPack.GetFieldByName("HWND").getValue(0); group = session.inputPack.GetFieldByName("GROUP").GetUUIDValue(0); key = System.Text.Encoding.ASCII.GetString(session.inputPack.GetField(2).getValue()); outputpack.AddField("CMD", BabylonMS.BabylonMS.CONST_FT_INT8).Value(command); outputpack.AddField("HWND", BabylonMS.BabylonMS.CONST_FT_INT64).Value(hwnd); outputpack.AddField("GROUP", BabylonMS.BabylonMS.CONST_FT_UUID).ValueAsUUID(group); sema1.WaitOne(); outputpack.AddField("EXISTS", BabylonMS.BabylonMS.CONST_FT_INT8).Value(mediaserver.Exists(group, key, hwnd)); sema1.Release(); bms.TransferPacket(session.writer, outputpack, true); break; case VRMainContentExporter.VRCEShared.CONST_COMMAND_STORE: hwnd = session.inputPack.GetFieldByName("HWND").getValue(0); group = session.inputPack.GetFieldByName("GROUP").GetUUIDValue(0); byte[] image = session.inputPack.GetFieldByName("IMAGE").getValue(); sema1.WaitOne(); byte[] res = mediaserver.indexOfBufferAndStore(group, MediaServer.md5(image), image, hwnd); bool refresh = clientFollower.IsNeedRefresh(ID, res[0], res[1]); sema1.Release(); outputpack.AddField("CMD", BabylonMS.BabylonMS.CONST_FT_INT8).Value(command); outputpack.AddField("HWND", BabylonMS.BabylonMS.CONST_FT_INT64).Value(hwnd); outputpack.AddField("GROUP", BabylonMS.BabylonMS.CONST_FT_UUID).ValueAsUUID(group); outputpack.AddField("MODE", BabylonMS.BabylonMS.CONST_FT_INT8).Value(res[0]); outputpack.AddField("IDX", BabylonMS.BabylonMS.CONST_FT_INT8).Value(res[1]); outputpack.AddField("REFRESH", BabylonMS.BabylonMS.CONST_FT_INT8).Value(refresh); if ((refresh) && (res[0] != VRMainContentExporter.VRCEShared.CONST_MODE_BFFOUND)) { MediaBuffer buf2 = mediaserver.Retrieve(res[1]); if (buf2 != null) { outputpack.AddField("IMAGE", BabylonMS.BabylonMS.CONST_FT_BYTE).Value(buf2.buffer); } } bms.TransferPacket(session.writer, outputpack, true); //Console.WriteLine(); break; case VRMainContentExporter.VRCEShared.CONST_COMMAND_RETRIEVE: outputpack.AddField("CMD", BabylonMS.BabylonMS.CONST_FT_INT8).Value(command); Int64 androidReqID = session.inputPack.GetFieldByName("REQID").getValue(0); outputpack.AddField("REQID", BabylonMS.BabylonMS.CONST_FT_INT64).Value(androidReqID); if (session.inputPack.FieldsCount() > 2) { //TODO mert nem ellenőriztem ;s mert lehet hogy a UUID+HWND parost kellene lek;rdezni!!!! for (int i = 2; i < session.inputPack.FieldsCount(); i += 2) //CMD in first position { hwnd = session.inputPack.GetField(i).getValue(0); group = session.inputPack.GetField(i + 1).GetUUIDValue(0); sema1.WaitOne(); buf = mediaserver.Retrieve(group, hwnd); outputpack.AddField("IDX", BabylonMS.BabylonMS.CONST_FT_INT8).Value((byte)buf.position_in_buffer); outputpack.AddField("HWND", BabylonMS.BabylonMS.CONST_FT_INT64).Value(hwnd); outputpack.AddField("GROUP", BabylonMS.BabylonMS.CONST_FT_UUID).ValueAsUUID(group); outputpack.AddField("IMAGE", BabylonMS.BabylonMS.CONST_FT_BYTE).Value(buf.buffer); sema1.Release(); } } else { //All uptodate element from buffer because no specified sent HWND List <string> owners = mediaserver.GetOwners(); foreach (var o in owners) { List <Int64> hwnds = mediaserver.GetOwnerHwnds(o); foreach (var h in hwnds) { sema1.WaitOne(); buf = mediaserver.Retrieve(o, h); if (buf != null) { outputpack.AddField("IDX", BabylonMS.BabylonMS.CONST_FT_INT8).Value((byte)buf.position_in_buffer); BabylonMS.BMSField fi = outputpack.AddField("HWND", BabylonMS.BabylonMS.CONST_FT_INT64); fi.Value(h); outputpack.AddField("GROUP", BabylonMS.BabylonMS.CONST_FT_UUID).ValueAsUUID(o); outputpack.AddField("IMAGE", BabylonMS.BabylonMS.CONST_FT_BYTE).Value(buf.buffer); } sema1.Release(); } } } bms.TransferPacket(session.writer, outputpack, true); break; } } catch (Exception) { }; }
//int cnt = 0; private void MouseDownExt(object sender, MouseEventExtArgs e) { BabylonMS.BMSPack outputpack = InitPack(); if (e.Button == MouseButtons.XButton2) { buttonState = "down"; AddToPack(outputpack, e); buttonState = "up"; AddToPack(outputpack, e); buttonState = ""; e.Handled = true; }//mousedown elintézi else { if (e.Button == MouseButtons.XButton1) //switch virtual mode on and off { MouseEventArgs e2; if (!VirtualMouse) { VirtualMouse = true; startVirtualMousePosition(e.X, e.Y); e2 = new MouseEventArgs(e.Button, e.Clicks, VirtualMouseX, VirtualMouseY, e.Delta); } else { VirtualMouse = false; restoreVirtualMousePosition(); e2 = new MouseEventArgs(e.Button, e.Clicks, e.X, e.Y, e.Delta); } AddToPack(outputpack, e2); buttonState = "up"; AddToPack(outputpack, e2); buttonState = ""; e.Handled = true; } else { mousebutton = e.Button; buttonState = "down"; AddToPack(outputpack, e); if (VirtualMouse) { buttonState = "up"; lastButtonForVirtualUP = e.Button; } } } if (VirtualMouse) { e.Handled = true; } if (bms != null) { session.outputPack = outputpack; Task t2 = Task.Factory.StartNew(() => { session.TransferPacket(true); }); //sessiontranferpacket(outputpack); //bms.TransferPacket(session.writer, outputpack, true); } }