#ifndef _M_UDP_
#define _M_UDP_

#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000
// MulticastSocket.h : header file

typedef void(CALLBACK*MulticastCALLBACK)(unsigned char* buffer, const DWORD size,LPVOID lp);
#include <afxsock.h>

class CMUDP : public CAsyncSocket
{
public:
            CMUDP();
    virtual ~CMUDP();
public:
	BOOL    InitGroup( CString, UINT, UINT, BOOL );
    BOOL    LeaveGroup();
    BOOL    SendToY( const void *, int );
	void    SetReadCallBack(MulticastCALLBACK fun, LPVOID lp);
public:
    virtual void OnReceive(int nErrorCode);
private:
    unsigned char   m_strBuffer[32000]; // Receiving buffer for the packet that has arrived
    SOCKADDR_IN     m_saHostGroup;  // SOCKADDR structure to hold IP/Port of the Host group to send data to it
    ip_mreq         m_mrMReq;           // Contains IP and interface of the host group
    UINT            m_nSendersPort;     // Holds Port No. of the socket from which last packet was received
    CString         m_strSendersIP;     // Hold IP of the socket from which the last packet was received
	MulticastCALLBACK m_fun;
	LPVOID          m_param;
};

#endif // !defined(AFX_MULTICASTSOCKET_H__269E2C7F_2037_11D3_8EF3_0000C0FD25F8__INCLUDED_)