Beispiel #1
0
        private void ProcTaskListTime(HEADER obj)
        {
            mCount = 0;
            ICD.WorkList msg = (ICD.WorkList)obj;

            HEADER msgHis = new HEADER();

            msgHis.FillClientHeader(DEF.CMD_TaskHistory);

            foreach (Work item in msg.works)
            {
                if (mTracks.ContainsKey(item.recordID))
                {
                    continue;
                }

                TrackingInfo info = new TrackingInfo();
                info.workBase          = item;
                info.his               = null;
                mTracks[item.recordID] = info;
                mCount++;

                msgHis.ext1 = item.recordID.ToString();
                ICDPacketMgr.GetInst().sendMsgToServer(msgHis);
            }
        }
Beispiel #2
0
        private void ICD_Login(int clientID, HEADER obj)
        {
            User    msg  = obj as User;
            DataRow row  = DatabaseMgr.GetUserInfo(msg.userID);
            User    pack = new User();

            pack.FillServerHeader(DEF.CMD_Login);
            if (row != null)
            {
                if (row["password"].ToString() == msg.userPW)
                {
                    AddUser(clientID, msg.userID);
                    pack.userID = row["recordID"].ToString();
                    pack.userPW = row["password"].ToString();
                }
                else
                {
                    pack.msgErr = DEF.ERR_WorngPW;
                }
            }
            else
            {
                pack.msgErr = DEF.ERR_NoID;
            }

            ICDPacketMgr.GetInst().sendMsgToClient(clientID, pack);
        }
Beispiel #3
0
        private void MyTasks_Load(object sender, EventArgs e)
        {
            ICDPacketMgr.GetInst().OnRecv += OnRecv_ICDMessages;
            FormClosed += delegate {
                ICDPacketMgr.GetInst().OnRecv -= OnRecv_ICDMessages;
                Dispose();
                //Relese All
                //Close databases
                //Close Network Socket
                Process.GetCurrentProcess().Kill();
            };


            InitListView();

            ICD.HEADER msg = new ICD.HEADER();
            msg.FillClientHeader(ICD.DEF.CMD_TaskIDList);
            ICDPacketMgr.GetInst().sendMsgToServer(msg);

            /*
             * ICD.HEADER chatMsg = new ICD.HEADER();
             * chatMsg.FillClientHeader(ICD.DEF.CMD_ChatRoomList);
             * ICDPacketMgr.GetInst().sendMsgToServer(chatMsg);
             */
        }
Beispiel #4
0
        private void TaskWindow_Load(object sender, EventArgs e)
        {
            InitListViews();
            updateTaskInfo();

            if (mTask.director == MyInfo.mMyInfo.userID && mTask.director != mTask.worker)
            {
                btnReport.Text    = "확인";
                btnReport.Enabled = (mTask.state == "완료대기") ? true : false;
            }

            ICDPacketMgr.GetInst().OnRecv += OnRecvEditTask;
            FormClosed += delegate {
                ICDPacketMgr.GetInst().OnRecv -= OnRecvEditTask;

                ChatRoomInfo msgOut = new ChatRoomInfo();
                msgOut.FillClientHeader(DEF.CMD_HideChat, 0);
                msgOut.body.recordID = mTask.chatID;
                ICDPacketMgr.GetInst().sendMsgToServer(msgOut);
            };

            ChatRoomInfo msgAll = new ChatRoomInfo();

            msgAll.FillClientHeader(DEF.CMD_ChatMsgAll, 0);
            msgAll.body.recordID = mTask.chatID;
            ICDPacketMgr.GetInst().sendMsgToServer(msgAll);

            ChatRoomInfo msgIn = new ChatRoomInfo();

            msgIn.FillClientHeader(DEF.CMD_ShowChat, 0);
            msgIn.body.recordID = mTask.chatID;
            ICDPacketMgr.GetInst().sendMsgToServer(msgIn);
        }
Beispiel #5
0
        private void DlgChatRoom_Load(object sender, EventArgs e)
        {
            InitListViews();

            ICDPacketMgr.GetInst().OnRecv += OnProcChatRoom;
            FormClosed += delegate {
                ICDPacketMgr.GetInst().OnRecv -= OnProcChatRoom;

                ChatRoomInfo msgOut = new ChatRoomInfo();
                msgOut.FillClientHeader(DEF.CMD_HideChat, 0);
                msgOut.body.recordID = mRoomID;
                ICDPacketMgr.GetInst().sendMsgToServer(msgOut);
            };

            ChatRoomInfo msgAll = new ChatRoomInfo();

            msgAll.FillClientHeader(DEF.CMD_ChatMsgAll, 0);
            msgAll.body.recordID = mRoomID;
            ICDPacketMgr.GetInst().sendMsgToServer(msgAll);

            ChatRoomInfo msgIn = new ChatRoomInfo();

            msgIn.FillClientHeader(DEF.CMD_ShowChat, 0);
            msgIn.body.recordID = mRoomID;
            ICDPacketMgr.GetInst().sendMsgToServer(msgIn);
        }
Beispiel #6
0
        private void OnRecv_Login(ICD.HEADER obj)
        {
            switch (obj.msgErr)
            {
            case ICD.DEF.ERR_NoError:
            {
                MessageBox.Show(MSG_SUCCESS_LOGIN);
                MyInfo.mMyInfo = obj as ICD.User;

                ICDPacketMgr.GetInst().OnRecv -= OnRecv_ICDMessages;
                Visible = false;

                MyTasks task = new MyTasks();
                task.Show();
                task.FormClosed += delegate {
                    Visible = true;
                    ICDPacketMgr.GetInst().OnRecv += OnRecv_ICDMessages;
                };
            }
            break;

            case ICD.DEF.ERR_NoID:
                MessageBox.Show(MSG_UNREGIST_ID);
                break;

            case ICD.DEF.ERR_WorngPW:
                MessageBox.Show(MSG_WRONG_PW);
                break;

            default:
                break;
            }
        }
Beispiel #7
0
 private void button1_Click(object sender, EventArgs e)
 {
     if (cbNewUser.Checked)
     {
         //회원가입 요청
         if (edPassword.Text == edPasswordCheck.Text)
         {
             ICD.User obj = new ICD.User();
             obj.FillClientHeader(ICD.DEF.CMD_NewUser);
             obj.userID = edUserID.Text;
             obj.userPW = edPassword.Text;
             ICDPacketMgr.GetInst().sendMsgToServer(obj);
         }
         else
         {
             MessageBox.Show(MSG_DIFF_PW);
         }
     }
     else
     {
         //로그인 요청
         ICD.User obj = new ICD.User();
         obj.FillClientHeader(ICD.DEF.CMD_Login);
         obj.userID = edUserID.Text;
         obj.userPW = edPassword.Text;
         ICDPacketMgr.GetInst().sendMsgToServer(obj);
     }
 }
Beispiel #8
0
        private void btnReport_Click(object sender, EventArgs e)
        {
            bool          typeReport = (mTask.state == "완료대기") ? false : true;
            DlgReportTask dlg        = new DlgReportTask(typeReport);

            dlg.ShowDialog();

            if (dlg.mIsOK)
            {
                WorkHistoryList msg = new WorkHistoryList();
                msg.FillClientHeader(DEF.CMD_TaskEdit, 0);
                msg.workHistory[0].editor = MyInfo.mMyInfo.userID;
                msg.workHistory[0].taskID = mTask.recordID;
                if (typeReport)
                {
                    msg.workHistory[0].columnName = (dlg.Type == "중간보고") ? "reportMid" : "reportDone";
                    msg.workHistory[0].toInfo     = dlg.Time + "," + dlg.Msg;
                }
                else
                {
                    msg.workHistory[0].columnName = (dlg.Type == "승인") ? "confirmOK" : "confirmNO";
                    msg.workHistory[0].toInfo     = dlg.Time + "," + dlg.Msg;
                }

                string info = string.Format("[{0}] : {1}", msg.workHistory[0].columnName, msg.workHistory[0].toInfo);
                SendChatMessage(info, true);
                ICDPacketMgr.GetInst().sendMsgToServer(msg);
            }
        }
Beispiel #9
0
        private void ICD_Logout(int clientID, HEADER obj)
        {
            DelUser(obj.msgUser);
            HEADER pack = new HEADER();

            pack.FillServerHeader(DEF.CMD_Logout);
            ICDPacketMgr.GetInst().sendMsgToClient(clientID, pack);
        }
Beispiel #10
0
        public void ConnectServer()
        {
            ICDPacketMgr.GetInst().OnRecv += OnRecv_ICDMessages;

            //ICDPacketMgr.GetInst().StartServiceServer();

            ICDPacketMgr.GetInst().StartServiceClient(IPADDR, PORTNUM);
        }
Beispiel #11
0
        public void sendMsg(string user, HEADER obj)
        {
            if (user == null || !mUserMap.ContainsKey(user))
            {
                return;
            }

            ICDPacketMgr.GetInst().sendMsgToClient(mUserMap[user], obj);
        }
Beispiel #12
0
 private void lvUserlist_DoubleClick(object sender, EventArgs e)
 {
     if (lvUserlist.SelectedItems.Count == 1)
     {
         mSelectedUser = lvUserlist.SelectedItems[0].Text;
         ICDPacketMgr.GetInst().OnRecv -= OnRecvUserList;
         Close();
     }
 }
Beispiel #13
0
        private void btnExit_Click(object sender, EventArgs e)
        {
            ChatRoomInfo msg = new ChatRoomInfo();

            msg.FillClientHeader(DEF.CMD_DelChatUsers, 0);
            msg.body.recordID = mRoomID;
            msg.body.users    = new string[1];
            msg.body.users[0] = MyInfo.mMyInfo.userID;
            ICDPacketMgr.GetInst().sendMsgToServer(msg);
            Close();
        }
Beispiel #14
0
        private void RequestTaskList(DateTime from, DateTime to)
        {
            HEADER msg = new HEADER();

            msg.FillClientHeader(DEF.CMD_TaskBaseList);

            msg.ext1 = from.ToString("yyyy-MM-dd HH:mm:ss");
            msg.ext2 = to.ToString("yyyy-MM-dd HH:mm:ss");

            ICDPacketMgr.GetInst().sendMsgToServer(msg);
        }
Beispiel #15
0
        private void btnNewTask_Click(object sender, EventArgs e)
        {
            if (cbType.Text == "채팅")
            {
                ICD.ChatRoomInfo msgNewChat = new ICD.ChatRoomInfo();
                msgNewChat.FillClientHeader(ICD.DEF.CMD_NewChat, 0);
                msgNewChat.body.access = cbAccess.Text;
                if (btnDirector.Text == btnWorker.Text)
                {
                    msgNewChat.body.users    = new string[1];
                    msgNewChat.body.users[0] = btnDirector.Text;
                }
                else
                {
                    msgNewChat.body.users    = new string[2];
                    msgNewChat.body.users[0] = btnDirector.Text;
                    msgNewChat.body.users[1] = btnWorker.Text;
                }
                ICDPacketMgr.GetInst().sendMsgToServer(msgNewChat);
            }
            else
            {
                ICD.WorkList msg = new ICD.WorkList();
                msg.FillClientHeader(ICD.DEF.CMD_TaskNew, 0);
                ICD.Work msgTask = msg.works[0];

                //comboBox listing
                msgTask.type     = cbType.Text;
                msgTask.access   = cbAccess.Text;
                msgTask.mainCate = cbMainCate.Text;
                msgTask.subCate  = cbSubCate.Text;
                //formatting date
                msgTask.launch   = dtLaunch.Value.ToString("yyyy-MM-dd HH:mm:ss");
                msgTask.due      = dtDue.Value.ToString("yyyy-MM-dd HH:mm:ss");
                msgTask.term     = dtTerm.Value.ToString("yyyy-MM-dd HH:mm:ss");
                msgTask.priority = cbPriority.Text;
                //user listing
                msgTask.creator  = MyInfo.mMyInfo.userID;
                msgTask.director = btnDirector.Text;
                msgTask.worker   = btnWorker.Text;
                msgTask.title    = tbTitle.Text;
                msgTask.comment  = tbComment.Text;
                msgTask.state    = "예정";

                msgTask.timeFirst = msg.msgTime;
                msgTask.timeDone  = DateTime.MaxValue.ToString("yyyy-MM-dd HH:mm:ss");

                ICDPacketMgr.GetInst().sendMsgToServer(msg);
            }
            Close();
        }
Beispiel #16
0
        private void SendChatMessage(string message, bool isSystem = false)
        {
            ChatRoomInfo msg = new ChatRoomInfo();

            msg.FillClientHeader(DEF.CMD_ChatMsg, 0);
            if (isSystem)
            {
                msg.msgUser = "******";
            }
            msg.body.recordID         = mTask.chatID;
            msg.body.mesgs            = new MesgInfo[1];
            msg.body.mesgs[0]         = new MesgInfo();
            msg.body.mesgs[0].message = message;
            ICDPacketMgr.GetInst().sendMsgToServer(msg);
        }
Beispiel #17
0
        private void btnExit_Click(object sender, EventArgs e)
        {
            string me = MyInfo.mMyInfo.userID;

            if (mTask.director != me && mTask.worker != me)
            {
                ChatRoomInfo msg = new ChatRoomInfo();
                msg.FillClientHeader(DEF.CMD_DelChatUsers, 0);
                msg.body.recordID = mTask.chatID;
                msg.body.users    = new string[1];
                msg.body.users[0] = me;
                ICDPacketMgr.GetInst().sendMsgToServer(msg);
            }
            Close();
        }
Beispiel #18
0
        private void btnUser_Click(object sender, EventArgs e)
        {
            DlgEditChatUsers dlg = new DlgEditChatUsers(mRoomID);

            dlg.ShowDialog();

            string[] pre   = dlg.mChatUserList;
            string[] after = dlg.mChatNewList;

            if (pre == null || after == null)
            {
                LOG.warn();
                return;
            }


            {
                ChatRoomInfo msg = new ChatRoomInfo();
                msg.FillClientHeader(DEF.CMD_DelChatUsers, 0);
                msg.body.recordID = mRoomID;
                List <string> oldUsers = new List <string>();
                foreach (string item in pre)
                {
                    if (!after.Contains(item))
                    {
                        oldUsers.Add(item);
                    }
                }
                msg.body.users = oldUsers.ToArray();
                ICDPacketMgr.GetInst().sendMsgToServer(msg);
            }

            {
                ChatRoomInfo msg = new ChatRoomInfo();
                msg.FillClientHeader(DEF.CMD_AddChatUsers, 0);
                msg.body.recordID = mRoomID;
                List <string> newUsers = new List <string>();
                foreach (string item in after)
                {
                    if (!pre.Contains(item))
                    {
                        newUsers.Add(item);
                    }
                }
                msg.body.users = newUsers.ToArray();
                ICDPacketMgr.GetInst().sendMsgToServer(msg);
            }
        }
Beispiel #19
0
        private void DlgEditChatUsers_Load(object sender, EventArgs e)
        {
            InitListViews();

            InitUserAll();

            ICDPacketMgr.GetInst().OnRecv += OnProcUserList;
            FormClosed += delegate {
                ICDPacketMgr.GetInst().OnRecv -= OnProcUserList;
            };

            ChatRoomInfo msg = new ChatRoomInfo();

            msg.FillClientHeader(DEF.CMD_ChatRoomInfo, 0);
            msg.body.recordID = mRoomID;
            ICDPacketMgr.GetInst().sendMsgToServer(msg);
        }
Beispiel #20
0
        private void DlgTaskTracking_Load(object sender, EventArgs e)
        {
            mCurrentTime = DateTime.Now;

            InitListViews();

            ICDPacketMgr.GetInst().OnRecv += OnProcTaskHistroy;
            FormClosed += delegate {
                ICDPacketMgr.GetInst().OnRecv -= OnProcTaskHistroy;
            };

            TimeSpan span = new TimeSpan(VIEW_PERIOD, 0, 0, 0);
            DateTime from = mCurrentTime - span;
            DateTime to   = mCurrentTime + span;

            RequestTaskList(from, to);
        }
Beispiel #21
0
        private void btnSend_Click(object sender, EventArgs e)
        {
            if (tbMsg.Text.Length == 0)
            {
                return;
            }

            ChatRoomInfo msg = new ChatRoomInfo();

            msg.FillClientHeader(DEF.CMD_ChatMsg, 0);
            msg.body.recordID         = mRoomID;
            msg.body.mesgs            = new MesgInfo[1];
            msg.body.mesgs[0]         = new MesgInfo();
            msg.body.mesgs[0].message = tbMsg.Text;

            ICDPacketMgr.GetInst().sendMsgToServer(msg);
            tbMsg.Text = "";
        }
Beispiel #22
0
        public void StartService()
        {
            if (mFuncArray != null)
            {
                return;
            }

            mFuncArray = new ICDPacketMgr.PacketHandler[DEF.CMD_MAX_COUNT];
            mFuncArray[DEF.CMD_NewUser]    = ICD_NewUser;
            mFuncArray[DEF.CMD_UserList]   = ICD_UserList;
            mFuncArray[DEF.CMD_Login]      = ICD_Login;
            mFuncArray[DEF.CMD_Logout]     = ICD_Logout;
            mFuncArray[DEF.CMD_TaskNew]    = ICD_NewTask;
            mFuncArray[DEF.CMD_TaskEdit]   = ICD_EditTask;
            mFuncArray[DEF.CMD_TaskIDList] = ICD_TaskList;

            mFuncArray[DEF.CMD_NewChat]      = ICD_NewChat;
            mFuncArray[DEF.CMD_ChatMsg]      = ICD_ProcChat;
            mFuncArray[DEF.CMD_AddChatUsers] = ICD_ProcChat;
            mFuncArray[DEF.CMD_DelChatUsers] = ICD_ProcChat;
            mFuncArray[DEF.CMD_ShowChat]     = ICD_ProcChat;
            mFuncArray[DEF.CMD_HideChat]     = ICD_ProcChat;
            mFuncArray[DEF.CMD_ChatMsgAll]   = ICD_ProcChat;
            mFuncArray[DEF.CMD_ChatRoomInfo] = ICD_ProcChat;
            mFuncArray[DEF.CMD_ChatRoomList] = ICD_ChatRoomList;

            mFuncArray[DEF.CMD_TaskBaseList] = ICD_ProcWorkList;
            mFuncArray[DEF.CMD_TaskHistory]  = ICD_ProcWorkHistory;

            InitChatRooms();

            ICDPacketMgr.GetInst().StartServiceServer();

            ICDPacketMgr.GetInst().OnRecv += (id, obj) =>
            {
                mFuncArray[obj.msgID]?.Invoke(id, obj);
            };

            ICDPacketMgr.GetInst().OnDisConnected += (id, obj) =>
            {
                DelUser(id);
            };
        }
Beispiel #23
0
        private void ICD_NewUser(int clientID, HEADER obj)
        {
            User msg = obj as User;

            if (DatabaseMgr.GetUserInfo(msg.userID) != null)
            {
                HEADER pack = new HEADER();
                pack.FillServerHeader(DEF.CMD_NewUser);
                pack.msgErr = DEF.ERR_HaveID;
                ICDPacketMgr.GetInst().sendMsgToClient(clientID, pack);
            }
            else
            {
                DatabaseMgr.NewUser(msg);

                HEADER pack = new HEADER();
                pack.FillServerHeader(DEF.CMD_NewUser);
                ICDPacketMgr.GetInst().sendMsgToClient(clientID, pack);
            }
        }
Beispiel #24
0
        private void ICD_UserList(int clientID, HEADER obj)
        {
            DataTable table = DatabaseMgr.GetUsers();

            if (table == null)
            {
                return;
            }

            Message pack = new Message();

            pack.FillServerHeader(DEF.CMD_UserList);
            foreach (DataRow user in table.Rows)
            {
                pack.message += user["recordID"].ToString();
                pack.message += ",";
            }

            ICDPacketMgr.GetInst().sendMsgToClient(clientID, pack);
        }
Beispiel #25
0
 private void btnUpdate_Click(object sender, EventArgs e)
 {
     ICD.HEADER msg = new ICD.HEADER();
     msg.FillClientHeader(ICD.DEF.CMD_UserList);
     ICDPacketMgr.GetInst().sendMsgToServer(msg);
 }
Beispiel #26
0
 public UserList()
 {
     InitializeComponent();
     InitListView();
     ICDPacketMgr.GetInst().OnRecv += OnRecvUserList;
 }
Beispiel #27
0
        private void sendEditInfo()
        {
            List <WorkHistory> vec      = new List <WorkHistory>();
            List <string>      newUsers = new List <string>();

            if (cbAccess.Text != mTask.access)
            {
                WorkHistory item = new WorkHistory();
                item.taskID     = mTask.recordID;
                item.editor     = MyInfo.mMyInfo.userID;
                item.columnName = "access";
                item.fromInfo   = mTask.access;
                item.toInfo     = cbAccess.Text;
                vec.Add(item);
            }
            if (cbMainCate.Text != mTask.mainCate)
            {
                WorkHistory item = new WorkHistory();
                item.taskID     = mTask.recordID;
                item.editor     = MyInfo.mMyInfo.userID;
                item.columnName = "mainCate";
                item.fromInfo   = mTask.mainCate;
                item.toInfo     = cbMainCate.Text;
                vec.Add(item);
            }
            if (cbSubCate.Text != mTask.subCate)
            {
                WorkHistory item = new WorkHistory();
                item.taskID     = mTask.recordID;
                item.editor     = MyInfo.mMyInfo.userID;
                item.columnName = "subCate";
                item.fromInfo   = mTask.subCate;
                item.toInfo     = cbSubCate.Text;
                vec.Add(item);
            }
            if (tbTitle.Text != mTask.title)
            {
                WorkHistory item = new WorkHistory();
                item.taskID     = mTask.recordID;
                item.editor     = MyInfo.mMyInfo.userID;
                item.columnName = "title";
                item.fromInfo   = mTask.title;
                item.toInfo     = tbTitle.Text;
                vec.Add(item);
            }
            if (tbComment.Text != mTask.comment)
            {
                WorkHistory item = new WorkHistory();
                item.taskID     = mTask.recordID;
                item.editor     = MyInfo.mMyInfo.userID;
                item.columnName = "comment";
                item.fromInfo   = mTask.comment;
                item.toInfo     = tbComment.Text;
                vec.Add(item);
            }
            if (btnDirector.Text != mTask.director)
            {
                WorkHistory item = new WorkHistory();
                item.taskID     = mTask.recordID;
                item.editor     = MyInfo.mMyInfo.userID;
                item.columnName = "director";
                item.fromInfo   = mTask.director;
                item.toInfo     = btnDirector.Text;
                vec.Add(item);
                newUsers.Add(item.toInfo);
            }
            if (btnWorker.Text != mTask.worker)
            {
                WorkHistory item = new WorkHistory();
                item.taskID     = mTask.recordID;
                item.editor     = MyInfo.mMyInfo.userID;
                item.columnName = "worker";
                item.fromInfo   = mTask.worker;
                item.toInfo     = btnWorker.Text;
                vec.Add(item);
                newUsers.Add(item.toInfo);
            }
            if (dtLaunch.Value.Ticks != DateTime.Parse(mTask.launch).Ticks)
            {
                WorkHistory item = new WorkHistory();
                item.taskID     = mTask.recordID;
                item.editor     = MyInfo.mMyInfo.userID;
                item.columnName = "launch";
                item.fromInfo   = mTask.launch.ToString();
                item.toInfo     = dtLaunch.Value.ToString("yyyy-MM-dd HH:mm:ss");
                vec.Add(item);
            }
            if (dtDue.Value.Ticks != DateTime.Parse(mTask.due).Ticks)
            {
                WorkHistory item = new WorkHistory();
                item.taskID     = mTask.recordID;
                item.editor     = MyInfo.mMyInfo.userID;
                item.columnName = "due";
                item.fromInfo   = mTask.due.ToString();
                item.toInfo     = dtDue.Value.ToString("yyyy-MM-dd HH:mm:ss");
                vec.Add(item);
            }
            if (dtTerm.Value.Ticks != DateTime.Parse(mTask.term).Ticks)
            {
                WorkHistory item = new WorkHistory();
                item.taskID     = mTask.recordID;
                item.editor     = MyInfo.mMyInfo.userID;
                item.columnName = "term";
                item.fromInfo   = mTask.term.ToString();
                item.toInfo     = dtTerm.Value.ToString("yyyy-MM-dd HH:mm:ss");
                vec.Add(item);
            }
            if (cbPriority.Text != mTask.priority)
            {
                WorkHistory item = new WorkHistory();
                item.taskID     = mTask.recordID;
                item.editor     = MyInfo.mMyInfo.userID;
                item.columnName = "priority";
                item.fromInfo   = mTask.priority;
                item.toInfo     = cbPriority.Text;
                vec.Add(item);
            }

            if (vec.Count == 0)
            {
                MessageBox.Show("변경점이 없습니다.");
            }
            else
            {
                if (newUsers.Count > 0)
                {
                    ChatRoomInfo addUserMsg = new ChatRoomInfo();
                    addUserMsg.FillClientHeader(DEF.CMD_AddChatUsers, 0);
                    addUserMsg.body.recordID = mTask.chatID;
                    addUserMsg.body.users    = newUsers.ToArray();
                    ICDPacketMgr.GetInst().sendMsgToServer(addUserMsg);
                }

                ICD.WorkHistoryList msg = new ICD.WorkHistoryList();
                msg.FillClientHeader(ICD.DEF.CMD_TaskEdit, 0);
                msg.workHistory = vec.ToArray();
                ICDPacketMgr.GetInst().sendMsgToServer(msg);

                string editedInfo = "  <Task 변경>\n";
                foreach (var item in msg.workHistory)
                {
                    string info = string.Format("[{0}] : {1} => {2}\n",
                                                item.columnName, item.fromInfo, item.toInfo);
                    editedInfo += info;
                }
                SendChatMessage(editedInfo, true);
            }
        }