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; } }