Procházet zdrojové kódy

PeerChat: move the encoder SinglePacketBuffer out into client

ambrop7 před 14 roky
rodič
revize
8300520b3d
4 změnil soubory, kde provedl 28 přidání a 19 odebrání
  1. 9 12
      client/PeerChat.c
  2. 3 4
      client/PeerChat.h
  3. 14 3
      client/client.c
  4. 2 0
      client/client.h

+ 9 - 12
client/PeerChat.c

@@ -26,10 +26,8 @@
 
 #include "PeerChat.h"
 
-int PeerChat_Init (PeerChat *o, peerid_t peer_id, PacketPassInterface *output, BPendingGroup *pg, void *user, PeerChat_handler_error handler_error)
+int PeerChat_Init (PeerChat *o, peerid_t peer_id, BPendingGroup *pg, void *user, PeerChat_handler_error handler_error)
 {
-    ASSERT(PacketPassInterface_GetMTU(output) >= sizeof(struct packetproto_header) + SC_MAX_ENC)
-    
     // init arguments
     o->user = user;
     o->handler_error = handler_error;
@@ -43,11 +41,6 @@ int PeerChat_Init (PeerChat *o, peerid_t peer_id, PacketPassInterface *output, B
     // init PacketProto encoder
     PacketProtoEncoder_Init(&o->pp_encoder, SCOutmsgEncoder_GetOutput(&o->sc_encoder), pg);
     
-    // init buffer
-    if (!SinglePacketBuffer_Init(&o->buffer, PacketProtoEncoder_GetOutput(&o->pp_encoder), output, pg)) {
-        goto fail1;
-    }
-    
     DebugObject_Init(&o->d_obj);
     return 1;
     
@@ -62,9 +55,6 @@ void PeerChat_Free (PeerChat *o)
 {
     DebugObject_Free(&o->d_obj);
     
-    // free buffer
-    SinglePacketBuffer_Free(&o->buffer);
-    
     // free PacketProto encoder
     PacketProtoEncoder_Free(&o->pp_encoder);
     
@@ -75,9 +65,16 @@ void PeerChat_Free (PeerChat *o)
     PacketCopier_Free(&o->copier);
 }
 
-PacketPassInterface * PeerChat_GetInput (PeerChat *o)
+PacketPassInterface * PeerChat_GetSendInput (PeerChat *o)
 {
     DebugObject_Access(&o->d_obj);
     
     return PacketCopier_GetInput(&o->copier);
 }
+
+PacketRecvInterface * PeerChat_GetSendOutput (PeerChat *o)
+{
+    DebugObject_Access(&o->d_obj);
+    
+    return PacketProtoEncoder_GetOutput(&o->pp_encoder);
+}

+ 3 - 4
client/PeerChat.h

@@ -28,7 +28,6 @@
 #include <misc/debug.h>
 #include <base/DebugObject.h>
 #include <flow/SinglePacketSender.h>
-#include <flow/SinglePacketBuffer.h>
 #include <flow/PacketProtoEncoder.h>
 #include <flow/PacketCopier.h>
 #include <client/SCOutmsgEncoder.h>
@@ -38,15 +37,15 @@ typedef void (*PeerChat_handler_error) (void *user);
 typedef struct {
     void *user;
     PeerChat_handler_error handler_error;
-    SinglePacketBuffer buffer;
     PacketProtoEncoder pp_encoder;
     SCOutmsgEncoder sc_encoder;
     PacketCopier copier;
     DebugObject d_obj;
 } PeerChat;
 
-int PeerChat_Init (PeerChat *o, peerid_t peer_id, PacketPassInterface *output, BPendingGroup *pg, void *user, PeerChat_handler_error handler_error) WARN_UNUSED;
+int PeerChat_Init (PeerChat *o, peerid_t peer_id, BPendingGroup *pg, void *user, PeerChat_handler_error handler_error) WARN_UNUSED;
 void PeerChat_Free (PeerChat *o);
-PacketPassInterface * PeerChat_GetInput (PeerChat *o);
+PacketPassInterface * PeerChat_GetSendInput (PeerChat *o);
+PacketRecvInterface * PeerChat_GetSendOutput (PeerChat *o);
 
 #endif

+ 14 - 3
client/client.c

@@ -2690,7 +2690,7 @@ struct server_flow * server_flow_init (peerid_t peer_id)
     PacketPassFairQueueFlow_Init(&flow->qflow, &server_queue);
     
     // init sender
-    if (!PeerChat_Init(&flow->sender, peer_id, PacketPassFairQueueFlow_GetInput(&flow->qflow), BReactor_PendingGroup(&ss), NULL, NULL)) {
+    if (!PeerChat_Init(&flow->sender, peer_id, BReactor_PendingGroup(&ss), NULL, NULL)) {
         BLog(BLOG_ERROR, "PeerChat_Init failed");
         goto fail1;
     }
@@ -2698,10 +2698,16 @@ struct server_flow * server_flow_init (peerid_t peer_id)
     // init writer
     BufferWriter_Init(&flow->writer, SC_MAX_MSGLEN, BReactor_PendingGroup(&ss));
     
+    // init encoder buffer
+    if (!SinglePacketBuffer_Init(&flow->encoder_buffer, PeerChat_GetSendOutput(&flow->sender), PacketPassFairQueueFlow_GetInput(&flow->qflow), BReactor_PendingGroup(&ss))) {
+        BLog(BLOG_ERROR, "SinglePacketBuffer_Init failed");
+        goto fail2;
+    }
+    
     // init buffer
-    if (!PacketBuffer_Init(&flow->buffer, BufferWriter_GetOutput(&flow->writer), PeerChat_GetInput(&flow->sender), SERVER_BUFFER_MIN_PACKETS, BReactor_PendingGroup(&ss))) {
+    if (!PacketBuffer_Init(&flow->buffer, BufferWriter_GetOutput(&flow->writer), PeerChat_GetSendInput(&flow->sender), SERVER_BUFFER_MIN_PACKETS, BReactor_PendingGroup(&ss))) {
         BLog(BLOG_ERROR, "PacketBuffer_Init failed");
-        goto fail2;
+        goto fail3;
     }
     
     // set no message
@@ -2709,6 +2715,8 @@ struct server_flow * server_flow_init (peerid_t peer_id)
     
     return flow;
     
+fail3:
+    SinglePacketBuffer_Free(&flow->encoder_buffer);
 fail2:
     BufferWriter_Free(&flow->writer);
     PeerChat_Free(&flow->sender);
@@ -2731,6 +2739,9 @@ void server_flow_free (struct server_flow *flow)
     // free buffer
     PacketBuffer_Free(&flow->buffer);
     
+    // free encoder buffer
+    SinglePacketBuffer_Free(&flow->encoder_buffer);
+    
     // free writer
     BufferWriter_Free(&flow->writer);
     

+ 2 - 0
client/client.h

@@ -28,6 +28,7 @@
 #include <flow/PacketPassFairQueue.h>
 #include <flow/PacketBuffer.h>
 #include <flow/BufferWriter.h>
+#include <flow/SinglePacketBuffer.h>
 #include <client/DatagramPeerIO.h>
 #include <client/StreamPeerIO.h>
 #include <client/DataProto.h>
@@ -87,6 +88,7 @@
 
 struct server_flow {
     PacketPassFairQueueFlow qflow;
+    SinglePacketBuffer encoder_buffer;
     PeerChat sender;
     PacketBuffer buffer;
     BufferWriter writer;