protected void Handle_Message(IWCMessage message) { switch (message.MessageType) { case WCMessageType.CONNECTREQUEST: break; case WCMessageType.CONNECTACCEPT: SendConnectedEvent(message); break; case WCMessageType.CONNECTDENY: CommunicationChannel.Disconnect(false); SendDisconnectedEvent(message); break; case WCMessageType.MESSAGE: SendMessageReceivedEvent(message); break; case WCMessageType.SERVER: SendMessageReceivedEvent(message); break; case WCMessageType.DISCONNECT: CommunicationChannel.Disconnect(false); SendDisconnectedEvent(message); break; default: break; } }
protected void SendMessageReceivedEvent(IWCMessage message) { EventHandler<WCMessageEventArg> handler = MessageRecieved; if (handler != null) { handler(this, new WCMessageEventArg(message)); } }
protected void SendDisconnectedEvent(IWCMessage message) { EventHandler<WCMessageEventArg> handler = Disconnected; if (handler != null) { handler(this, new WCMessageEventArg(message)); } }
public override byte[] GetBytes(IWCMessage message) { if (message == null) { return null; } byte[] data = Serialize(message); byte[] message_length = new byte[headersize]; BitConverter.GetBytes(data.Length).CopyTo(message_length, 0); byte[] result = new byte[data.Length + headersize]; message_length.CopyTo(result, 0); data.CopyTo(result, headersize); return result; }
protected void HandleConnectionRequest(IWCMessage message) { if (pendingAuth) { if (message.Message.Length > 0) { Username = message.Message; pendingAuth = false; SendConnectionAcceptEvent(); } else { IWCMessage denyMessage = new WCMessage("Connection Refused: Username was empty.", WCMessageType.CONNECTDENY); SendConnectionDenyEvent(denyMessage); Debug.WriteLine("HandleConnectioRequest() failed due to message.legnth not greater then 0"); } } else { Debug.WriteLine("HandleConnectioRequest() failed due to pendingAuth = false"); } }
public override void SendMessage(IWCMessage message) { if (message == null) { return; } byte[] data = null; try { data = WireProtocol.GetBytes(message); } catch (Exception) { throw; } int total_sent = 0; lock(communication_lock) { try { while (total_sent < data.Length) { int sent = client.Client.Send(data, total_sent, data.Length - total_sent, SocketFlags.None); if (sent <= 0) { throw new Exception("Failed to send TCP message."); } total_sent += sent; LastMessageSentDateStamp = DateTime.Now; SendMessageSentEvent(message); } } catch (Exception ex) { Debug.WriteLine(ex.Message); } } }
protected void SendDisconnectEvent(IWCMessage message) { EventHandler<WCServerClientEventArgs> handler = Disconnected; String disconnectMsg = "***" + Username + " has disconnected ( " + message.Message + " )"; IWCMessage discoMessage = new WCMessage(disconnectMsg, WCMessageType.SERVER); if (handler != null) { handler(this, new WCServerClientEventArgs(ClientID, Username, discoMessage)); } }
protected void SendConnectionDenyEvent(IWCMessage message) { EventHandler<WCServerClientEventArgs> handler = ConnectionDenied; if (handler != null) { handler(this, new WCServerClientEventArgs(ClientID, Username, message)); } }
protected void SendMessageEvent(IWCMessage message) { EventHandler<WCMessageEventArg> handler = MessageRecieved; String msgWithUsername = "******" + Username + "> " + message.Message; WCMessageEventArg eventMessage = new WCMessageEventArg(new WCMessage(msgWithUsername, WCMessageType.MESSAGE)); if (handler != null) { handler(this, eventMessage); } }
public WCMessageEventArg(IWCMessage message) { Message = message; }
public abstract void Disconnect(IWCMessage message);
protected void SendMessage(IWCMessage message) { foreach (var client in clients.Values) { client.CommunicationChannel.SendMessage(message); } }
public WCServerClientEventArgs(Guid clientID, String username, IWCMessage message) { ClientID = clientID; Username = username; Message = message; }
public void SendMessage(IWCMessage message) { CommunicationChannel.SendMessage(message); }
public override void Disconnect(IWCMessage message) { CommunicationChannel.SendMessage(message); CommunicationChannel.Disconnect(false); }
public abstract byte[] GetBytes(IWCMessage message);
public abstract void SendMessage(IWCMessage message);