Exemplo n.º 1
0
 public void PostMessage(string username, Message message)
 {
     string prepend = username + ": ";
     byte[] buffer = new byte[prepend.Length + message.Content.Length];
     Message.Encoding.GetBytes(prepend, 0, prepend.Length, buffer, 0);
     Array.Copy(message.Content, 0, buffer, prepend.Length, message.Content.Length);
     PostMessage(new Message(MessageType.MessagePost, buffer));
 }
Exemplo n.º 2
0
 public void PostMessage(Message message)
 {
     lock (pending)
     {
         pending.Enqueue(message);
         posterWait.Set();
     }
 }
Exemplo n.º 3
0
 public static void Send(Socket sock, Message message)
 {
     byte[] buffer = message.GetBytes();
     for (int sent = 0; sent < buffer.Length; )
     {
         sent += sock.Send(buffer, sent, buffer.Length - sent, SocketFlags.None);
     }
 }
Exemplo n.º 4
0
 private void HeaderReceived(object sender, SocketAsyncEventArgs e)
 {
     int length = IPAddress.NetworkToHostOrder(BitConverter.ToInt32(e.Buffer, 0));
     MessageType type = (MessageType)e.Buffer[4];
     message = new Message(type, new byte[length]);
     //receive the content of the message
     SocketAsyncEventArgs args = new SocketAsyncEventArgs();
     args.SetBuffer(message.Content, 0, length);
     args.Completed += new EventHandler<SocketAsyncEventArgs>(ContentReceived);
     if (!App.ConnectedSocket.ReceiveAsync(args)) ContentReceived(null, args);
 }
Exemplo n.º 5
0
 private void CreateClick(object sender, RoutedEventArgs e)
 {
     //send create request for that room to server
     SocketAsyncEventArgs args = new SocketAsyncEventArgs();
     Message m = new Message(MessageType.CreateRoom, Message.Encoding.GetBytes(InputBox.Text));
     byte[] buffer = m.GetBytes();
     args.SetBuffer(buffer, 0, buffer.Length);
     args.Completed += new EventHandler<SocketAsyncEventArgs>(RoomJoined);
     if (!App.ConnectedSocket.SendAsync(args))
         RoomJoined(null, args);
 }
Exemplo n.º 6
0
 protected override void OnRemovedFromJournal(JournalEntryRemovedEventArgs e)
 {
     //send a leave room request
     SocketAsyncEventArgs args = new SocketAsyncEventArgs();
     Message m = new Message(MessageType.LeaveRoom, null);
     byte[] buffer = m.GetBytes();
     args.SetBuffer(buffer, 0, buffer.Length);
     args.Completed += new EventHandler<SocketAsyncEventArgs>(MessagePosted);
     if (!App.ConnectedSocket.SendAsync(args)) MessagePosted(null, args);
     //continue with base
     base.OnRemovedFromJournal(e);
 }
Exemplo n.º 7
0
 private void ContentReceived(object sender, SocketAsyncEventArgs e)
 {
     if (e.BytesTransferred < e.Count)
     {
         e.SetBuffer(e.Offset + e.BytesTransferred, e.Count - e.BytesTransferred);
         if (!App.ConnectedSocket.ReceiveAsync(e)) ContentReceived(e.ConnectSocket, e);
     }
     else
     {
         string content = message.GetContentAsString();
         message = null;
         Dispatcher.BeginInvoke(() => ChatLogBox.Items.Add(content));
         BeginReceive();
     }
 }
Exemplo n.º 8
0
 private void ContentReceived(object sender, SocketAsyncEventArgs e)
 {
     if (e.BytesTransferred < e.Count)
     {
         e.SetBuffer(e.Offset + e.BytesTransferred, e.Count - e.BytesTransferred);
         if (!App.ConnectedSocket.ReceiveAsync(e)) ContentReceived(e.ConnectSocket, e);
     }
     else if (message.Type != MessageType.GetRooms)
     {
         //not the message we were looking for, receive another
         BeginReceive();
     }
     else
     {
         App.RoomInfos = message.GetContentAsRoomInfos().ToList();
         message = null;
         Dispatcher.BeginInvoke(() => MainListBox.ItemsSource = App.RoomInfos);
     }
 }
Exemplo n.º 9
0
 private void ContentReceived(object sender, SocketAsyncEventArgs e)
 {
     if (e.BytesTransferred < e.Count)
     {
         e.SetBuffer(e.Offset + e.BytesTransferred, e.Count - e.BytesTransferred);
         if (!App.ConnectedSocket.ReceiveAsync(e)) ContentReceived(e.ConnectSocket, e);
     }
     else if (message.Type != MessageType.GetRooms)
     {
         //not the message we were looking for, receive another
         BeginReceive();
     }
     else
     {
         App.RoomInfos = message.GetContentAsRoomInfos().ToList();
         message = null;
         //show the chat page
         Dispatcher.BeginInvoke(() => NavigationService.Navigate(new Uri("/RoomListPage.xaml", UriKind.Relative)));
     }
 }
Exemplo n.º 10
0
 private void PostClick(object sender, RoutedEventArgs e)
 {
     string post = InputBox.Text;
     InputBox.Text = string.Empty;
     SocketAsyncEventArgs args = new SocketAsyncEventArgs();
     Message m = new Message(MessageType.MessagePost, Message.Encoding.GetBytes(post));
     byte[] buffer = m.GetBytes();
     args.SetBuffer(buffer, 0, buffer.Length);
     args.Completed += new EventHandler<SocketAsyncEventArgs>(MessagePosted);
     if (!App.ConnectedSocket.SendAsync(args)) MessagePosted(null, args);
 }
Exemplo n.º 11
0
 private void LogInClick(object sender, RoutedEventArgs e)
 {
     Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
     SocketAsyncEventArgs args = new SocketAsyncEventArgs();
     // set up endpoint for connect
     int split = this.Host.Text.IndexOf(':');
     int port;
     if (!int.TryParse(this.Host.Text.Substring(split + 1), out port)) return;
     args.RemoteEndPoint = new DnsEndPoint(this.Host.Text.Substring(0, split), port);
     // set up buffer for send after connect
     Message message = new Message(MessageType.Login, Message.Encoding.GetBytes(this.Username.Text));
     byte[] buffer = message.GetBytes();
     args.SetBuffer(buffer, 0, buffer.Length);
     // set up callback
     args.Completed += new EventHandler<SocketAsyncEventArgs>(LogInCompleted);
     // begin connect
     if (!sock.ConnectAsync(args))
         LogInCompleted(args.ConnectSocket, args);
 }
Exemplo n.º 12
0
 public void SendMessage(Message message)
 {
     lock (pending)
     {
         pending.Enqueue(message);
     }
 }
Exemplo n.º 13
0
 private void LogInCompleted(object sender, SocketAsyncEventArgs e)
 {
     if (e.SocketError != SocketError.Success)
     {
         //clean up
         if (e.ConnectSocket != null)
         {
             e.ConnectSocket.Shutdown(SocketShutdown.Both);
             e.ConnectSocket.Close();
         }
     }
     else
     {
         //connected and data successfully sent
         App.ConnectedSocket = e.ConnectSocket;
         //request to get rooms
         SocketAsyncEventArgs args = new SocketAsyncEventArgs();
         Message m = new Message(MessageType.GetRooms, null);
         byte[] buffer = m.GetBytes();
         args.SetBuffer(buffer, 0, buffer.Length);
         args.Completed += new EventHandler<SocketAsyncEventArgs>(GetRoomsRequestSent);
         if (!App.ConnectedSocket.SendAsync(args)) GetRoomsRequestSent(null, args);
     }
 }
Exemplo n.º 14
0
 private void MainListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
 {
     //If selected index is -1 (no selection) do nothing
     if (MainListBox.SelectedIndex == -1) return;
     //get id of selected room
     byte roomId = App.RoomInfos[MainListBox.SelectedIndex].Id;
     //send join request for that room to server
     SocketAsyncEventArgs args = new SocketAsyncEventArgs();
     Message m = new Message(MessageType.JoinRoom, new byte[]{ roomId });
     byte[] buffer = m.GetBytes();
     args.SetBuffer(buffer, 0, buffer.Length);
     args.Completed += new EventHandler<SocketAsyncEventArgs>(RoomJoined);
     if (!App.ConnectedSocket.SendAsync(args)) RoomJoined(null, args);
     //clear selected index
     MainListBox.SelectedIndex = -1;
 }
Exemplo n.º 15
0
 private void RefreshClick(object sender, EventArgs e)
 {
     //request to get rooms
     SocketAsyncEventArgs args = new SocketAsyncEventArgs();
     Message m = new Message(MessageType.GetRooms, null);
     byte[] buffer = m.GetBytes();
     args.SetBuffer(buffer, 0, buffer.Length);
     args.Completed += new EventHandler<SocketAsyncEventArgs>(GetRoomsRequestSent);
     if (!App.ConnectedSocket.SendAsync(args)) GetRoomsRequestSent(null, args);
 }
Exemplo n.º 16
0
 public static void Send(Socket sock, MessageType type, byte[] content)
 {
     Message m = new Message(type, content);
     Send(sock, m);
 }
Exemplo n.º 17
0
 private void HandleRequest(Message request)
 {
     if (request == null) return;
     switch (request.Type)
     {
         case MessageType.MessagePost:
             room.PostMessage(username, request);
             break;
         case MessageType.Login:
             username = request.GetContentAsString();
             break;
         case MessageType.GetRooms:
             SendMessage(new Message(MessageType.GetRooms,
                 Message.GetRoomInfosAsBytes(server.GetRoomInfos())));
             break;
         case MessageType.CreateRoom:
             JoinRoom(server.CreateRoom(request.GetContentAsString()));
             break;
         case MessageType.JoinRoom:
             JoinRoom(server.GetRoom(request.Content[0]));
             break;
         case MessageType.LeaveRoom:
             LeaveRoom();
             break;
     }
 }