private void sessioncallback(string id, delegates.Roles r)
 {
     Invoke(new Action(() =>
     {
         if (r == delegates.Roles.Moderator)
         {
             requestmodbutton.Hide();
             disconnectbutton.Text = "End Session";
         }
         else
         {
             requestmodbutton.Show();
             disconnectbutton.Text = "disconnect";
         }
         info.Text      = $"info: Du bist {r.ToString()} in der Session \"{id}\"";
         sessionid.Text = id;
     }));
 }
        /// <summary>
        /// handles a sessioninfo packet
        /// </summary>
        private void handlesessioninfo()
        {
            headers.infotype infotype = headers.infotypes[sendrecv.readfromstream(_Reader, 1)[0]]; //first get the infotype of the sessioninfopacket

            //handle the packet depending on the type of the packet
            switch (infotype)
            {
            case headers.infotype.CurrentSessionInfo:
                Int32  idlength = BitConverter.ToInt32(sendrecv.readfromstream(_Reader, 4), 0);
                string id       = Encoding.UTF8.GetString(sendrecv.readfromstream(_Reader, idlength));
                byte   role     = sendrecv.readfromstream(_Reader, 1)[0];
                this.Role = role == 0 ? delegates.Roles.Moderator : delegates.Roles.Viewer;
                SessionInfoAvailable.Invoke(id, role == 0 ? delegates.Roles.Moderator : delegates.Roles.Viewer);
                break;

            case headers.infotype.EndSession:
                stopAsyncRead();
                SessionEnded.Invoke();
                break;

            case headers.infotype.ViewerJoined:
                ViewerJoinedSession.Invoke();
                break;

            case headers.infotype.QuitSession:
                ViewerQuitSession.Invoke();
                break;

            case headers.infotype.RequestModerator:
                ModeratorRequest.Invoke();
                break;

            case headers.infotype.RequestDenied:
                RequestAnswerAvailable.Invoke(false);
                break;

            case headers.infotype.RequestAccepted:
                RequestAnswerAvailable.Invoke(true);
                break;
            }
        }