Example #1
0
        public void Uploaded()
        {
            if (this.type == "Teacher")
            {
                //UserEnter 라는 이벤트를 전달한다
                ChatEventArgs e = new ChatEventArgs();
                e.msgType = MessageType.Uploaded;

                BroadcastMessage(e);
            }
        }
Example #2
0
        public void SendRequest(string to, string file)
        {
            ChatEventArgs e = new ChatEventArgs();
            e.msgType = MessageType.SendResponse;
            e.serial = Xml.Xml_FindName(this.serial);
            e.file = file;

            try
            {
                ChatEventHandler chatterTo;
                lock (syncObj)
                {
                    chatterTo = chatters[to];
                }
                chatterTo.BeginInvoke(this, e, new AsyncCallback(EndAsync), null);

            }
            catch (KeyNotFoundException)
            {
                foreach (string serial in chatters.Keys)
                {
                    if (serial == this.serial)
                        continue;
                    ++totaldown;
                }

                foreach (ChatEventHandler ch in ChatEvent.GetInvocationList())
                {
                    if (chatters[this.serial] == ch)
                        continue;
                    ch.BeginInvoke(this, e, new AsyncCallback(EndAsync), null);
                }
            }
        }
Example #3
0
        public void Erase(string type, string page, double left, double top, Point[] pts)
        {
            if (this.type == "Teacher")
            {
                ChatEventArgs e = new ChatEventArgs();
                e.msgType = MessageType.EraseReceive;
                e.type = type;
                e.page = page;
                e.rectleft = left;
                e.recttop = top;
                e.pts = pts;
                e.bookname = this.bookname;

                BroadcastMessage(e);
            }
        }
Example #4
0
        public void SendScroll(double offset)
        {
            if (this.type == "Teacher")
            {
                ChatEventArgs e = new ChatEventArgs();
                e.msgType = MessageType.ReceiveScroll;
                e.offset = offset;
                e.bookname = this.bookname;

                BroadcastMessage(e);
            }
        }
Example #5
0
        public void MovePage(string page)
        {
            if (this.type == "Teacher")
            {
                ChatEventArgs e = new ChatEventArgs();
                e.msgType = MessageType.ReceivePage;
                e.serial = this.serial;
                e.page = page;
                e.bookname = this.bookname;

                BroadcastMessage(e);
            }
        }
Example #6
0
        public void MemoText(string id, string text)
        {
            if (this.type == "Teacher")
            {
                ChatEventArgs e = new ChatEventArgs();
                e.msgType = MessageType.MemoTextReceive;
                e.serial = id;
                e.message = text;
                e.bookname = this.bookname;

                BroadcastMessage(e);
            }
        }
Example #7
0
        public void Draw(string type, Color color, Point pt, int fontsize)
        {
            if (this.type == "Teacher")
            {
                ChatEventArgs e = new ChatEventArgs();
                e.msgType = MessageType.DrawReceive;
                e.pt = pt;
                e.color = color;
                e.type = type;
                e.fontsize = fontsize;
                e.bookname = this.bookname;

                BroadcastMessage(e);
            }
        }
Example #8
0
        public void DrawEnd(string type, string id)
        {
            if (this.type == "Teacher")
            {
                ChatEventArgs e = new ChatEventArgs();
                e.msgType = MessageType.DrawEnd;
                e.type = type;
                e.serial = id;
                e.bookname = this.bookname;

                BroadcastMessage(e);
            }
        }
Example #9
0
        public void Leave()
        {
            if (this.serial == null) return;

            lock (syncObj)
            {
                chatters.Remove(this.serial);
            }
            ChatEvent -= myEventHandler;

            //새로운 이벤트 발생
            ChatEventArgs e = new ChatEventArgs();
            e.msgType = MessageType.UserLeave;
            e.serial = this.serial;
            BroadcastMessage(e);
        }
Example #10
0
 public void Say(string msg)
 {
     ChatEventArgs e = new ChatEventArgs();
     e.msgType = MessageType.Receive;
     e.serial = this.serial;
     e.message = msg;
     BroadcastMessage(e);
 }
Example #11
0
 private void MyEventHandler(object sender, ChatEventArgs e)
 {
     try
     {
         //클라이언트에게 보내기
         switch (e.msgType)
         {
             case MessageType.Receive:
                 callback.Receive(e.serial, e.message);
                 break;
             case MessageType.UserEnter:
                 //callback.UserEnter(Xml.Xml_FindName(e.serial));
                 callback.UserEnter(e.serial, e.name);
                 break;
             case MessageType.DrawPrepare:
                 callback.PrepareReceive(e.type, e.color, e.pt, e.fontsize, e.bookname);
                 break;
             case MessageType.DrawReceive:
                 callback.DrawReceive(e.type, e.color, e.pt, e.fontsize, e.bookname);
                 break;
             case MessageType.DrawEnd:
                 callback.DrawEndReceive(e.type, e.serial, e.bookname);
                 break;
             case MessageType.UserLeave:
                 callback.UserLeave(e.serial);
                 break;
             case MessageType.MemoReceive:
                 callback.MemoReceive(e.serial, e.bookname);
                 break;
             case MessageType.MemoTextReceive:
                 callback.MemoTextReceive(e.serial, e.message, e.bookname);
                 break;
             case MessageType.EraseReceive:
                 callback.EraseReceive(e.type, e.page, e.rectleft, e.recttop, e.pts, e.bookname);
                 break;
             case MessageType.SendResponse:
                 callback.SendResponse(e.serial, e.file);
                 break;
             case MessageType.ReceivePage:
                 callback.ReceivePage(e.page, e.bookname);
                 break;
             case MessageType.ReceiveScroll:
                 callback.ReceiveScroll(e.offset, e.bookname);
                 break;
             case MessageType.Uploaded:
                 callback.Uploaded();
                 break;
         }
     }
     catch//에러가 발생했을 경우
     {
         Leave();
     }
 }
Example #12
0
        private void BroadcastMessage(ChatEventArgs e)
        {
            //이벤트
            ChatEventHandler temp = ChatEvent;

            if (temp != null)
            {
                //현재 이벤트들을 전달한다.
                foreach (ChatEventHandler handler in temp.GetInvocationList())
                {
                    handler.BeginInvoke(this, e, new AsyncCallback(EndAsync), null);
                }
            }
        }
Example #13
0
        public string[] Join(string serial)
        {
            //자기 자신의 이벤트 핸들러 등록
            myEventHandler = new ChatEventHandler(MyEventHandler);

            lock (syncObj)
            {
                if (!chatters.ContainsKey(serial))//이름이 기존 채터에 있는지 검색한다.
                {
                    //이름과 이벤트를 추가한다.
                    this.serial = serial;
                    chatters.Add(serial, MyEventHandler);

                    //시리얼을 기반으로 타입 검색
                    this.type = Xml.Xml_FindType(serial);

                    //사용자에게 보내 줄 채널을 설정한다.
                    callback = OperationContext.Current.GetCallbackChannel<ISIUCallback>();

                    //UserEnter 라는 이벤트를 전달한다
                    ChatEventArgs e = new ChatEventArgs();
                    e.msgType = MessageType.UserEnter;
                    e.serial = serial;
                    e.name = Xml.Xml_FindName(serial);
                    BroadcastMessage(e);

                    //델리게이터 추가
                    ChatEvent += myEventHandler;

                    //사용자리스트를 보내준다.
                    string[] list = new string[chatters.Count];
                    lock (syncObj)
                    {
                        chatters.Keys.CopyTo(list, 0);
                    }
                    return list;
                }
                else //이미 사용자가 사용하고 있는 이름일 경우
                {
                    return null;
                }
            }
        }