示例#1
0
 // Wrap the client events so the server owner can catch them.
 protected override void DataReceivedHandle(ClientConnection sender, IncomingMessageEventArgs e)
 {
     // If client already authenticated.
     if (authenticatedConnections.ContainsKey(sender.RemoteEndPoint))
     {
         switch ((PacketType)e.PacketType)
         {
             case PacketType.AudioSegment:
                 authenticatedConnections[sender.RemoteEndPoint].ContinueStream();
                 break;
             case PacketType.RequestList:
                 GeneralEvent.Invoke(this, new GeneralEventArgs(authenticatedConnections[sender.RemoteEndPoint].Username,
                     sender.RemoteEndPoint, ("Requested a new track list.")));
                 authenticatedConnections[sender.RemoteEndPoint].RequestUpdateList();
                 break;
             case PacketType.StartAudioStream:
                 byte[] requestReply = null;
                 BeginStreamingAudio(sender.RemoteEndPoint, e.Message, out requestReply);
                 SendData(sender.RemoteEndPoint, requestReply, (byte)PacketType.StartAudioStream);
                 break;
             case PacketType.StopAudioStream:
                 authenticatedConnections[sender.RemoteEndPoint].EndStreaming();
                 break;
             case PacketType.UnknownPacket:
                 GeneralEvent.Invoke(this, new GeneralEventArgs(authenticatedConnections[sender.RemoteEndPoint].Username,
                     sender.RemoteEndPoint, "Made a request to close the connection."));
                 DropClient(sender.RemoteEndPoint);
                 break;
             default:
                 GeneralEvent.Invoke(this, new GeneralEventArgs(authenticatedConnections[sender.RemoteEndPoint].Username,
                     sender.RemoteEndPoint, ("Made a request with packet type " + ((PacketType)e.PacketType).ToString() + " which is invalid for this context.")));
                 break;
         }
     }
     else
     {
         // See if the client is trying to authenticate or register.
         byte[] send = null;
         switch ((PacketType)e.PacketType)
         {
             case PacketType.Authenticate:
                 // Authenticate this client.
                 AuthenticateClient(sender.RemoteEndPoint, e.Message, out send);
                 SendData(sender.RemoteEndPoint, send, (byte)PacketType.Authenticate);
                 break;
             case PacketType.Register:
                 // Register new credentials.
                 RegisterNewUser(sender.RemoteEndPoint, e.Message, out send);
                 SendData(sender.RemoteEndPoint, send, (byte)PacketType.Register);
                 break;
             case PacketType.UnknownPacket:
                 GeneralEvent.Invoke(this, new GeneralEventArgs(null, sender.RemoteEndPoint, "Made a request to close the connection."));
                 DropClient(sender.RemoteEndPoint);
                 break;
             default:
                 GeneralEvent.Invoke(this, new GeneralEventArgs(null, sender.RemoteEndPoint,
                     ("Made a request with packet type " + ((PacketType)e.PacketType).ToString() + " which is invalid for this context.")));
                 break;
         }
         if (send != null) { sender.SendDataPacket(ref send, e.PacketType); } // Reply with the same header and some data.
     }
 }