Dcc Chat Connection, Line Based Text
Inheritance: DccConnection
Exemple #1
0
 private void CtcpDccDelegate(CtcpEventArgs e)
 {
     if (e.Data.MessageArray.Length < 2)
     {
         SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG DCC missing parameters");
     }
     else
     {
         switch (e.Data.MessageArray[1])
         {
             case "CHAT":
                 var chat = new DccChat(this, ExternalIpAdress, e);
                 dccConnections.Add(chat);
                 ThreadPool.QueueUserWorkItem(chat.InitWork);
                 break;
             case "SEND":
                 if (e.Data.MessageArray.Length > 6 && (FilterMarker(e.Data.MessageArray[6]) != "T"))
                 {
                     long session;
                     long.TryParse(FilterMarker(e.Data.MessageArray[6]), out session);
                     foreach (DccConnection dc in dccConnections)
                     {
                         if (dc.IsSession(session))
                         {
                             ((DccSend)dc).SetRemote(e);
                             ((DccSend)dc).AcceptRequest(null, 0);
                             return;
                         }
                     }
                     SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG Invalid passive DCC");
                 }
                 else
                 {
                     var send = new DccSend(this, ExternalIpAdress, e);
                     dccConnections.Add(send);
                     ThreadPool.QueueUserWorkItem(send.InitWork);
                 }
                 break;
             case "RESUME":
                 if (dccConnections.Any(dc => (dc is DccSend) && (((DccSend)dc).TryResume(e))))
                 {
                     return;
                 }
                 SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG Invalid DCC RESUME");
                 break;
             case "ACCEPT":
                 if (dccConnections.Any(dc => (dc is DccSend) && (((DccSend)dc).TryAccept(e))))
                 {
                     return;
                 }
                 SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG Invalid DCC ACCEPT");
                 break;
             case "XMIT":
                 SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG DCC XMIT not implemented");
                 break;
             default:
                 SendMessage(SendType.CtcpReply, e.Data.Nick, "ERRMSG DCC " + e.CtcpParameter + " unavailable");
                 break;
         }
     }
 }
Exemple #2
0
 /// <summary>
 /// Init a DCC Chat Session
 /// </summary>
 /// <param name="user">User to DCC</param>
 /// <param name="passive">Passive DCC</param>
 /// <param name="priority">Non Dcc Message Priority for Negotiation</param>
 public void InitDccChat(string user, bool passive, Priority priority)
 {
     var chat = new DccChat(this, user, ExternalIpAdress, passive, priority);
     dccConnections.Add(chat);
     ThreadPool.QueueUserWorkItem(chat.InitWork);
     RemoveInvalidDccConnections();
 }