public void Uploaded() { if (this.type == "Teacher") { //UserEnter 라는 이벤트를 전달한다 ChatEventArgs e = new ChatEventArgs(); e.msgType = MessageType.Uploaded; BroadcastMessage(e); } }
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); } } }
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); } }
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); } }
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); } }
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); } }
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); } }
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); } }
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); }
public void Say(string msg) { ChatEventArgs e = new ChatEventArgs(); e.msgType = MessageType.Receive; e.serial = this.serial; e.message = msg; BroadcastMessage(e); }
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(); } }
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); } } }
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; } } }