Exemplo n.º 1
0
        internal void PublishClipboard(string clipboardId)
        {
            if (requestedChanges.ContainsKey(clipboardId))
            {
                throw new PreviousChangeUnfinishedException("You cannot perform concurrent clipboard publishing");
            }
            ClipboardData clipboardData = new ClipboardData();

            clipboardData.Sender = Environment.MachineName;
            clipboardData.Id     = clipboardId;

            if (Clipboard.ContainsText())
            {
                string text = Clipboard.GetText();

                clipboardData.Data = text;
                clipboardData.Type = ClipboardDataType.TEXT;
            }
            else if (Clipboard.ContainsImage())
            {
                Bitmap image = (Bitmap)Clipboard.GetImage();

                clipboardData.Data = ImageUtils.ImageToBase64(image);
                clipboardData.Type = ClipboardDataType.IMAGE;
            }
            else if (Clipboard.ContainsFileDropList())
            {
                StringCollection     filePaths = Clipboard.GetFileDropList();
                List <ClipboardFile> files     = FileUtils.GetFilesFromPaths(filePaths);

                clipboardData.Data = JsonConvert.SerializeObject(files);
                clipboardData.Type = ClipboardDataType.FILES;
            }
            else
            {
                throw new UnknownClipboardTypeException("Handled types are: text, image, file");
            }

            requestedChanges[clipboardData.Id] = clipboardData;
            socket.Emit(Events.BEGIN_CHANGE, clipboardData.Id);

            //System.Threading.Timer updateTimer = new System.Threading.Timer((object state) =>
            //{

            //}, null, TimeSpan.FromMilliseconds(10000), TimeSpan.FromMilliseconds(-1));
        }
Exemplo n.º 2
0
        internal void CopySharedToLocal(int id)
        {
            string        Id            = id.ToString();
            ClipboardData clipboardData = sharedClipboard[Id];

            if (clipboardData != null)
            {
                switch (clipboardData.Type)
                {
                case ClipboardDataType.TEXT:
                    Clipboard.SetText(clipboardData.Data);
                    break;

                case ClipboardDataType.IMAGE:
                    Clipboard.SetImage(ImageUtils.Base64ToImage(clipboardData.Data));
                    break;

                case ClipboardDataType.FILES:
                    StringCollection     filePaths = new StringCollection();
                    List <ClipboardFile> files     = JsonConvert.DeserializeObject <List <ClipboardFile> >(clipboardData.Data);
                    foreach (ClipboardFile clipboardFile in files)
                    {
                        string path = FileUtils.CreateTemporaryFile(clipboardFile.Name, clipboardFile.Data);
                        if (path != null)
                        {
                            filePaths.Add(path);
                        }
                    }
                    Clipboard.SetFileDropList(filePaths);
                    break;

                default:
                    Console.WriteLine("Unknown clipboard data type");
                    break;
                }
            }
        }
Exemplo n.º 3
0
        private void InitializeServerConnection()
        {
            //socket = IO.Socket("http://127.0.0.1:3000");
            socket = IO.Socket("http://shared-clipboard.herokuapp.com");
            Console.WriteLine("Connecting to server...");

            socket.On(Socket.EVENT_CONNECT, () =>
            {
                Console.WriteLine("Connected to server.");
            });

            socket.On(Socket.EVENT_CONNECT_ERROR, () =>
            {
                Console.WriteLine("Connect error.");
            });

            socket.On(Socket.EVENT_CONNECT_TIMEOUT, () =>
            {
                Console.WriteLine("Connect timeout.");
            });

            socket.On(Socket.EVENT_DISCONNECT, () =>
            {
                Console.WriteLine("Disconnect.");
            });

            socket.On(Socket.EVENT_RECONNECTING, () =>
            {
                Console.WriteLine("Reconnecting.");
            });

            socket.On(Events.CLIPBOARD_CHANGE, (data) =>
            {
                ClipboardData clipboardData = JsonConvert.DeserializeObject <ClipboardData>(data.ToString());
                if (clipboardData != null)
                {
                    sharedClipboard[clipboardData.Id] = clipboardData;
                    if (SharedClipboardChanged != null)
                    {
                        SharedClipboardChanged(this, clipboardData);
                    }
                }
            });

            socket.On(Events.CHANGE_ACCEPT, (clipboardId) =>
            {
                Console.WriteLine("CHANGE_ACCEPT " + clipboardId);
                ClipboardData clipboardData = requestedChanges[clipboardId.ToString()];
                socket.Emit(Events.CLIPBOARD_CHANGE, JsonConvert.SerializeObject(clipboardData));
            });

            socket.On(Events.CHANGE_RECEIVED, (clipboardId) =>
            {
                Console.WriteLine("CHANGE_RECEIVED " + clipboardId);
                requestedChanges.Remove(clipboardId.ToString());
            });

            socket.On(Events.CHANGE_ERROR, (error) =>
            {
                ClipboardError clipboardError = JsonConvert.DeserializeObject <ClipboardError>(error.ToString());
                Console.WriteLine("CHANGE_ERROR " + clipboardError.Id + ": " + clipboardError.Reason);
                requestedChanges.Remove(clipboardError.Id);
                if (ClipboardError != null)
                {
                    ClipboardError(this, clipboardError);
                }
            });
        }