private void OnDataReceived(UnityToClientMessage e) { EventHandler <UnityToClientMessage> handler = DataReceivedEvent; if (handler != null) { handler(this, e); } }
private UnityToClientMessage ByteArrayToObject(byte[] arrBytes) { MemoryStream memStream = new MemoryStream(); BinaryFormatter binForm = new BinaryFormatter(); memStream.Write(arrBytes, 0, arrBytes.Length); memStream.Seek(0, SeekOrigin.Begin); UnityToClientMessage obj = (UnityToClientMessage)binForm.Deserialize(memStream); return(obj); }
private void Run() { try { // ShutdownEvent is a ManualResetEvent signaled by // Client when its time to close the socket. while (!ShutDownEvent.WaitOne(0)) { try { if (!_stream.DataAvailable) { continue; } //Read the first 4 bytes which represent the size of the message, and convert from byte array to int32 var sizeinfo = new byte[4]; _stream.Read(sizeinfo, 0, 4); var messageSize = BitConverter.ToInt32(sizeinfo, 0); //create a new buffer for the data to be read var buffer = new byte[messageSize]; var read = 0; //Continue reading from the stream until we have read all bytes @messageSize while (read != messageSize) { read += _stream.Read(buffer, read, buffer.Length - read); } //I use flatbuffers, so you should deserialize yourself. var message = new UnityToClientMessage().FlatDeserialize(buffer); //raise data received event OnDataReceived(message); } catch (IOException ex) { // Handle the exception... throw; } } } catch (Exception ex) { // Handle the exception... throw; } finally { _stream.Close(); } }