Beispiel #1
0
        void Process(SendObject obj)
        {
            //Console.WriteLine("Receive: " + obj.type);
            switch (obj.type)
            {
            case SendObject.INIT: frmMain.EventInit((InitData)obj.data); break;

            case SendObject.SELECT_REMOTE: frmMain.EventSelectRemote((SelectData)obj.data); break;

            case SendObject.TRANSLATE_REMOTE: frmMain.EventTranslateRemote((TranslateData)obj.data); break;

            case SendObject.ROTATE_REMOTE: frmMain.EventRotateRemote(); break;

            case SendObject.APPEND_MAIN: frmMain.EventAppendMain(); break;

            case SendObject.SELECT_MAIN: frmMain.EventSelectMain((SelectData)obj.data); break;

            case SendObject.TRANSLATE_MAIN: frmMain.EventTranslateMain((TranslateData)obj.data); break;

            case SendObject.ROTATE_MAIN: frmMain.EventRotateMain(); break;

            case SendObject.WIN: frmMain.EventWin(); break;

            case SendObject.LOCK_REMOTE: frmMain.EventLockRemote((SelectData)obj.data); break;

            case SendObject.UNLOCK_REMOTE: frmMain.EventUnlockRemote(); break;

            case SendObject.LOCK_MAIN: frmMain.EventLockMain((SelectData)obj.data); break;

            case SendObject.UNLOCK_MAIN: frmMain.EventUnlockMain((TranslateData)obj.data); break;
            }
        }
Beispiel #2
0
        private void timer_Tick(object sender, EventArgs e)
        {
            if (isDragging)
            {
                var data = new TranslateData(selectedPiece.mainPiece.rect.Left,
                                             selectedPiece.mainPiece.rect.Top, selectedPiece.x, selectedPiece.y);
                Send(new SendObject(SendObject.TRANSLATE_MAIN, data));
            }
            else
            if (frmRemote.isDragging)
            {
                var data = new TranslateData(frmRemote.selectedPiece.remotePiece.rect.Left,
                                             frmRemote.selectedPiece.remotePiece.rect.Top);
                Send(new SendObject(SendObject.TRANSLATE_REMOTE, data));
            }

            if (sendObjects.Count > 0)
            {
                SendObject obj = sendObjects.Dequeue();
                if (isServer)
                {
                    server.Send(obj);
                }
                else
                {
                    client.Send(obj);
                }
            }
        }
Beispiel #3
0
        // hàm xử lý các sự kiện nhận được, swich case luôn cho đơn giản
        void Process(SendObject obj)
        {
            // ngoài switch case có thể tối ưu hóa bằng delegate (một mảng các hàm)
            // delegate [] func, func[0] = frmMain.EventInit, func[1] = frmMain.EventSelectRemote ...
            //Console.WriteLine("Receive: " + obj.type);
            switch (obj.type)
            {
            case SendObject.INIT: frmMain.EventInit((InitData)obj.data); break;

            case SendObject.SELECT_REMOTE: frmMain.EventSelectRemote((SelectData)obj.data); break;

            case SendObject.TRANSLATE_REMOTE: frmMain.EventTranslateRemote((TranslateData)obj.data); break;

            case SendObject.ROTATE_REMOTE: frmMain.EventRotateRemote(); break;

            case SendObject.APPEND_MAIN: frmMain.EventAppendMain(); break;

            case SendObject.SELECT_MAIN: frmMain.EventSelectMain((SelectData)obj.data); break;

            case SendObject.TRANSLATE_MAIN: frmMain.EventTranslateMain((TranslateData)obj.data); break;

            case SendObject.ROTATE_MAIN: frmMain.EventRotateMain(); break;

            case SendObject.WIN: frmMain.EventWin(); break;

            case SendObject.LOCK_REMOTE: frmMain.EventLockRemote((SelectData)obj.data); break;

            case SendObject.UNLOCK_REMOTE: frmMain.EventUnlockRemote(); break;

            case SendObject.LOCK_MAIN: frmMain.EventLockMain((SelectData)obj.data); break;

            case SendObject.UNLOCK_MAIN: frmMain.EventUnlockMain((TranslateData)obj.data); break;
            }
        }
Beispiel #4
0
        byte[] Serialize(SendObject obj)
        {
            MemoryStream    stream    = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();

            formatter.Serialize(stream, obj);
            return(stream.ToArray());
        }
Beispiel #5
0
 // gửi dữ liệu, chỉ cần gửi cho một thằng, chính là server, ở đây client
 // chính là thằng server đã kết nối đến
 public void Send(SendObject obj)
 {
     //Console.WriteLine("Send: " + obj.type);
     try
     {
         if (client != null)
         {
             client.Send(Serialize(obj));
         }
     }
     catch { }
 }
Beispiel #6
0
 // hàm gửi sự kiện
 public void Send(SendObject obj)
 {
     //Console.WriteLine("Send: " + obj.type);
     // khi gửi thì phải gửi cho tất cả các client
     try
     {
         foreach (Socket item in clientList)
         {
             if (item != null)
             {
                 // mã hóa xong mới được gửi
                 item.Send(Serialize(obj));
             }
         }
     }
     catch { }
 }
Beispiel #7
0
        // hàm lắng nghe nhận dữ liệu, giống với bên server, cũng nhận, giải mã, xử lý, lỗi thì đóng kết nối
        void Receive()
        {
            try
            {
                while (isActive)
                {
                    byte[] data = new byte[Size];
                    Size = SIZE;
                    client.Receive(data);

                    SendObject o = Deserialize(data);
                    Process(o);
                }
            }
            catch
            {
                MessageBox.Show("Mất kết nối đến máy chủ");
                Close();
            }
        }
Beispiel #8
0
        // hàm nhận sự kiện
        void Receive(Object obj)
        {
            Socket client = obj as Socket;

            try
            {
                while (isActive)
                {
                    // khởi tạo mảng data, đồng thời hàm Receive là lắng nghe client đó bắn dữ liệu
                    // nếu client đó bắn dữ liệu, server nhận được thì sẽ đưa dữ liệu đó vào mảng data, chương trình
                    // sẽ chạy tiếp xuống lệnh bên dưới, chạy xong lại quay lại một vòng lặp, lắng nghe tiếp
                    byte[] data = new byte[SIZE];
                    client.Receive(data);

                    // giải mã mảng data vừa nhận để đưa nó về SendObject
                    SendObject o = Deserialize(data);

                    // và xử lý nó
                    Process(o);

                    foreach (Socket item in clientList)
                    {
                        if (item != null && item != client)
                        {
                            // đồng thời server phải gửi dữ liệu cho tất cả các client mà ko phải thằng client đã gửi
                            // để tất cả các máy đồng bộ
                            item.Send(Serialize(o));
                        }
                    }
                }
            }
            catch
            {
                // client lỗi thì xóa nó luôn
                clientList.Remove(client);
                client.Close();
            }
        }
Beispiel #9
0
        /* Mạng LAN */

        // mỗi form có thể là server hoặc client, chức năng của mình là gì thì làm việc đấy
        public void Send(SendObject obj)
        {
            sendObjects.Enqueue(obj);
        }