void acceptCompleted(Socket accepted) { // Send a ConnectionAccepted. try { ClientRepresentation client = new ClientRepresentation(this) { ClientSocket = accepted }; connectedClients.Add(client); client.MessageReceived += ProcessMessageBytes; client.SendBytes(SocketPipeHelper.BuildMessage(MessageType.ConnectionAccepted, null)); ClientConnected?.Invoke(this); client.AwaitBytes(); } finally { if (!isStopped) { serverAccept(); } } }
internal void ProcessMessageBytes(byte[] buffer) { logger.Info("Message bytes received."); IFormatter formatter = new BinaryFormatter(); MessageType type = SocketPipeHelper.GetMessageType(buffer); if (type == MessageType.Message || type == MessageType.BroadcastMessage) { using (MemoryStream ms = new MemoryStream()) { ms.Write(buffer, 8, buffer.Length - 8); ms.Position = 0; object o = formatter.Deserialize(ms); if (o is BaseMessage) { ProcessMessage(o as BaseMessage); } } } else if (type == MessageType.ConnectionAccepted) { Connected?.Invoke(); } }
public void PushMessage(BaseMessage msg) { try { logger.Info($"PushMessage({msg.GetType().Name}) {connectedClients.Count}"); IFormatter formatter = new BinaryFormatter(); using (MemoryStream stream = new MemoryStream()) { formatter.Serialize(stream, msg); byte[] arr = stream.ToArray(); byte[] message = SocketPipeHelper.BuildMessage(MessageType.Message, arr); foreach (var client in connectedClients) { client.SendBytes(message); } } } catch (Exception ex) { LoggerUtil.RecursivelyLogException(logger, ex); } }
public void PushMessage(BaseMessage msg) { logger.Info($"PushMessage({msg.GetType().Name})"); IFormatter formatter = new BinaryFormatter(); using (MemoryStream stream = new MemoryStream()) { formatter.Serialize(stream, msg); byte[] arr = stream.ToArray(); byte[] message = SocketPipeHelper.BuildMessage(msg is ClientToClientMessage ? MessageType.BroadcastMessage : MessageType.Message, arr); client.SendBytes(message); } }